{"objects":[{"_id":"636beebc3b7d06000971c644","slug":"stefan-kudla","title":"Stefan Kudla","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"BgFHSqrFnd","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"trUgJkN1Br","value":"b7993e30-605a-11ed-b192-abbbbb9eecea-avatar4.png","url":"https://cdn.cosmicjs.com/b7993e30-605a-11ed-b192-abbbbb9eecea-avatar4.png","imgix_url":"https://imgix.cosmicjs.com/b7993e30-605a-11ed-b192-abbbbb9eecea-avatar4.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2022-11-09T18:17:32.738Z","created_at":"2022-11-09T18:17:32.738Z","modified_at":"2022-11-09T18:18:15.113Z","status":"published","locale":null,"published_at":"2022-11-09T18:18:15.113Z","modified_by":"6321e6074fd8b200090bb00c","thumbnail":"https://imgix.cosmicjs.com/b7993e30-605a-11ed-b192-abbbbb9eecea-avatar4.png","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/b7993e30-605a-11ed-b192-abbbbb9eecea-avatar4.png","imgix_url":"https://imgix.cosmicjs.com/b7993e30-605a-11ed-b192-abbbbb9eecea-avatar4.png"}}},{"_id":"5aeb153759f8ac161a344eb5","bucket":"538a0d0f8ceb85ee75000001","slug":"google-analytics-view-id","title":"Google Analytics View ID","content":"","metafields":[{"key":"view_id","title":"View ID","type":"text","value":"93811727"}],"type_slug":"analytics","created":"2018-05-03T13:57:11.868Z","created_at":"2018-05-03T13:57:11.868Z","order":null,"metadata":{"view_id":"93811727"}},{"_id":"5fdcc6beabe43100078a215b","slug":"headless-cms","title":"Headless CMS explained in a few minutes","content":"<p dir=\"ltr\" style=\"text-align: center;\"><img src=\"https://imgix.cosmicjs.com/5e679990-2b96-11ed-9473-89ee36ceb7dd-headless-cms.png?w=10&auto=format\" data-image=\"https://imgix.cosmicjs.com/5e679990-2b96-11ed-9473-89ee36ceb7dd-headless-cms.png?w=1200&auto=format\" style=\"width: 100%;\" class=\"lazy-load fr-fic fr-dii\" alt=\"headless cms\"></p><p dir=\"ltr\" style=\"text-align: center;\"><em>A headless CMS uses API data to display <em>content on a&nbsp;</em>custom frontend.</em></p><h2 dir=\"ltr\"><br></h2><h2 dir=\"ltr\" id=\"what-is-a-headless-cms\">What is a headless CMS?</h2><p><span data-reactroot=\"\" data-token-index=\"0\">A headless CMS is a content management system in which the content (the &ldquo;body&rdquo;) is separated or decoupled from where the content is presented (the &ldquo;head&rdquo;). Content is created using a&nbsp;</span>dashboard and content is delivered using an <a href=\"#what-is-an-api\">API</a>. By exposing an API to deliver content, a headless CMS does not restrict content to a single connected frontend &ldquo;head&rdquo; but rather enables content to be delivered to any number\r\nof websites or apps.</p><h3>What does &quot;headless&quot; mean?</h3><p>The term &quot;headless&quot; refers to <a href=\"https://en.wikipedia.org/wiki/Headless_software\" rel=\"noopener noreferrer\" target=\"_blank\">headless software</a> in which a system comes without a frontend piece of the architecture, resulting in an increased level of flexibility. A CMS can be considered headless when it comes without the frontend presentation &ldquo;head&rdquo; (usullay a website), and only provides a dashboard to create content and an API to deliver the content. This enables the flexibility of the content to be delivered to multiple frontend &ldquo;head&rdquo;s, regardless of their use case or underlying technology.</p><h3>How does a headless CMS work?</h3><p>A headless CMS is comprised of a content creation dashboard and a content delivery API.</p><p><strong>1. Content creation dashboard</strong><br>The headless CMS dashboard interface enables teams to collaborate around content creation. Either a hosted service, or self-hosted application, it provides an interface to manage content, upload media assets, and create publishing workflows.</p><p><strong>2. Content delivery API</strong><br>The headless CMS API enables developers to deliver content to any website or app. This is where headless CMS makes a compelling case for teams that want more flexibility in their content delivery. Instead of being locked into a rigid coupled frontend,\r\na headless CMS enables content to be freely deliverd to any location.</p><h2 id=\"what-is-an-api\">What is an API?</h2><p>An <a href=\"https://aws.amazon.com/what-is/api/\" rel=\"noopener noreferrer\" target=\"_blank\">API</a> (application programming interface) is the way internet-connected services communicate with one another over a network. It uses HTTP endpoints which provide a dataset (commonly <a href=\"https://www.w3schools.com/whatis/whatis_json.asp\" rel=\"noopener noreferrer\" target=\"_blank\">JSON</a>) to be consumed or updated. Some examples of API protocols include legacy methods like SOAP and RSS, as well as more modern approaches like REST and GraphQL. (Explore a <a href=\"https://swapi.dev/\" rel=\"noopener noreferrer\" target=\"_blank\">fun RESTful API</a>)</p><p><strong>How does headless CMS use an API?</strong><br>A headless CMS provides an API to deliver content to frontend applications. By providing an API layer, the headless CMS ensures that the content can be delivered to any website or application. This is in contrast to a traditional CMS which locks you into\r\na single frontend website.</p><h2 id=\"headless-cms-vs-traditional-cms\">Headless CMS vs traditional CMS</h2><p>Traditional CMSs (WordPress, Drupal, etc.) were developed in a time (early 2000s) when content only needed to be managed for a single website. They commonly came with open source code that a developer could install and run on a server. Along with the\r\ninstallation, came the continued maintenance of a content and user management database, server side codebase, media management, and more. After configuring and maintaining the CMS, without an API, there was usually only one place the content could go:\r\nto a single website.</p><p><img src=\"https://imgix.cosmicjs.com/6a4703c0-2d3c-11ed-9188-3bacb03681de-traditional-cms-diagram.png?w=10&auto=format\" data-image=\"https://imgix.cosmicjs.com/6a4703c0-2d3c-11ed-9188-3bacb03681de-traditional-cms-diagram.png?w=1200&auto=format\" style=\"width: 100%;\" class=\"lazy-load fr-fic fr-dib\" alt=\"Traditional CMS\"></p><p style=\"text-align: center;\"><em>A traditional CMS keeps content locked into a single website.</em></p><p><strong>Changing landscape</strong><br>The digital landscape has changed a lot since the early 2000s. With the proliferation of internet-connected devices (mobile, AR/VR, IoT, etc.) companies are needing content to be delivered at scale with more control and flexibility. Companies with content\r\nlocked in a traditional CMS are finding themselves locked in and left behind.</p><p><strong>Enter headless CMS</strong><br>By using a headless CMS, companies can write their content once and deliver it anywhere. Their content is no longer locked into a single website, it can now be freely delivered to any website or app, building relationships with customers wherever they\r\nare. Plus content is future-ready to meet customers in any new emergent digital location.</p><p><img src=\"https://imgix.cosmicjs.com/9e186540-2d3c-11ed-9188-3bacb03681de-headless-cms-diagram.png?w=10&auto=format\" data-image=\"https://imgix.cosmicjs.com/9e186540-2d3c-11ed-9188-3bacb03681de-headless-cms-diagram.png?w=1200&auto=format\" style=\"width: 100%;\" class=\"lazy-load fr-fic fr-dib\" alt=\"Headless CMS\"></p><p style=\"text-align: center;\"><em>A headless CMS frees content to be deployed to any website or app.</em></p><p style=\"text-align: center;\"><br></p><table style=\"width: 100%;\"><tbody><tr><td style=\"width: 33.3333%;\"><br></td><td style=\"width: 33.3333%;\"><strong>Traditional CMS</strong></td><td style=\"width: 33.3333%;\"><strong>Headless CMS</strong></td></tr><tr><td style=\"width: 33.3333%;\">Technology</td><td style=\"width: 33.3333%;\">Monolithic, hosted and maintained by you</td><td style=\"width: 33.3333%;\">Best-in-class services, hosted and maintained for you</td></tr><tr><td style=\"width: 33.3333%;\">Scalability</td><td style=\"width: 33.3333%;\">Limited, one-to-one</td><td style=\"width: 33.3333%;\">Limitless, one-to-many</td></tr><tr><td style=\"width: 33.3333%;\">Security</td><td style=\"width: 33.3333%;\">Self-managed</td><td style=\"width: 33.3333%;\">Managed for you</td></tr><tr><td style=\"width: 33.3333%;\">Workflow</td><td style=\"width: 33.3333%;\">Waterfall</td><td style=\"width: 33.3333%;\">Agile</td></tr><tr><td>Developer Experience</td><td>Locked in frontend</td><td>Flexible, bring your own frontend</td></tr></tbody></table><p><br></p><p><strong>What about decoupled CMS?</strong><br>A decoupled CMS is a traditional CMS that includes a connected frontend but also includes an API that can be used to deliver content to other websites or apps. This is more of a hybrid model that, with a self-hosted CMS, still comes with the responsibility\r\nto maintain the CMS infrastructure.</p><h2 id=\"why-use-a-headless-cms\">Why use a headless CMS?</h2><p>Many teams are choosing to use a headless CMS because it affords them considerable time and cost savings. By avoiding the pain and time spent building and maintaining their own CMS, teams are able to focus on what really matters: building great content\r\nand user experiences.</p><h3>Benefits of a headless CMS</h3><p>Some benefits of a headless CMS include:</p><ol><li>Less infrastructure for developers to maintain</li><li>Increased collaboration between developers and content creators</li><li>Content scalability: write once, deploy anywhere</li><li>Enhanced security</li><li>Optimization out-of-the-box</li></ol><h3>Is headless CMS the right choice for my project?</h3><p>If you answer yes to any one or a few of these questions, a headless CMS may be the right choice for you.</p><p><strong>As a developer</strong></p><ol><li>Are you building a website or app that requires content management using an intuitive dashboard interface?</li><li>Would you rather avoid building and maintaining your own CMS infrastructure and simply &quot;plug in&quot; to a CMS that has flexible content modeling, global CDN caching, asset management, and image optimization?</li><li>Do you want the freedom to build your application using the tools that you want to use, and not one required by a CMS?</li><li>Do you want to store your content in a universal JSON format, future-proofing your application for any frontend technology changes?</li></ol><p><span data-reactroot=\"\" data-token-index=\"0\"><strong>As a content creator</strong></span></p><ol><li>Do you want to manage content in an easy-to-use dashboard interface?</li><li>Do you have developers on your team that can help you set up content models and integrate the content into your website or app?</li><li>Do you want to work in parallel with your developers to build content-powered projects faster?</li></ol><p><span data-reactroot=\"\" data-token-index=\"0\"><strong>As a business owner or company</strong></span></p><ol><li>Do you have both developers and content creators on your team that want powerful API tools, the freedom to choose their own tech stack, and an easy-to-use dashboard for creating content?</li><li>Do you want to avoid the pain, time consumption, and tech debt that comes with managing your own CMS infrastructure? Would you rather outsource this service to a dedicated company focused on optimizing this part of your business?</li><li>Do you need content that can be delivered to multiple locations? (Website, app, microsites, automation workflows, etc?)</li><li>Do you want the convenience of one login to manage multiple projects with granular user roles and permissions for your team?</li></ol><h2 id=\"headless-cms-use-cases\">Headless CMS use cases</h2><p>Some common use cases for headless CMS include <a href=\"https://www.cosmicjs.com/solutions/headless-cms-for-company-websites\">websites</a>, <a href=\"https://www.cosmicjs.com/solutions/headless-cms-for-blogs\">blogs</a>, <a href=\"https://www.cosmicjs.com/solutions/headless-cms-for-native-apps\" rel=\"noopener noreferrer\" target=\"_blank\">mobile apps</a>, and <a href=\"https://www.cosmicjs.com/solutions/headless-cms-for-ecommerce-websites\">ecommerce</a>. Learn more about <a href=\"https://www.cosmicjs.com/customers\">companies using a headless CMS</a> to drive their project and business goals.</p><h2 id=\"cosmic-headless-cms\">Cosmic headless CMS</h2><p>As one of the longest-running headless CMS solutions on the market, Cosmic has played a big role in the evolution of content management into the era of headless CMS. Cosmic is committed to providing the best tools for developers, content creators, and\r\nteam leaders to facilitate highly effective project collaboration.</p><p><strong>For developers</strong><br>Cosmic provides developers with powerful tools to build content-driven applications. Leave the infrastructure behind and get started in minutes with Cosmic&rsquo;s powerful API tools and resources. Read the <a href=\"https://docs.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic documentation</a>.</p><p><strong>For content creators</strong><br>Cosmic is not just built for developers, content creators will find Cosmic&rsquo;s approach to the content creation process intuitive and delightful. Browse <a href=\"https://www.cosmicjs.com/features\">content creation features</a>.</p><p><strong>For team leaders</strong><br>Business goals move faster when content moves faster. By giving each team member what they need to succeed, Cosmic facilitates efficient team collaboration. Projects are built faster and shipped to customers sooner. The end result is customers can engage with your company faster and with an optimized content experience on a global scale. <a href=\"https://www.cosmicjs.com/enterprise#sales-form\">Contact us</a> to get a custom quote for your project.</p>","metafields":[{"children":null,"type":"text","title":"SEO Title (H1)","key":"seo_title","id":"PlfISy81oX","value":"Headless CMS explained in a few minutes"},{"children":null,"type":"text","title":"Subheadline","key":"subheadline","id":"QIfuZriJHY","value":"Learn what a headless CMS is, how it differs from a traditional CMS, its benefits, use cases, and if it is the right choice for your project."},{"children":null,"type":"textarea","title":"SEO Description","key":"seo_description","id":"wdPtKIPWNQ","value":"Learn what a headless CMS is, how it differs from a traditional CMS, its benefits, use cases, and if it is the right choice for your project."}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"pages","created":"2020-12-18T15:11:58.420Z","created_at":"2020-12-18T15:11:58.420Z","modified_at":"2022-09-14T00:55:47.394Z","status":"published","locale":null,"modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/c60612d0-2e33-11ed-bac3-370838fb3053-headless-cms.png","publish_at":null,"published_at":"2022-09-14T00:55:47.394Z","unpublish_at":null,"metadata":{"seo_title":"Headless CMS explained in a few minutes","subheadline":"Learn what a headless CMS is, how it differs from a traditional CMS, its benefits, use cases, and if it is the right choice for your project.","seo_description":"Learn what a headless CMS is, how it differs from a traditional CMS, its benefits, use cases, and if it is the right choice for your project."}},{"_id":"632e0c02b0377d000920d46a","slug":"react-cms-landing-page","title":"React CMS","content":"<p><img src=\"https://imgix.cosmicjs.com/73838e40-3b74-11ed-82fa-b7a5f7d1aae0-react-cms.png?w=1200&format=auto\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" alt=\"React CMS\"></p><p dir=\"ltr\" style=\"text-align: center;\"><em>A headless CMS uses API data to display <em>content on a&nbsp;</em>custom frontend.</em></p><h2 dir=\"ltr\" id=\"what-is-react\"><br>What is React?</h2><p dir=\"ltr\"><a href=\"https://reactjs.org/\"><img src=\"https://imgix.cosmicjs.com/8461f020-cea8-11ea-a456-99075f80ffeb-a1e22810-27b0-11e7-b6ae-8108cf4caa96-react.svg\" style=\"float: right; margin-left: 20px;\" class=\"fr-fic fr-dii col-sm-4 col-xs-6\" alt=\"React logo\"></a></p><p dir=\"ltr\"><a href=\"https://reactjs.org/\">React</a> (or <em>ReactJS</em>, <em>React.js</em>) is a <a href=\"https://www.javascriptframework.org\" rel=\"noopener noreferrer\" target=\"_blank\">JavaScript library</a> for building <em>user interfaces</em>. It enables you\r\nto build robustly dynamic single-page web applications &nbsp;by using a component-based architecture, purposed for greater code reusability.</p><p dir=\"ltr\">React can also render on the server-side using <a href=\"https://www.cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a>, or on mobile apps (compilation) using React Native. Originally developed at Facebook, it\r\nis under active development by employees at Facebook and the open source community.</p><h2 dir=\"ltr\" id=\"what-is-a-cms\"><br>What is a CMS?</h2><p dir=\"ltr\">React only provides the &ldquo;front-end&rdquo; user interface (UI), handling the visual presentation of an application&rsquo;s content. React applications must be complemented with a compatible &ldquo;back-end&rdquo; database to store and retrieve content;\r\nfurther, that data source needs a way to be managed. This data storage and management demands the need for a content management system (CMS).</p><h2 dir=\"ltr\" id=\"what-is-a-react-cms\"><br>What is a React CMS?</h2><p dir=\"ltr\">To provide content to a React CMS application, data for the React application is served either:&nbsp;</p><ul><li dir=\"ltr\"><p dir=\"ltr\">Client-side (from the browser or app) on-demand</p></li><li dir=\"ltr\"><p dir=\"ltr\">Server-side on-demand</p></li><li dir=\"ltr\"><p dir=\"ltr\">At compilation (build) time</p></li></ul><p dir=\"ltr\"><img src=\"https://imgix.cosmicjs.com/79debb80-d29d-11ea-a151-53cec96789fd-react-cms.png?auto=format&w=1800\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" alt=\"Cosmic Dashboard\">A React CMS is created when a React UI is integrated with a CMS to handle content. To communicate with React, a CMS must offer a compatible application programming interface (API). For example, using an <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">NPM module</a>.</p><p>A <a href=\"https://www.cosmicjs.com/headless-cms\">headless CMS</a> can be used as a flexible data source for your React application to supply content to any or all of: client-side, server-side, or during compilation. Compilation refers to the build process commonly known as static website approach, which deploys pre-rendered web pages to a <a href=\"https://www.staticwebsitehosting.org/\" rel=\"noopener noreferrer\" target=\"_blank\">static website hosting</a> provider. Common JavaScript framework choices for a static website generator using React include: <a href=\"https://nextjs.org/\" rel=\"noopener noreferrer\" target=\"_blank\">Next.js</a>, <a href=\"https://www.gatsbyjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby</a>, and <a href=\"https://astro.build/\" rel=\"noopener noreferrer\" target=\"_blank\">Astro</a>.</p><h2 dir=\"ltr\" id=\"why-use-a-headless-cms-as-a-react-cms\"><br>Why use a headless CMS as a React CMS?</h2><p><img class=\"fr-dib\" src=\"https://imgix.cosmicjs.com/53699040-3b6b-11ed-9430-1b1fbcde41ce-1663956765938.jpg?auto=format&w=1200\" style=\"width: 100%;\" alt=\"Headless CMS\"></p><p dir=\"ltr\" style=\"text-align: center;\"><em>Using an API, a headless CMS can deliver content to any number of frontends.&nbsp;</em></p><p dir=\"ltr\">Using a headless CMS for your React application eliminates cumbersome layers of technological setup and maintenance from your React CMS that are necessary for coupled and decoupled CMS systems, e.g. : WordPress, Drupal, Joomla, Shopify, Magento, etc.\r\nHeadless CMS data is accessible and extensible, providing future-proofed delivery via API to any destination. This circumvents investing in CMS infrastructure maintenance, allowing development focus to be on presentation and application business logic.</p><h3 dir=\"ltr\"><br>React headless CMS content components<br><img src=\"https://cdn.cosmicjs.com/6174d730-898e-11ea-9edc-335682595c41-cubes.svg\" style=\"margin-left: 20px; float: right;\" class=\"fr-fic fr-dib col-sm-4 col-xs-6\" alt=\"React Components\"></h3><p dir=\"ltr\">A headless CMS like Cosmic natively facilitates React&rsquo;s component-based JavaScript architecture. React components integrate with Cosmic&rsquo;s content model, supporting <a href=\"https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/JSON\" rel=\"noopener noreferrer\" target=\"_blank\">JSON</a> data <em>O</em><em>bjects</em>, <em>Metafields</em>, and <em>Object Relationships</em>, facilitating creation of reusable React CMS components. This native JavaScript component synchronicity with React\r\nmakes Cosmic headless CMS ideal to facilitate any React application&rsquo;s content needs.</p><h3 dir=\"ltr\"><br>React CMS Data Compatibility and Accessibility</h3><p dir=\"ltr\">Using available API tools like our REST, GraphQL, or Cosmic NPM module empower developers to create powerful user experiences using Cosmic as the React CMS.</p><h2 dir=\"ltr\" id=\"what-to-consider-when-choosing-a-headless-cms-for-react\"><br>What to consider when choosing a React headless CMS</h2><p dir=\"ltr\">When choosing a headless CMS for React, one must take into consideration the headless CMS&rsquo;s adequacy to serve as a React CMS:&nbsp;<img src=\"https://cdn.cosmicjs.com/ea9cb9b0-266a-11ea-8b5d-696cb9db9c9a-076-checking.svg\" style=\"float: right; margin: 0px 0px 30px 30px;\" class=\"fr-fic fr-dib col-sm-4 col-xs-6\" alt=\"Intuitive dashboard\"></p><ul><li dir=\"ltr\">Ease-of-use</li><li dir=\"ltr\">Availability</li><li dir=\"ltr\">Performance</li><li dir=\"ltr\">Security</li><li dir=\"ltr\">Features</li><li dir=\"ltr\">Customizability</li><li dir=\"ltr\">Future-proofing</li><li dir=\"ltr\">Guides</li></ul><h3 dir=\"ltr\"><br>React CMS&rsquo;s ease-of-use</h3><p dir=\"ltr\">When choosing any content management system as your React CMS, it&rsquo;s essential to consider the experience for both the developer and the content creator. The goal of a CMS is to deliver an easy-to-use dashboard for content creators, while giving\r\nthe developers comprehensive integration tools. A headless CMS, by definition, is only focused on these two experiences, and not on the presentation layer.</p><p dir=\"ltr\">The Cosmic content management dashboard and APIs have simplified convoluted and repetitious procedures, and circumvented common issues. For this, it is being described among developers and content creators as &ldquo;it doesn&rsquo;t get much easier&rdquo;.\r\nPowerful API design and tooling is available for developers, complemented by a coherent management dashboard for content creators.</p><h3 dir=\"ltr\"><br>Availability of React CMS Server</h3><p dir=\"ltr\">The most important factor of any reliable network-based React CMS application is its availability, or uptime. Without a reliable headless CMS foundation, access to the React CMS application will be impossible, inconsistent, or otherwise unstable.</p><h3 dir=\"ltr\"><br>Performance and speed of React headless CMS</h3><p dir=\"ltr\">Cosmic headless CMS serves content within the <a href=\"https://web.dev/time-to-first-byte/\" rel=\"noopener noreferrer\" target=\"_blank\">best performance recommendations</a> of under 600 milliseconds as advocated by Google. Compliance with this best performance recommendation provides React CMS end-users the optimal user experience (UX), improving search engine optimization (SEO) and user retention.</p><p dir=\"ltr\"><img src=\"https://imgix.cosmicjs.com/451d4a20-d29c-11ea-a151-53cec96789fd-cosmic-cdn.png?auto=format&w=1800\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" alt=\"Global CDN\">Cosmic headless CMS integration with React creates a React CMS that stores and delivers\r\ncontent within milliseconds powered by our global CDNs. This time is assured by reliance upon Cosmic&rsquo;s global network of best-in-class headless CMS servers that consistently ensure minimal latency (response time) as your React CMS.</p><h3 dir=\"ltr\"><br>Security for React CMS</h3><p dir=\"ltr\"><img style=\"float: right; margin: 20px 0px 20px 20px;\" src=\"https://cdn.cosmicjs.com/007eb320-ba43-11ea-8d51-0d6756424d63-enterprise-security.svg\" class=\"fr-fic fr-dib col-sm-4 col-xs-6\" alt=\"Security out-of-the-box\">Headless CMS data is securely delivered\r\nby the Cosmic APIs within industry standard 256-bit SSL encryption in transit and in storage in our global data centers. Additional security via two-factor authentication is also available for free. This industry standard level of security comes included\r\nwith all Cosmic accounts.&nbsp;</p><p dir=\"ltr\">In contrast, when using a coupled CMS system, you are responsible for providing these security features with none of the above security features included.</p><h3 dir=\"ltr\"><br>React CMS feature sets</h3><p dir=\"ltr\">To maximize React CMS workflow efficiency, Cosmic offers Webhooks, Localization, Revision History, Automatic Backups, and other headless CMS features.&nbsp;</p><ul><li dir=\"ltr\"><p dir=\"ltr\"><strong>Webhooks</strong> enable you to automate workflows and communicate with third-party apps. Webhooks automatically send data to the URL of your choice whenever content is edited in your Cosmic Bucket.</p></li><li dir=\"ltr\"><p dir=\"ltr\"><strong>Localization</strong> enables you to publish multiple versions of your content in different languages. Select from over 400 different locales to serve your content to the world. Retrieving localized content from your Bucket is as easy as adding a locale parameter to your API request.</p></li><li dir=\"ltr\"><p dir=\"ltr\"><strong>Automatic backups</strong> are available to give you peace-of-mind to backup your entire Bucket every single day.</p></li><li dir=\"ltr\"><p dir=\"ltr\"><strong>Revisions history</strong> enables you to view and revert your content to prior versions.</p></li></ul><h3 dir=\"ltr\"><br>Customizability of React CMS</h3><p dir=\"ltr\">Cosmic&#39;s extensions facilitate specific headless React CMS needs with minimal effort. Expedite your React CMS experience with powerful pre-built headless CMS extensions that provide a range of time-saving augmentations.</p><p dir=\"ltr\"><img src=\"https://cdn.cosmicjs.com/729321f0-266c-11ea-bfe9-a5169491e682-038-Jigsaw.svg\" style=\"float: left; margin: 20px 30px 30px 0;\" class=\"fr-fic fr-dib col-sm-4 col-xs-6\" alt=\"React puzzle pieces\">For example, using the <a href=\"https://www.cosmicjs.com/extensions/algolia-search\">Algolia Search Extension</a>along with Cosmic as your Headless React CMS, you can integrate powerful content search capabilities into your app. <em>JavaScript (JS) photography galleries&nbsp;</em>can be populated with the <a href=\"https://www.cosmicjs.com/extensions/unsplash-photos\">Unsplash Photos Extension</a>, providing high-quality stock photography. Using the <a href=\"https://www.cosmicjs.com/extensions/onesignal\">OneSignal Extension</a> you can provide for automatic customer push notifications on newly published content. Along with pre-built Extensions, development teams have full control over building their own Extensions using React, or any other front-end technologies, to create powerful Headless CMS workflow capabilities.</p><h3 dir=\"ltr\"><br>Future-proof, extensible React CMS</h3><p dir=\"ltr\">The Cosmic APIs enable React CMS content to be delivered to any device using any programming language. This future-proofs content against any changes to technology or delivery location, ensuring ongoing support to preserve functionality with legacy code\r\n(backward compatibility).</p><h3 dir=\"ltr\"><br>React CMS interface: robust APIs</h3><p dir=\"ltr\">Cosmic accounts come with both REST and GraphQL APIs to deliver React CMS content. You can choose to connect directly to the API, or use a number of available clients for <em>Node.js</em>, <em>PHP</em>, <em>Python</em>, etc.</p><p dir=\"ltr\">It&rsquo;s our goal to get React CMS instances consistently available and high performing using our API. Our team is very active in providing your team the best tools to satisfy your goals.</p><h3 dir=\"ltr\"><br>Guidance of React CMS implementation</h3><p dir=\"ltr\">Complete, up-to-date React CMS guides and documentation are essential to being a developer-first solution. As developers ourselves, we continually focus on maintaining Cosmic headless CMS documentation to remain complete, accurate, and understandable.</p><h3 dir=\"ltr\"><br>Customer support for React CMS</h3><p dir=\"ltr\"><img src=\"https://cdn.cosmicjs.com/85e0cf30-d29e-11ea-a151-53cec96789fd-038-writing.svg\" style=\"float: right; margin: 20px 0 20px 20px;\" class=\"fr-fic fr-dib col-sm-4 col-xs-6\" alt=\"Cosmic support chat\">Cosmic prides itself on maintaining a synergistic\r\nteam of information technology (IT) professionals outputting greater than an ordinary IT support team of its size. We at Cosmic are always improving our core headless CMS product and suite of complementary React CMS services and resources to ensure we\r\nare at the forefront of competitive offerings in the headless React CMS industry.</p><p dir=\"ltr\">Customer support from Cosmic is responsive to your headless CMS needs. We consistently provide product improvements by request for our users. Your team can consider us your outsourced content management team.</p><p dir=\"ltr\">Cosmic headless CMS offers various support channels to communicate with customers:</p><ul><li><p dir=\"ltr\"><a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Slack channel support</a></p></li><li><p dir=\"ltr\"><a href=\"https://www.cosmicjs.com/contact\" rel=\"noopener noreferrer\" target=\"_blank\">Email support</a></p></li><li><p dir=\"ltr\"><a class=\"show-intercom-chat\" href=\"#\">Chat support</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#\"></a><a href=\"tel:+1-866-981-8780\" rel=\"noopener noreferrer\" target=\"_blank\">Phone support</a></p></li></ul><h3 dir=\"ltr\"><br>React CMS community support</h3><p dir=\"ltr\">Community support is crucial to our headless CMS culture. Cosmic&rsquo;s intention is to provide headless CMS resources that save time and money using our solution as your React CMS. To support and supplement this, Cosmic regularly publishes educational\r\nresources, open source libraries, example applications/boilerplates, extensions, hosts events, and more. Paid dedicated support is offered in either dedicated or enterprise support plans, each is optional with 24/7 technical assistance.</p><h2 dir=\"ltr\" id=\"how-to-get-started-with-cosmic-as-your-react-headless-cms\"><br>How to get started using Cosmic as your React headless CMS</h2><ol><li dir=\"ltr\"><p dir=\"ltr\">Create your <a href=\"https://app.cosmicjs.com/signup\">free account with Cosmic</a>.</p></li><li><p>Browse and install one of our pre-built <a href=\"https://www.cosmicjs.com/apps?languages=React\">React CMS templates</a>. You can view source code for the examples and also install demo content in your dashboard to learn about how to model content in Cosmic.</p></li><li dir=\"ltr\"><p dir=\"ltr\">Follow the <a href=\"https://docs.cosmicjs.com/guides/react\">React guide in the docs</a> for simple step-by-step instructions to get up and running with a Cosmic-powered React app in minutes. Included below.</p></li><li><p>Read the how-to articles in our <a href=\"https://www.cosmicjs.com/articles?q=React\">community articles for React</a>.<br><br><br><br></p></li></ol>","metafields":[{"children":null,"type":"text","title":"SEO Title (H1)","key":"seo_title","id":"JYnvNQlfic","value":"React CMS"},{"children":null,"type":"text","title":"Subheadline","key":"subheadline","id":"lEyZQr5cJL","value":"Cosmic is a headless CMS that powers content for React websites and apps. Use our API tools to get started with Cosmic as your ideal React CMS."},{"children":null,"type":"textarea","title":"SEO Description","key":"seo_description","id":"GoL4gGN6dx","value":"Cosmic is a headless CMS that powers content for React websites and apps. Use our API tools to get started with Cosmic as your ideal React CMS."}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"pages","created":"2022-09-23T19:41:53.914Z","created_at":"2022-09-23T19:41:53.914Z","modified_at":"2022-09-23T19:49:15.821Z","status":"published","locale":null,"modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/f3f8f6c0-3b77-11ed-931d-ddee6cce2845-react-cms.png","publish_at":null,"unpublish_at":null,"created_by":"5357ef811693be2118000001","published_at":"2022-09-23T19:49:15.821Z","metadata":{"seo_title":"React CMS","subheadline":"Cosmic is a headless CMS that powers content for React websites and apps. Use our API tools to get started with Cosmic as your ideal React CMS.","seo_description":"Cosmic is a headless CMS that powers content for React websites and apps. Use our API tools to get started with Cosmic as your ideal React CMS."}},{"_id":"634dc1311db488000947b3d1","slug":"image-cdn","title":"Image CDN explained in a few minutes","content":"<p>Images on the web are heavy. They make up the <a href=\"https://almanac.httparchive.org/en/2021/page-weight#fig-5\" rel=\"noopener noreferrer\" target=\"_blank\">largest number of requests on a web page</a>. Images that are not optimized by an image CDN on average yield a file size <a href=\"https://www.youtube.com/watch?v=YJGCZCaIZkQ&t=1010s\" rel=\"noopener noreferrer\" target=\"_blank\">40-80%</a> larger than those using an image CDN.</p><p>An image CDN is a content delivery network designed specifically to store images and media files. Decreasing image payload, improving SEO ranking, and decreasing page load times are just a few reasons why you should consider using an image CDN to host\r\nimages for your website or application.</p><p>In this article, we&rsquo;re going to cover the basic features of a content delivery network and further explain how the <a href=\"https://www.cosmicjs.com/knowledge-base/image-api-and-cdn\">Cosmic image API and CDN</a> solves the problem of delivering optimized images to users across the globe.</p><h2 id=\"what-is-a-content-delivery-network\">What is a content delivery network?</h2><p>A content delivery network is a group of globally distributed servers that work together to serve internet content to users. They are spread out geographically so that wherever a user is in the world, they will receive the requested content from the server\r\nclosest to them. This speeds up webpage loading times so that users have an overall better experience within a data-driven website or application.</p><p><img src=\"https://imgix.cosmicjs.com/f9a42850-4bcc-11ed-876e-41842b505a48-Global-CDN.png?w=1200&auto=format\" alt=\"What is a content delivery network?\" class=\"fr-fic fr-dii\" style=\"width: 100%;\"></p><p>Consider you own a stock image platform for content creators. These content creators will visit the platform to look for images to use in their next video or article. Inevitably, content creators from all around the world will be browsing your platform\r\nto gather high-resolution images for their next piece. You want your servers to deliver the images to them as quickly as possible while they browse whether the user is based in San Francisco or Prague. A CDN provides the solution to deliver the images\r\nto both users quickly and efficiently, serving the images from the server which is geographically the closest to them.</p><p>The concept of delivery times revolves around the fact that this content is literally traveling through a wire. Your device is sending an electronic signal through the wire, requesting said content from one of the servers in the CDN, and the CDN is responding\r\nwith the content. The shorter the distance between the router or modem from which your device is connected, the faster that server will respond, which leads to happier long-time users on your platform.</p><h2 id=\"what-is-an-image-cdn\">What is an image CDN?</h2><p>An image CDN is a content delivery network with a set of software features that optimize image files from upload to end-user delivery. An image CDN can cache images, detect the screen size of the device requesting an image, and reduce overall image file\r\nsize to increase user experience and decrease page load times.</p><p>Furthermore, using a powerful image CDN service like <a href=\"https://imgix.com/\" rel=\"noopener noreferrer\" target=\"_blank\">imgix</a> allows you to make edits, crops, and adjustments to your images, turning static images into dynamic, responsive images that help sites and apps load faster. Picking the right image CDN can free up engineering resources and deliver an overall better user experience.</p><h3>Why use an image CDN?</h3><p>Aside from image optimization and user experience, using an image CDN increases website performance and reduces page load times. Faster page load times can lead to lower bounce rates, higher customer retention rates, and overall increased sales. <a href=\"https://www.thinkwithgoogle.com/marketing-strategies/app-and-mobile/mobile-page-speed-data/\" rel=\"noopener noreferrer\" target=\"_blank\">Statistics show</a> that a decrease of only one-tenth of a second increased conversion rates by 8.4% for retail sites and 10.1% for travel sites.</p><p>When it comes to mobile users, which account for more than half of overall web traffic, unoptimized images lead to even lower conversion rates. According to <a href=\"https://www.thinkwithgoogle.com/marketing-strategies/app-and-mobile/mobile-page-speed-new-industry-benchmarks/\" rel=\"noopener noreferrer\" target=\"_blank\">industry benchmarks</a>, the bounce rate of a 1-second to 3-second page load increases by 32%, 1-second to 5-second increases by 90%, 1-second to 6-second increases by 106%, and 1-second to 10-second increases\r\nby 123%.</p><p>Considering that images tend to be the heaviest resource on a web page, using an image CDN will help deliver optimized and responsive images to users on every device, further speeding up page loads. Your page load time will be a make-or-break factor when\r\nit comes to increasing conversion rates and lowering bounce rates. Speed is revenue.</p><h2 id=\"how-does-an-image-cdn-work\">How does an image CDN work?</h2><p><img src=\"https://imgix.cosmicjs.com/04f8b360-4bcd-11ed-876e-41842b505a48-Image-CDN-Pipeline.png?w=1200&auto=format\" alt=\"How does an image CDN work?\" class=\"fr-fic fr-dii\" style=\"width: 100%;\"></p><h3>1. Upload</h3><p>With a turn-key image CDN service, simply uploading a single image file is enough. The service is capable of handling and transforming the static image.</p><h3>2. Store</h3><p>Once uploaded, the file is cached to a globally distributed CDN. When a user first requests a file, an optimized image is created by the image CDN on the fly, and then caches the optimized version, providing faster content delivery to all users.</p><h3>3. Transform</h3><p>A modern image CDN comes with features to process and transform stored images. These include though are not limited to compression, formatting, text overlay, cropping, and blur. Features like these can be appended to the URL of an image:</p><p>Original URL: <a href=\"https://imgix.cosmicjs.com/14f4f800-48c1-11ed-a07b-05c6717a9348-sebastian-unrau-sp-p7uuT0tw-unsplash-1.jpg\"></a><a href=\"https://imgix.cosmicjs.com/14f4f800-48c1-11ed-a07b-05c6717a9348-sebastian-unrau-sp-p7uuT0tw-unsplash-1.jpg\" rel=\"noopener noreferrer\" target=\"_blank\">https://imgix.cosmicjs.com/14f4f800-48c1-11ed-a07b-05c6717a9348-sebastian-unrau-sp-p7uuT0tw-unsplash-1.jpg</a></p><p>Modified URL: <a href=\"https://imgix.cosmicjs.com/14f4f800-48c1-11ed-a07b-05c6717a9348-sebastian-unrau-sp-p7uuT0tw-unsplash-1.jpg?auto=compress,format\" rel=\"noopener noreferrer\" target=\"_blank\">https://imgix.cosmicjs.com/14f4f800-48c1-11ed-a07b-05c6717a9348-sebastian-unrau-sp-p7uuT0tw-unsplash-1.jpg?auto=compress,format</a></p><p>When using the modified URL above to add compression to and format the image, we see a 93.3% reduction in file size.</p><p><img src=\"https://imgix.cosmicjs.com/5c12aff0-4a49-11ed-a07b-05c6717a9348-size-difference.png\" alt=\"The first image is the original with a file size of 3.3MB. The second image has been compressed and formatted, resulting in a file size of 1.2MB.\" class=\"fr-fic fr-dii\"></p><p>The first image is the original with a file size of 3.3MB. The second image has been compressed and formatted, resulting in a file size of 1.2MB.</p><h3>4. Serve</h3><p>An image CDN caches your image in many servers all around the globe. There are often many servers within several regions like Europe, North America, Asia, South America, and Australia. When a request is made for an image, whichever of these servers is\r\nclosest to the user who made the request will then deliver the image, ensuring fast and optimized delivery and a better user experience.</p><h2 id=\"using-cosmic-as-a-free-image-cdn\">Using Cosmic as a free image CDN</h2><h3>Cosmic API and media management dashboard</h3><p>With the Cosmic <a href=\"https://www.cosmicjs.com/headless-cms/media-management\">media management dashboard</a>, you can easily manage and deliver images from the <a href=\"https://www.cosmicjs.com/knowledge-base/image-api-and-cdn\">Cosmic image API and CDN</a>. The media management dashboard comes integrated with Cosmic&rsquo;s <a href=\"https://www.cosmicjs.com/headless-cms\">headless CMS</a> by default, so once you upload images, they are ready to be connected to your Cosmic content.</p><p>Here&rsquo;s a quick guide on using the media management dashboard in Cosmic:</p><p><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video class=\"card-shadow video-popout fr-draggable fr-fvc fr-dvi\" controls=\"\" playsinline=\"\" src=\"https://cdn.cosmicjs.com/e6204600-4e48-11ed-a9ac-87feb59ca04c-Media-Management---Made-with-Clipchamp.mp4\">Your browser does not support HTML5 video.</video></span></p><h3>imgix image optimization</h3><p>Within the Cosmic dashboard, you can easily add some basic imgix parameters to your images like compression, formatting, and width and height adjustments. Once you adjust the settings, just click &lsquo;save&rsquo; and your image will be optimized and\r\nready to be delivered.</p><p><img src=\"https://imgix.cosmicjs.com/ac715ea0-0deb-11ed-b476-13ceb56f12f2-image-settings.gif\" alt=\"imgix optimization\" class=\"fr-fic fr-dii\"></p><h2 id=\"conclusion\">In conclusion</h2><p>Images hold a lot of weight on the web, and an image CDN is a pivotal factor when it comes to improving a website&rsquo;s performance. High-performing websites can lead to higher conversion rates, lower bounce rates, and an overall better user experience.\r\nAlong with these factors, it&rsquo;s important to consider what kind of features fit the requirements of your website or application and choose accordingly.</p><p>If you&rsquo;ve learned a thing or two from this article and would like to test out an image CDN for yourself, you can <a href=\"https://www.cosmicjs.com/\">create a Cosmic account</a> and begin using the media management dashboard for free.</p>","metafields":[{"children":null,"type":"text","title":"SEO Title (H1)","key":"seo_title","id":"0RpLgcTNTL","value":"Image CDN explained in a few minutes"},{"children":null,"type":"text","title":"Subheadline","key":"subheadline","id":"dUJxO7rE2L","value":"Learn the basic features of a content delivery network and the benefits of delivering optimized images to users across the globe."},{"children":null,"type":"textarea","title":"SEO Description","key":"seo_description","id":"dFRagPPX3g","value":"Learn the basic features of a content delivery network and the benefits of delivering optimized images to users across the globe."}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"pages","created":"2022-10-17T20:55:13.894Z","created_at":"2022-10-17T20:55:13.894Z","modified_at":"2022-10-17T20:56:48.687Z","status":"published","locale":null,"modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/345cc220-4e5e-11ed-b9f4-810dc6a26b05-f9a42850-4bcc-11ed-876e-41842b505a48-Global-CDN.png","publish_at":null,"unpublish_at":null,"created_by":"5357ef811693be2118000001","published_at":"2022-10-17T20:56:48.687Z","metadata":{"seo_title":"Image CDN explained in a few minutes","subheadline":"Learn the basic features of a content delivery network and the benefits of delivering optimized images to users across the globe.","seo_description":"Learn the basic features of a content delivery network and the benefits of delivering optimized images to users across the globe."}},{"_id":"5bec57f217b4e44581bcf56e","order":0,"slug":"a-vuetiful-holiday-meetup-cosmic-js-and-vuetify","title":"A Vuetiful Holiday Meetup: Cosmic JS and Vuetify","content":"<p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/90761070-f3ef-11e8-a87b-cfc4e63151c7-cosmic-vuetify-netlify.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p style=\"text-align: center;\">Cosmic JS with Vuetify Holiday Meetup<br>Wednesday, December 12th, 2018<br>6:00PM - 8:00PM<br><a href=\"https://www.meetup.com/Cosmic-JS-Dallas/events/256542818/\" rel=\"noopener noreferrer\" target=\"_blank\"></a></p><h4 style=\"text-align: center;\"><a href=\"https://www.meetup.com/Cosmic-JS-Dallas/events/256542818/\" rel=\"noopener noreferrer\" target=\"_blank\">Register Here</a></h4><p><br></p><h4>What We&#39;ll Cover:</h4><p>✅ Learn what makes Vue + Vuetify + Cosmic JS a powerful modern web stack<br>✅ Get access to the latest product features and news from Cosmic JS and Vuetify<br>✅ How to deploy a Vue + Vuetify + Cosmic JS app to Netlify with one click<br>✅ Q/A</p><p><br></p><p style=\"text-align: center;\">Pizza, drinks and networking will be provided. 🍕🍺🎉</p><p><br></p><h4>About the speakers:</h4><p><strong><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/971f5800-e9e0-11e8-b12e-ebba23490524-Artboard.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></strong><br><a href=\"https://cosmicjs.com/tony\" rel=\"noopener noreferrer\" target=\"_blank\">Tony Spiro</a> is the co-founder and CEO of Cosmic JS . An experienced software engineer building web applications since IE6, Tony started Cosmic JS to solve his own problems in application development. He is thrilled to now help teams around the world use Cosmic JS to build amazing products.<br><br></p><p><a href=\"https://www.linkedin.com/in/john-leider-626183a2/\" rel=\"noopener noreferrer\" target=\"_blank\">John Leider</a> is a Senior Developer that&#39;s been building websites, apps and frameworks for the last decade. He is the Founder and CEO of <a href=\"https://vuetifyjs.com/en/\" rel=\"noopener noreferrer\" target=\"_blank\">Vuetify</a>, the popular reusable semantic component framework for Vue.js. It aims to provide clean, semantic and reusable components.</p><h4><br></h4><h4>Hosts and Partners</h4><p>Special thanks to <a href=\"https://simplemedia.co\" rel=\"noopener noreferrer\" target=\"_blank\">Simple Media</a> for hosting and <a href=\"https://www.svb.com\" rel=\"noopener noreferrer\" target=\"_blank\">Silicon Valley Bank</a> for providing food and refreshments.&nbsp;</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/22aef270-f27b-11e8-9797-e1d23cf8c705-Artboard.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><h4><br></h4><p><br></p><h3 style=\"text-align: center;\"><a href=\"https://www.meetup.com/Cosmic-JS-Dallas/events/256542818/\" rel=\"noopener noreferrer\" target=\"_blank\">Register Here</a></h3><p><br></p>","metafields":[{"value":"90761070-f3ef-11e8-a87b-cfc4e63151c7-cosmic-vuetify-netlify.jpg","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/90761070-f3ef-11e8-a87b-cfc4e63151c7-cosmic-vuetify-netlify.jpg","imgix_url":"https://imgix.cosmicjs.com/90761070-f3ef-11e8-a87b-cfc4e63151c7-cosmic-vuetify-netlify.jpg"},{"value":"Simple Media: 2242 Monitor Street, #110, Dallas TX 75207","key":"location","title":"Location","type":"text","children":null},{"value":"6:00PM - 8:00PM","key":"time","title":"Time","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"events","created_at":"2018-11-14T17:14:26.642Z","created_by":"5716b504e9c686d006000073","created":"2018-11-14T17:14:26.642Z","status":"published","modified_at":"2018-11-29T17:05:03.707Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-11-29T17:05:03.707Z","metadata":{"image":{"url":"https://cdn.cosmicjs.com/90761070-f3ef-11e8-a87b-cfc4e63151c7-cosmic-vuetify-netlify.jpg","imgix_url":"https://imgix.cosmicjs.com/90761070-f3ef-11e8-a87b-cfc4e63151c7-cosmic-vuetify-netlify.jpg"},"location":"Simple Media: 2242 Monitor Street, #110, Dallas TX 75207","time":"6:00PM - 8:00PM"}},{"_id":"57859a5c1621de245c0004cb","order":0,"slug":"carson-gibbons-cmo-co-founder","title":"Carson Gibbons, CMO & Co-Founder","content":"<p style=\"margin-bottom: 0px;\"><a href=\"https://cosmicjs.com/carsongibbons\" rel=\"noopener noreferrer\" target=\"_blank\">Carson Gibbons</a> is a sales, marketing and advertising manager with experience leading digital project production for companies ranging from startups to corporations to large not-for-profits.<br><br>Carson joined Cosmic JS to help teams of developers and content creators collaborate to build modern apps faster together.</p>","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"https://cosmicjs.com/carsongibbons","key":"cosmic","title":"Cosmic","type":"text","children":null},{"value":"https://twitter.com/carsoncgibbons","key":"twitter","title":"Twitter","type":"text","children":null},{"value":"https://www.linkedin.com/in/carsongibbons","key":"linkedin","title":"Linkedin","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"people","created":"2016-07-13T01:33:16.699Z","status":"published","modified":"2016-07-13T16:50:33.731Z","modified_at":"2018-12-19T20:53:20.183Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-12-19T20:53:20.183Z","metadata":{"image":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"cosmic":"https://cosmicjs.com/carsongibbons","twitter":"https://twitter.com/carsoncgibbons","linkedin":"https://www.linkedin.com/in/carsongibbons"}},{"_id":"6005f9135e6bc9000759f9eb","order":0,"slug":"day-to-day","title":"DaytoDay","content":"","metafields":[{"children":null,"type":"file","title":"Logo","key":"logo","id":"w8TdzH5aNl","value":"c7655010-59f4-11eb-9e0f-fd6e504bde0d-daytoday.png","url":"https://cdn.cosmicjs.com/c7655010-59f4-11eb-9e0f-fd6e504bde0d-daytoday.png","imgix_url":"https://imgix.cosmicjs.com/c7655010-59f4-11eb-9e0f-fd6e504bde0d-daytoday.png"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"jyUZd7jQdZ","value":"DaytoDay builds a headless medical application with Cosmic"},{"children":null,"type":"text","title":"Brand Color","key":"brand_color","id":"kNPo3Ngdui","value":"#5c3fd7"},{"children":null,"type":"file","title":"Background Image","key":"background_image","id":"OBSKdpuQBc","value":"4760e9f0-59d2-11eb-a540-1dc0abc1ec4b-designimage.png","url":"https://cdn.cosmicjs.com/4760e9f0-59d2-11eb-a540-1dc0abc1ec4b-designimage.png","imgix_url":"https://imgix.cosmicjs.com/4760e9f0-59d2-11eb-a540-1dc0abc1ec4b-designimage.png"},{"children":null,"type":"text","title":"Industry","key":"industry","id":"hPtlSDChjy","value":"Healthcare"},{"children":null,"type":"text","title":"Product","key":"product","id":"bA6IFC1vYW","value":"Patient Care Application"},{"children":null,"type":"file","title":"Main Image","key":"main_image","id":"labLXRzz0w","value":"6a9b8a10-59f5-11eb-9e0f-fd6e504bde0d-daytoday-screen.png","url":"https://cdn.cosmicjs.com/6a9b8a10-59f5-11eb-9e0f-fd6e504bde0d-daytoday-screen.png","imgix_url":"https://imgix.cosmicjs.com/6a9b8a10-59f5-11eb-9e0f-fd6e504bde0d-daytoday-screen.png"},{"children":[{"children":null,"type":"file","title":"Image","key":"image","id":"00Xf7nv0Jp","value":"c004c610-59f5-11eb-9e0f-fd6e504bde0d-daytoday-laptop.png","url":"https://cdn.cosmicjs.com/c004c610-59f5-11eb-9e0f-fd6e504bde0d-daytoday-laptop.png","imgix_url":"https://imgix.cosmicjs.com/c004c610-59f5-11eb-9e0f-fd6e504bde0d-daytoday-laptop.png"},{"children":null,"type":"html-textarea","title":"Text","key":"text","id":"6geR2ITDlD","value":"<p>If you&#39;ve ever had an outpatient procedure or surgery, you may be familiar with how confusing both prep and follow-up care instructions can be. <a href=\"https://www.daytoday.health/\" rel=\"noopener noreferrer\" target=\"_blank\">DaytoDay Health</a> is on a mission to ensure tailored patient prep instructions, videos, and follow-up follow <em>through.</em> With tailored, comprehensive patient guidance, they believe vital procedures such as cardiac bypass grafts can have the good outcomes far more often.</p><p>Stepping up to guide these patients through an extremely stressful period of life was Blake, a nurse-turned-content-creator. He&#39;d been tasked with generating huge volumes of instructions, videos, and infographics to make up their pre-and-post care instructions library.</p><p><br></p>"},{"children":null,"type":"textarea","title":"Testimonial Home","key":"testimonial_home","id":"XjSipjcoQY","value":""}],"type":"parent","title":"Section 1","key":"section_1","id":"kBxA9ADHpl","value":"<p>If you&#39;ve ever had an outpatient procedure or surgery, you may be familiar with how confusing both prep and follow-up care instructions can be. <a href=\"https://www.daytoday.health/\" rel=\"noopener noreferrer\" target=\"_blank\">DaytoDay Health</a> is on a mission to ensure tailored patient prep instructions, videos, and follow-up follow <em>through.</em> With tailored, comprehensive patient guidance, they believe vital procedures such as cardiac bypass grafts can have the good outcomes far more often.</p><p>Stepping up to guide these patients through an extremely stressful period of life was Blake, a nurse-turned-content-creator. He&#39;d been tasked with generating huge volumes of instructions, videos, and infographics to make up their pre-and-post care instructions library.</p><p><br></p>"},{"children":[{"children":null,"type":"file","title":"Image","key":"image","id":"5XVPxBEudi","value":"35af4d40-59f6-11eb-9e0f-fd6e504bde0d-daytoday-mobile.png","url":"https://cdn.cosmicjs.com/35af4d40-59f6-11eb-9e0f-fd6e504bde0d-daytoday-mobile.png","imgix_url":"https://imgix.cosmicjs.com/35af4d40-59f6-11eb-9e0f-fd6e504bde0d-daytoday-mobile.png"},{"children":null,"type":"html-textarea","title":"Text","key":"text","id":"52r3p9Pg0o","value":"<p>This would be a monumental task. Blake needed his content to be uploaded, tagged by procedure, organized by diet and medication restrictions, filed, and distributed on a per-patient basis; all of this had to be done efficiently. Whew. Their current process - using Google Sheets and a patient portal - was buckling under the workload. Handling administrative duties alone had become an impossible task. After some searching, and evaluating our competition, the DaytoDay team turned to Cosmic&#39;s headless CMS to solve this problem.</p><p>Suddenly, life got a whole lot easier. With <a href=\"https://www.cosmicjs.com/features\">Cosmic&#39;s unique Bucket system</a>, Day-to-Day had found the infrastructure solution to organize their content in a way that was technically-sound and human-usable. Their team&#39;s resources were almost immediately freed up to start scaling and adding additional procedures to their library. As Blake looks to 2021, he plans to expand DaytoDay&#39;s procedures library by nearly double the volume, and possibly bring on additional content team members to help them manage additional content responsibilities they&#39;ve acquired. But hey, growth is a good problem to have, right?</p>"}],"type":"parent","title":"Section 2","key":"section_2","id":"bQ4gnQ2uSR","value":"<p>This would be a monumental task. Blake needed his content to be uploaded, tagged by procedure, organized by diet and medication restrictions, filed, and distributed on a per-patient basis; all of this had to be done efficiently. Whew. Their current process - using Google Sheets and a patient portal - was buckling under the workload. Handling administrative duties alone had become an impossible task. After some searching, and evaluating our competition, the DaytoDay team turned to Cosmic&#39;s headless CMS to solve this problem.</p><p>Suddenly, life got a whole lot easier. With <a href=\"https://www.cosmicjs.com/features\">Cosmic&#39;s unique Bucket system</a>, Day-to-Day had found the infrastructure solution to organize their content in a way that was technically-sound and human-usable. Their team&#39;s resources were almost immediately freed up to start scaling and adding additional procedures to their library. As Blake looks to 2021, he plans to expand DaytoDay&#39;s procedures library by nearly double the volume, and possibly bring on additional content team members to help them manage additional content responsibilities they&#39;ve acquired. But hey, growth is a good problem to have, right?</p>"},{"children":[{"children":null,"type":"file","title":"Image","key":"image","id":"cnNOr9hLXh","value":"c2181580-59d0-11eb-a540-1dc0abc1ec4b-blakemoloneydaytoday.jpg","url":"https://cdn.cosmicjs.com/c2181580-59d0-11eb-a540-1dc0abc1ec4b-blakemoloneydaytoday.jpg","imgix_url":"https://imgix.cosmicjs.com/c2181580-59d0-11eb-a540-1dc0abc1ec4b-blakemoloneydaytoday.jpg"},{"children":null,"type":"text","title":"Author","key":"author","id":"tilDB0HV65","value":"Blake Moloney, Content Creator"},{"children":null,"type":"textarea","title":"Text","key":"text","id":"1nL5IRuDTo","value":"I knew we'd have to shift to a content management system. Contentful was the first thing we looked at, and it wasn't robust enough. [With Cosmic,] all of a sudden, life just got a whole lot easier. We made our patient education glossary into 1 Bucket and set it up to be completely variable for the patient. We could make quality changes, like, we'd written a glossary, and Cosmic let us start hyperlinking terms and definitions to simplify how our content is presented. Cosmic has been really reactive to our needs to help us get this all done."}],"type":"parent","title":"Testimonial Section","key":"testimonial_section","id":"dPpK47tKKc","value":"Blake Moloney, Content Creator"},{"children":null,"type":"switch","title":"Featured on Home","key":"featured_on_home","id":"9kBS13tUAW","value":false,"options":"yes,no"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"customers","created_at":"2021-01-18T21:09:39.431Z","created_by":"5f8088982aa32f00093977bb","modified_at":"2021-01-20T23:22:57.456Z","created":"2021-01-18T21:09:39.431Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/f0872370-59d0-11eb-a540-1dc0abc1ec4b-daytodaylogo.jpg","modified_by":"5f8088982aa32f00093977bb","publish_at":null,"unpublish_at":null,"published_at":"2021-01-20T23:22:57.456Z","metadata":{"logo":{"url":"https://cdn.cosmicjs.com/c7655010-59f4-11eb-9e0f-fd6e504bde0d-daytoday.png","imgix_url":"https://imgix.cosmicjs.com/c7655010-59f4-11eb-9e0f-fd6e504bde0d-daytoday.png"},"seo_description":"DaytoDay builds a headless medical application with Cosmic","brand_color":"#5c3fd7","background_image":{"url":"https://cdn.cosmicjs.com/4760e9f0-59d2-11eb-a540-1dc0abc1ec4b-designimage.png","imgix_url":"https://imgix.cosmicjs.com/4760e9f0-59d2-11eb-a540-1dc0abc1ec4b-designimage.png"},"industry":"Healthcare","product":"Patient Care Application","main_image":{"url":"https://cdn.cosmicjs.com/6a9b8a10-59f5-11eb-9e0f-fd6e504bde0d-daytoday-screen.png","imgix_url":"https://imgix.cosmicjs.com/6a9b8a10-59f5-11eb-9e0f-fd6e504bde0d-daytoday-screen.png"},"section_1":{"image":{"url":"https://cdn.cosmicjs.com/c004c610-59f5-11eb-9e0f-fd6e504bde0d-daytoday-laptop.png","imgix_url":"https://imgix.cosmicjs.com/c004c610-59f5-11eb-9e0f-fd6e504bde0d-daytoday-laptop.png"},"text":"<p>If you&#39;ve ever had an outpatient procedure or surgery, you may be familiar with how confusing both prep and follow-up care instructions can be. <a href=\"https://www.daytoday.health/\" rel=\"noopener noreferrer\" target=\"_blank\">DaytoDay Health</a> is on a mission to ensure tailored patient prep instructions, videos, and follow-up follow <em>through.</em> With tailored, comprehensive patient guidance, they believe vital procedures such as cardiac bypass grafts can have the good outcomes far more often.</p><p>Stepping up to guide these patients through an extremely stressful period of life was Blake, a nurse-turned-content-creator. He&#39;d been tasked with generating huge volumes of instructions, videos, and infographics to make up their pre-and-post care instructions library.</p><p><br></p>","testimonial_home":""},"section_2":{"image":{"url":"https://cdn.cosmicjs.com/35af4d40-59f6-11eb-9e0f-fd6e504bde0d-daytoday-mobile.png","imgix_url":"https://imgix.cosmicjs.com/35af4d40-59f6-11eb-9e0f-fd6e504bde0d-daytoday-mobile.png"},"text":"<p>This would be a monumental task. Blake needed his content to be uploaded, tagged by procedure, organized by diet and medication restrictions, filed, and distributed on a per-patient basis; all of this had to be done efficiently. Whew. Their current process - using Google Sheets and a patient portal - was buckling under the workload. Handling administrative duties alone had become an impossible task. After some searching, and evaluating our competition, the DaytoDay team turned to Cosmic&#39;s headless CMS to solve this problem.</p><p>Suddenly, life got a whole lot easier. With <a href=\"https://www.cosmicjs.com/features\">Cosmic&#39;s unique Bucket system</a>, Day-to-Day had found the infrastructure solution to organize their content in a way that was technically-sound and human-usable. Their team&#39;s resources were almost immediately freed up to start scaling and adding additional procedures to their library. As Blake looks to 2021, he plans to expand DaytoDay&#39;s procedures library by nearly double the volume, and possibly bring on additional content team members to help them manage additional content responsibilities they&#39;ve acquired. But hey, growth is a good problem to have, right?</p>"},"testimonial_section":{"image":{"url":"https://cdn.cosmicjs.com/c2181580-59d0-11eb-a540-1dc0abc1ec4b-blakemoloneydaytoday.jpg","imgix_url":"https://imgix.cosmicjs.com/c2181580-59d0-11eb-a540-1dc0abc1ec4b-blakemoloneydaytoday.jpg"},"author":"Blake Moloney, Content Creator","text":"I knew we'd have to shift to a content management system. Contentful was the first thing we looked at, and it wasn't robust enough. [With Cosmic,] all of a sudden, life just got a whole lot easier. We made our patient education glossary into 1 Bucket and set it up to be completely variable for the patient. We could make quality changes, like, we'd written a glossary, and Cosmic let us start hyperlinking terms and definitions to simplify how our content is presented. Cosmic has been really reactive to our needs to help us get this all done."},"featured_on_home":false}},{"_id":"5b730f6e4a28a757c9088a52","order":0,"slug":"hypometer-technologies","title":" Hypometer Technologies","content":"","metafields":[{"value":"599b13f0-9fe6-11e8-9cd3-a30de3fdcc73-hypometer-logo.jpg","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/599b13f0-9fe6-11e8-9cd3-a30de3fdcc73-hypometer-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/599b13f0-9fe6-11e8-9cd3-a30de3fdcc73-hypometer-logo.jpg"},{"value":"\nHypometer Technologies is revolutionizing the Australian sporting experience by making predictive analytics accessible to the masses. They're using Cosmic JS to empower their team with modern tools.","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"https://cosmicjs.com/case-studies/hypometer-technologies-fantasy-insider-and-stats-insider","key":"link","title":"Link","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"home-page-case-studies","created_at":"2018-08-14T17:20:46.304Z","created_by":"5357ef811693be2118000001","created":"2018-08-14T17:20:46.304Z","status":"published","published_at":"2018-08-14T17:20:46.304Z","metadata":{"image":{"url":"https://cdn.cosmicjs.com/599b13f0-9fe6-11e8-9cd3-a30de3fdcc73-hypometer-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/599b13f0-9fe6-11e8-9cd3-a30de3fdcc73-hypometer-logo.jpg"},"teaser":"\nHypometer Technologies is revolutionizing the Australian sporting experience by making predictive analytics accessible to the masses. They're using Cosmic JS to empower their team with modern tools.","link":"https://cosmicjs.com/case-studies/hypometer-technologies-fantasy-insider-and-stats-insider"}},{"_id":"5f7687813985300007a7c9cc","order":0,"slug":"john-leider","title":"John Leider","content":"","metafields":[{"children":null,"type":"textarea","title":"Testimonial","key":"testimonial","id":"zPRcS1tZuR","value":"It was literally 10 to 15 minutes from taking the SDK, to getting the data I needed, to consuming it. We cut our server response time down from 300-400 ms to about 50 ms. Instead of needing to query the Shopify API, now we only need to query Cosmic."},{"children":null,"type":"text","title":"Author Name","key":"author_name","id":"ZfAyf3UCa0","value":"John Leider"},{"children":null,"type":"text","title":"Business","key":"business","id":"hSd9eALSkG","value":"Vuetify"},{"children":null,"type":"file","title":"Author Image","key":"author_image","id":"HwLwf7SNgV","value":"36949a70-0452-11eb-9e80-ddb9514d6310-vuetify.jpg","url":"https://cdn.cosmicjs.com/36949a70-0452-11eb-9e80-ddb9514d6310-vuetify.jpg","imgix_url":"https://imgix.cosmicjs.com/36949a70-0452-11eb-9e80-ddb9514d6310-vuetify.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"testimonials","created_at":"2020-10-02T01:50:57.976Z","created_by":"5357ef811693be2118000001","modified_at":"2020-11-05T20:30:41.491Z","created":"2020-10-02T01:50:57.976Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/36949a70-0452-11eb-9e80-ddb9514d6310-vuetify.jpg","published_at":"2020-11-05T20:30:41.491Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"testimonial":"It was literally 10 to 15 minutes from taking the SDK, to getting the data I needed, to consuming it. We cut our server response time down from 300-400 ms to about 50 ms. Instead of needing to query the Shopify API, now we only need to query Cosmic.","author_name":"John Leider","business":"Vuetify","author_image":{"url":"https://cdn.cosmicjs.com/36949a70-0452-11eb-9e80-ddb9514d6310-vuetify.jpg","imgix_url":"https://imgix.cosmicjs.com/36949a70-0452-11eb-9e80-ddb9514d6310-vuetify.jpg"}}},{"_id":"5ffa1d1e0046b0000799cb7b","order":0,"slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}}},{"_id":"5a73506aa3bb966384a695fd","order":1,"slug":"unleashed","title":"Unleashed","content":"","metafields":[{"value":"88b2e180-0776-11e8-8f05-6d4eca9fceae-unleashed-xr-logo.jpg","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/88b2e180-0776-11e8-8f05-6d4eca9fceae-unleashed-xr-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/88b2e180-0776-11e8-8f05-6d4eca9fceae-unleashed-xr-logo.jpg"},{"value":"\nUnleashed XR builds immersive technology solutions for a range of clients across industries. They choose Cosmic JS to allow developers and editors to collaborate to complete digital projects faster.","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"https://cosmicjs.com/case-studies/unleashed-xr-augmented-mixed-and-virtual-realities","key":"link","title":"Link","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"home-page-case-studies","created_at":"2018-02-01T17:37:46.680Z","created_by":"5357ef811693be2118000001","created":"2018-02-01T17:37:46.680Z","status":"published","metadata":{"image":{"url":"https://cdn.cosmicjs.com/88b2e180-0776-11e8-8f05-6d4eca9fceae-unleashed-xr-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/88b2e180-0776-11e8-8f05-6d4eca9fceae-unleashed-xr-logo.jpg"},"teaser":"\nUnleashed XR builds immersive technology solutions for a range of clients across industries. They choose Cosmic JS to allow developers and editors to collaborate to complete digital projects faster.","link":"https://cosmicjs.com/case-studies/unleashed-xr-augmented-mixed-and-virtual-realities"}},{"_id":"5bc6434de8c5124b30c50847","order":1,"slug":"webinar-localization-with-cosmic-js-and-gatsby","title":"Webinar: Localization with Cosmic JS and Gatsby ","content":"<p><a href=\"https://cosmicforms.typeform.com/to/p7X2Dl\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/ae18ac80-d2e0-11e8-b990-cbf71a345936-7685e0b0-8f49-11e8-ac9b-a568525636cf-gatsby-cosmic.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></a></p><p>We&#39;ve partnered with <a href=\"https://www.gatsbyjs.org\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby</a> for a Spooktacular-Halloween installment of Webinar Wednesday. Cosmic co-founder Tony Spiro is teaming up with Gatsby Developer Advocate Jason Lengstorf to demonstrate how you can build powerful web apps using Gatsby and Cosmic JS.</p><p><a href=\"https://cosmicforms.typeform.com/to/p7X2Dl\" rel=\"noopener noreferrer\" target=\"_blank\">Register here &raquo;</a><br><br><strong>What you&#39;ll learn:<br>✅&nbsp;</strong>How to create localized content models in Cosmic JS<br><strong>✅&nbsp;</strong>How to install the Cosmic JS Gatsby Localization Starter<br><strong>✅&nbsp;</strong>How Gatsby gives you incredible web performance out of the box</p><p><br></p><p><strong>About the presenters:</strong></p><p><a href=\"https://cosmicforms.typeform.com/to/p7X2Dl\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/a6be0200-d2f9-11e8-8448-61460e576932-cosmicjs-gatsby-webinar.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></a></p><p><br><a href=\"https://cosmicjs.com/tony\" rel=\"noopener noreferrer\" target=\"_blank\">Tony Spiro</a> is a software engineer with over a decade of experience leading digital teams from startups to Fortune 500 companies. Tony started Cosmic JS as a side project to solve his own problems with application development. &nbsp;He is thrilled to now help thousands of users around the world use Cosmic JS to build amazing products.<br><br></p><p><a href=\"https://twitter.com/jlengstorf\" rel=\"noopener noreferrer\" target=\"_blank\">Jason Lengstorf</a> is a developer advocate, senior engineer, and occasional designer at <a href=\"https://gatsbyjs.org/\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby</a>. He&rsquo;s an advocate for building highly productive teams through better communication, well designed systems and processes, and healthy work-life balance, and <a href=\"https://lengstorf.com/blog/\" rel=\"noopener noreferrer\" target=\"_blank\">he blogs about that sometimes</a>. He lives in Portland, Oregon.</p><p><br></p><p><strong>Register here:</strong></p><div class=\"fr-embedly     \" data-original-embed=\"<a href='https://cosmicforms.typeform.com/to/p7X2Dl' class='embedly-card'></a>\"><a href=\"https://cosmicforms.typeform.com/to/p7X2Dl\" class=\"embedly-card\"></a></div><p><br></p>","metafields":[{"value":"09083f20-d17e-11e8-b499-a91ad6b31720-gatsby-cosmic.jpeg","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/09083f20-d17e-11e8-b499-a91ad6b31720-gatsby-cosmic.jpeg","imgix_url":"https://imgix.cosmicjs.com/09083f20-d17e-11e8-b499-a91ad6b31720-gatsby-cosmic.jpeg"},{"value":"Online","key":"location","title":"Location","type":"text","children":null},{"value":"Wednesday October 31, 12PM US ET","key":"time","title":"Time","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"events","created_at":"2018-10-16T20:00:13.198Z","created_by":"5357ef811693be2118000001","created":"2018-10-16T20:00:13.198Z","status":"published","published_at":"2018-10-23T16:17:43.590Z","modified_at":"2018-10-23T16:17:43.590Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/09083f20-d17e-11e8-b499-a91ad6b31720-gatsby-cosmic.jpeg","imgix_url":"https://imgix.cosmicjs.com/09083f20-d17e-11e8-b499-a91ad6b31720-gatsby-cosmic.jpeg"},"location":"Online","time":"Wednesday October 31, 12PM US ET"}},{"_id":"58fbe28d5161d90369000002","order":1,"slug":"react-cms","title":"React CMS","content":"","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"86uwNw2H41","value":"9c2d95d0-27b0-11e7-b6ae-8108cf4caa96-react.svg","url":"https://cdn.cosmicjs.com/9c2d95d0-27b0-11e7-b6ae-8108cf4caa96-react.svg","imgix_url":"https://imgix.cosmicjs.com/9c2d95d0-27b0-11e7-b6ae-8108cf4caa96-react.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"cIUiUoed6e","value":"a1e22810-27b0-11e7-b6ae-8108cf4caa96-react.svg","url":"https://cdn.cosmicjs.com/a1e22810-27b0-11e7-b6ae-8108cf4caa96-react.svg","imgix_url":"https://imgix.cosmicjs.com/a1e22810-27b0-11e7-b6ae-8108cf4caa96-react.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"yzHCk8x1Oe","value":"<p>Cosmic is the best CMS for React websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"A5jf7eYowl","value":"React"},{"children":null,"type":"text","title":"Sub Headline","key":"sub_headline","id":"7VMwbgEBKs","value":"Cosmic and React are a perfect combination."},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"rt8tibFUc1","value":"Cosmic is the leading headless CMS for React applications. Our flexible infrastructure, outstanding support, and faster service means better apps."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"aqe6PgLk9C","value":"7a43eca0-eee7-11eb-849a-8548c9a99fc0-Cosmic-React-CMS.png","url":"https://cdn.cosmicjs.com/7a43eca0-eee7-11eb-849a-8548c9a99fc0-Cosmic-React-CMS.png","imgix_url":"https://imgix.cosmicjs.com/7a43eca0-eee7-11eb-849a-8548c9a99fc0-Cosmic-React-CMS.png"},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"I8FhBacRUv","value":"The #1 React CMS - Build Better React Apps with Cosmic"},{"children":null,"type":"text","title":"H1","key":"h1","id":"MEpGcqXZtj","value":"Bring Your Favorite React Frontend"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"kww1erhZo7","value":""},{"children":[{"type":"repeating_item","children":[{"title":"Title","key":"title","value":"Getting Started with Cosmic CMS and Next.js (Part 1)","type":"text","required":false},{"title":"Link","key":"link","value":"https://www.youtube.com/embed/NZA1dF2IDqQ?showinfo=0&wmode=opaque","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Title","key":"title","value":"Using Cosmic as a Headless CMS with Gatsby","type":"text","required":false},{"title":"Link","key":"link","value":"https://www.youtube.com/embed/Qls5frYlJeI?showinfo=0&wmode=opaque&widget_referrer=https%3A%2F%2Fwww.cosmicjs.com%2Fknowledge-base%2Freact-cms&enablejsapi=1&origin=https%3A%2F%2Fcdn.embedly.com&widgetid=1","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Title","key":"title","value":"Build a Cosmic-powered blog using Gatsby","type":"text","required":false},{"title":"Link","key":"link","value":"https://www.youtube.com/embed/mGcAWs1xRnY?showinfo=0&wmode=opaque&widget_referrer=https%3A%2F%2Fwww.cosmicjs.com%2Fknowledge-base%2Freact-cms&enablejsapi=1&origin=https%3A%2F%2Fcdn.embedly.com&widgetid=1","type":"text","required":false}]}],"type":"repeater","title":"Videos","key":"videos","id":"WRQcUlhzbs","value":"Getting Started with Cosmic CMS and Next.js (Part 1)","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]},{"children":null,"type":"text","title":"Page Overview Title","key":"page_overview_title","id":"pI0jsahlWN","value":"Why use a Headless CMS as React’s CMS?"},{"children":null,"type":"html-textarea","title":"Page Overview","key":"page_overview","id":"ILHwoz5qEK","value":"<p>Using a headless CMS for your React application eliminates cumbersome layers of technological setup and maintenance from your React CMS that are necessary for coupled and decoupled CMS systems (e.g. WordPress, Drupal, Joomla, Shopify, Magento, etc.) Headless CMS data is accessible and extensible, providing future-proofed delivery via API to any destination. This circumvents investing in CMS infrastructure maintenance, allowing development focus to be on presentation and application business logic.</p>"},{"children":null,"type":"text","title":"Feature Section Left Video","key":"feature_section_left_video","id":"aDl1BVqy7N","value":"https://cdn.cosmicjs.com/75147100-13be-11eb-af66-95e0cc16a663-a2cf8510-fe71-11ea-a525-3597bcdfdc76-Merge-Objects.mp4"},{"children":null,"type":"html-textarea","title":"Feature Section Right","key":"feature_section_right","id":"NNQWAU7M2u","value":"<h3><span data-reactroot=\"\" data-token-index=\"0\">T</span><span data-reactroot=\"\" data-token-index=\"1\">op-Tier React CMS Features</span></h3><p>Cosmic offers <strong>world-class API speed</strong>, <strong>industry-leading uptime reports</strong>, and a verbose feature set built for React - including:</p><ul><li>Component composition with Objects</li><li>Media / file management</li><li>Easy access to documentation and code samples</li><li>Extensive NPM module</li><li>and more</li></ul>"},{"children":null,"type":"text","title":"Apps Search Term","key":"apps_search_term","id":"DpxVUj18Bd","value":""},{"children":null,"type":"text","title":"Articles Search Term","key":"articles_search_term","id":"4NhvPeO9g9","value":""},{"children":[{"type":"repeating_item","children":[{"title":"App Slug","key":"app_slug","value":"simple-react-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"App Slug","key":"app_slug","value":"nextjs-static-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"App Slug","key":"app_slug","value":"react-cosmedium-blog","type":"text","required":false}]}],"type":"repeater","title":"Apps","key":"apps","id":"crDYypbyJo","value":"simple-react-blog","repeater_fields":[{"title":"App Slug","key":"app_slug","value":"","type":"text","required":false}]},{"children":[{"type":"repeating_item","children":[{"title":"Article Slug","key":"article_slug","value":"how-to-build-a-react-portfolio-website-powered-by-cosmic-js","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Article Slug","key":"article_slug","value":"how-to-build-a-location-based-twitter-search-app-with-react-and-cosmic-js","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Article Slug","key":"article_slug","value":"build-a-react-shuffle-blog-using-the-spotify-api","type":"text","required":false}]}],"type":"repeater","title":"Articles","key":"articles","id":"3VTsWe6HjF","value":"how-to-build-a-react-portfolio-website-powered-by-cosmic-js","repeater_fields":[{"title":"Article Slug","key":"article_slug","value":"","type":"text","required":false}]},{"children":[{"type":"repeating_item","children":[{"title":"Question","key":"question","value":"What is React?","type":"text","required":false},{"title":"Answer","key":"answer","value":"<p><a href=\"https://reactjs.org/\">React</a> (or <em>ReactJS</em>, <em>React.js</em>) is a <a href=\"https://www.javascriptframework.org/\">JavaScript library</a> for building <em>user interfaces</em>. It enables you to build robustly dynamic single-page web applications by using a component-based architecture, purposed for greater code reusability.</p><p>React can also render on the server-side using <a href=\"https://www.cosmicjs.com/knowledge-base/nodejs-cms\">Node.js</a>, or on mobile apps (compilation) using React Native. Originally developed at Facebook, it is under active development by employees at Facebook and the open source community.</p>","type":"html-textarea","required":false}]},{"type":"repeating_item","children":[{"title":"Question","key":"question","value":"What is a CMS?","type":"text","required":false},{"title":"Answer","key":"answer","value":"<p>React only provides the “front-end” user interface (UI), handling the visual presentation of an application’s content. React applications must be complemented with a compatible “back-end” database to store and retrieve content; further, that data source needs a way to be managed. This data storage and management demands the need for a content management system (CMS).</p>","type":"html-textarea","required":false}]},{"type":"repeating_item","children":[{"title":"Question","key":"question","value":"What is a React CMS?","type":"text","required":false},{"title":"Answer","key":"answer","value":"<p>To provide content to a React CMS application, data for the React application is servable:</p><ul><li>Client-side (from the browser or app) on-demand</li><li>Server-side on-demand</li><li>At compilation (build) time</li></ul><p>A React CMS is created when a React UI is integrated with a CMS to handle content. To communicate with React, a CMS must offer a compatible application programming interface (API). For example:</p><ul><li><a href=\"https://docs.cosmicjs.com/api-reference/getting-started/available-methods#graphql\">GraphQL API</a></li><li><a href=\"https://docs.cosmicjs.com/api-reference/getting-started/available-methods#rest-api\">REST API</a></li><li><a href=\"https://www.npmjs.com/package/cosmicjs\">NPM module</a></li></ul><p>A <a href=\"https://www.cosmicjs.com/headless-cms\">headless CMS</a> can be used as a flexible data source for your React application to supply content to any or all of: client-side, server-side, or during compilation. Compilation refers to the build process commonly known as <a href=\"https://jamstack.org/\">Jamstack</a> approach, which deploys pre-rendered web pages to a <a href=\"https://www.staticwebsitehosting.org/\">static website hosting</a> provider.</p><h3>React CMS Data Compatibility and Accessibility</h3><p>Using available API tools like our REST, GraphQL, or Cosmic NPM module empower developers to create powerful user experiences using Cosmic as the React CMS.</p>","type":"html-textarea","required":false}]},{"type":"repeating_item","children":[{"title":"Question","key":"question","value":"Is it \"React\" or \"React.js\"? What happened to the JS?","type":"text","required":false},{"title":"Answer","key":"answer","value":"<p>React, formerly and often still incorrectly referred to as React.js, is one of the most popular JavaScript frameworks. React is only the new brand name for what was formerly known as React.js. In 2017, Facebook dropped the \".js\" from React's name.</p>","type":"html-textarea","required":false}]},{"type":"repeating_item","children":[{"title":"Question","key":"question","value":"How are Cosmic's content components \"Built\" for React?","type":"text","required":false},{"title":"Answer","key":"answer","value":"<p>A headless CMS like Cosmic natively facilitates React’s component-based JavaScript architecture. React components integrate with Cosmic’s content model, supporting JSON data Objects, Metafields, and Object Relationships, facilitating creation of reusable React CMS components. This native JavaScript component synchronicity with React makes Cosmic headless CMS ideal to facilitate any React application’s content needs.</p>","type":"html-textarea","required":false}]},{"type":"repeating_item","children":[{"title":"Question","key":"question","value":"Do you offer security features for my React CMS?","type":"text","required":false},{"title":"Answer","key":"answer","value":"<p>Headless CMS data is securely delivered by the Cosmic APIs within industry standard 256-bit SSL encryption in transit and in storage in our global data centers. Additional security via two-factor authentication is also available for free. This industry standard level of security comes included with all Cosmic accounts.</p><p>In contrast, when using a coupled CMS system, you are responsible for providing these security features with none of the above security features included.</p>","type":"html-textarea","required":false}]},{"type":"repeating_item","children":[{"title":"Question","key":"question","value":"Support for your React CMS and React developers","type":"text","required":false},{"title":"Answer","key":"answer","value":"<p>Community support is crucial to our headless CMS culture. Cosmic’s intention is to provide headless CMS resources that save time and money using our solution as your React CMS. To support and supplement this, Cosmic regularly publishes educational resources, open source libraries, example applications/boilerplates, extensions, hosts events, and more.</p><p>Paid dedicated support is offered in either dedicated or enterprise support plans, each is optional with 24/7 technical assistance.</p><p>You can also find us during normal and abnormal business hours in our #technical <a href=\"https://cosmicslack.herokuapp.com/\">slack channel</a>.</p>","type":"html-textarea","required":false}]}],"type":"repeater","title":"FAQs","key":"faqs","id":"GjOq9Ixiy2","value":"What is React?","repeater_fields":[{"title":"Question","key":"question","value":"","type":"text","required":false},{"title":"Answer","key":"answer","value":"","type":"html-textarea","required":false}]},{"children":null,"type":"markdown","title":"Code Guide","key":"code_guide","id":"1c7KZJbCRE","value":"## Getting Started with Cosmic as Your React CMS\n\nUse the following step-by-step guide to get started using Cosmic as a headless CMS for your React apps.\n\n### Initial Setup\nBefore doing any coding, let's set up a Bucket with content using the following steps:\n1. Create or log in to your [Cosmic account](https://app.cosmicjs.com).\n2. Install the [Simple Blog](https://www.cosmicjs.com/apps/simple-blog) by clicking \"Select App\" then following the steps to create a new Bucket with the demo content. Alternatively, you could start by creating a new Bucket from scratch and add an Object Type titled `Posts` that has the slug `posts` and add a File Metafield titled `Hero` with key `hero`. Then add a few Objects with your own demo content.\n\nNow that we have some demo content, we can integrate the content using the following steps to make Cosmic your headless CMS for React.\n\n### 1. Install a new React app\nYou can use [Create React App](https://github.com/facebook/create-react-app) to install a new React app that includes tooling and configurations.\n```bash\nnpm i -g create-react-app\ncreate-react-app cosmic-react-app\n```\n### 2. Install the Cosmic NPM module and SWR\n```bash\ncd cosmic-react-app\nyarn add cosmicjs swr\n```\n### 3. Add the following code into your `src/App.js` file\nFind your Bucket slug and API read key in <i>Your Bucket > Basic Settings > API Access</i> after [logging in](https://app.cosmicjs.com).\n```javascript\n// src/App.js\nimport React from 'react'\nimport useSWR from 'swr'\nimport Cosmic from 'cosmicjs'\nconst api = Cosmic()\n// Set these values, found in Bucket > Settings after logging in at https://app.cosmicjs.com/login\nconst bucket = api.bucket({\n  slug: 'YOUR_BUCKET_SLUG',\n  read_key: 'YOUR_BUCKET_READ_KEY'\n})\nconst fetchPosts = async () => {\n  const data = await bucket.getObjects({\n    type: 'posts',\n    props: 'slug,title,metadata' // Limit the API response data by props\n  })\n  return data\n}\nfunction App() {\n  const { data, error } = useSWR('fetch-posts', fetchPosts) // Use SWR hook\n  if (!data)\n    return <div>Loading...</div>\n  const posts = data.objects\n  return <div>\n    { posts.map(post => \n      <div key={post.slug} style={{marginBottom: 20}}>\n        {\n          post.metadata.hero &&\n          <div><img alt=\"\" src={`${post.metadata.hero.imgix_url}?w=400`}/></div>\n        }\n        <div>{post.title}</div>\n      </div>)\n    }\n  </div>\n}\nexport default App\n```\n\n### 4. Start your app\nStart your app, and go to http://localhost:3000. Dance 🎉\n```bash\nnpm start\n```\n\nSee more guides in [React CMS documentation](https://docs.cosmicjs.com/) and other headless CMS-based integrations including [Next.js](https://docs.cosmicjs.com/guides/#next-js) and [Gatsby](https://docs.cosmicjs.com/guides/#gatsby)."},{"children":null,"type":"html-textarea","title":"SEO Content","key":"seo_content","id":"wMKrFc56Td","value":""}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-22T23:09:01.747Z","created_by":"5357ef811693be2118000001","created":"2017-04-22T23:09:01.747Z","status":"published","modified_at":"2022-06-03T06:26:04.930Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-06-03T06:26:04.930Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/9c2d95d0-27b0-11e7-b6ae-8108cf4caa96-react.svg","imgix_url":"https://imgix.cosmicjs.com/9c2d95d0-27b0-11e7-b6ae-8108cf4caa96-react.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/a1e22810-27b0-11e7-b6ae-8108cf4caa96-react.svg","imgix_url":"https://imgix.cosmicjs.com/a1e22810-27b0-11e7-b6ae-8108cf4caa96-react.svg"},"blurb":"<p>Cosmic is the best CMS for React websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"React","sub_headline":"Cosmic and React are a perfect combination.","seo_description":"Cosmic is the leading headless CMS for React applications. Our flexible infrastructure, outstanding support, and faster service means better apps.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/7a43eca0-eee7-11eb-849a-8548c9a99fc0-Cosmic-React-CMS.png","imgix_url":"https://imgix.cosmicjs.com/7a43eca0-eee7-11eb-849a-8548c9a99fc0-Cosmic-React-CMS.png"},"seo_title":"The #1 React CMS - Build Better React Apps with Cosmic","h1":"Bring Your Favorite React Frontend","code_example":"","videos":[{"title":"Getting Started with Cosmic CMS and Next.js (Part 1)","link":"https://www.youtube.com/embed/NZA1dF2IDqQ?showinfo=0&wmode=opaque"},{"title":"Using Cosmic as a Headless CMS with Gatsby","link":"https://www.youtube.com/embed/Qls5frYlJeI?showinfo=0&wmode=opaque&widget_referrer=https%3A%2F%2Fwww.cosmicjs.com%2Fknowledge-base%2Freact-cms&enablejsapi=1&origin=https%3A%2F%2Fcdn.embedly.com&widgetid=1"},{"title":"Build a Cosmic-powered blog using Gatsby","link":"https://www.youtube.com/embed/mGcAWs1xRnY?showinfo=0&wmode=opaque&widget_referrer=https%3A%2F%2Fwww.cosmicjs.com%2Fknowledge-base%2Freact-cms&enablejsapi=1&origin=https%3A%2F%2Fcdn.embedly.com&widgetid=1"}],"page_overview_title":"Why use a Headless CMS as React’s CMS?","page_overview":"<p>Using a headless CMS for your React application eliminates cumbersome layers of technological setup and maintenance from your React CMS that are necessary for coupled and decoupled CMS systems (e.g. WordPress, Drupal, Joomla, Shopify, Magento, etc.) Headless CMS data is accessible and extensible, providing future-proofed delivery via API to any destination. This circumvents investing in CMS infrastructure maintenance, allowing development focus to be on presentation and application business logic.</p>","feature_section_left_video":"https://cdn.cosmicjs.com/75147100-13be-11eb-af66-95e0cc16a663-a2cf8510-fe71-11ea-a525-3597bcdfdc76-Merge-Objects.mp4","feature_section_right":"<h3><span data-reactroot=\"\" data-token-index=\"0\">T</span><span data-reactroot=\"\" data-token-index=\"1\">op-Tier React CMS Features</span></h3><p>Cosmic offers <strong>world-class API speed</strong>, <strong>industry-leading uptime reports</strong>, and a verbose feature set built for React - including:</p><ul><li>Component composition with Objects</li><li>Media / file management</li><li>Easy access to documentation and code samples</li><li>Extensive NPM module</li><li>and more</li></ul>","apps_search_term":"","articles_search_term":"","apps":[{"app_slug":"simple-react-blog"},{"app_slug":"nextjs-static-blog"},{"app_slug":"react-cosmedium-blog"}],"articles":[{"article_slug":"how-to-build-a-react-portfolio-website-powered-by-cosmic-js"},{"article_slug":"how-to-build-a-location-based-twitter-search-app-with-react-and-cosmic-js"},{"article_slug":"build-a-react-shuffle-blog-using-the-spotify-api"}],"faqs":[{"question":"What is React?","answer":"<p><a href=\"https://reactjs.org/\">React</a> (or <em>ReactJS</em>, <em>React.js</em>) is a <a href=\"https://www.javascriptframework.org/\">JavaScript library</a> for building <em>user interfaces</em>. It enables you to build robustly dynamic single-page web applications by using a component-based architecture, purposed for greater code reusability.</p><p>React can also render on the server-side using <a href=\"https://www.cosmicjs.com/knowledge-base/nodejs-cms\">Node.js</a>, or on mobile apps (compilation) using React Native. Originally developed at Facebook, it is under active development by employees at Facebook and the open source community.</p>"},{"question":"What is a CMS?","answer":"<p>React only provides the “front-end” user interface (UI), handling the visual presentation of an application’s content. React applications must be complemented with a compatible “back-end” database to store and retrieve content; further, that data source needs a way to be managed. This data storage and management demands the need for a content management system (CMS).</p>"},{"question":"What is a React CMS?","answer":"<p>To provide content to a React CMS application, data for the React application is servable:</p><ul><li>Client-side (from the browser or app) on-demand</li><li>Server-side on-demand</li><li>At compilation (build) time</li></ul><p>A React CMS is created when a React UI is integrated with a CMS to handle content. To communicate with React, a CMS must offer a compatible application programming interface (API). For example:</p><ul><li><a href=\"https://docs.cosmicjs.com/api-reference/getting-started/available-methods#graphql\">GraphQL API</a></li><li><a href=\"https://docs.cosmicjs.com/api-reference/getting-started/available-methods#rest-api\">REST API</a></li><li><a href=\"https://www.npmjs.com/package/cosmicjs\">NPM module</a></li></ul><p>A <a href=\"https://www.cosmicjs.com/headless-cms\">headless CMS</a> can be used as a flexible data source for your React application to supply content to any or all of: client-side, server-side, or during compilation. Compilation refers to the build process commonly known as <a href=\"https://jamstack.org/\">Jamstack</a> approach, which deploys pre-rendered web pages to a <a href=\"https://www.staticwebsitehosting.org/\">static website hosting</a> provider.</p><h3>React CMS Data Compatibility and Accessibility</h3><p>Using available API tools like our REST, GraphQL, or Cosmic NPM module empower developers to create powerful user experiences using Cosmic as the React CMS.</p>"},{"question":"Is it \"React\" or \"React.js\"? What happened to the JS?","answer":"<p>React, formerly and often still incorrectly referred to as React.js, is one of the most popular JavaScript frameworks. React is only the new brand name for what was formerly known as React.js. In 2017, Facebook dropped the \".js\" from React's name.</p>"},{"question":"How are Cosmic's content components \"Built\" for React?","answer":"<p>A headless CMS like Cosmic natively facilitates React’s component-based JavaScript architecture. React components integrate with Cosmic’s content model, supporting JSON data Objects, Metafields, and Object Relationships, facilitating creation of reusable React CMS components. This native JavaScript component synchronicity with React makes Cosmic headless CMS ideal to facilitate any React application’s content needs.</p>"},{"question":"Do you offer security features for my React CMS?","answer":"<p>Headless CMS data is securely delivered by the Cosmic APIs within industry standard 256-bit SSL encryption in transit and in storage in our global data centers. Additional security via two-factor authentication is also available for free. This industry standard level of security comes included with all Cosmic accounts.</p><p>In contrast, when using a coupled CMS system, you are responsible for providing these security features with none of the above security features included.</p>"},{"question":"Support for your React CMS and React developers","answer":"<p>Community support is crucial to our headless CMS culture. Cosmic’s intention is to provide headless CMS resources that save time and money using our solution as your React CMS. To support and supplement this, Cosmic regularly publishes educational resources, open source libraries, example applications/boilerplates, extensions, hosts events, and more.</p><p>Paid dedicated support is offered in either dedicated or enterprise support plans, each is optional with 24/7 technical assistance.</p><p>You can also find us during normal and abnormal business hours in our #technical <a href=\"https://cosmicslack.herokuapp.com/\">slack channel</a>.</p>"}],"code_guide":"## Getting Started with Cosmic as Your React CMS\n\nUse the following step-by-step guide to get started using Cosmic as a headless CMS for your React apps.\n\n### Initial Setup\nBefore doing any coding, let's set up a Bucket with content using the following steps:\n1. Create or log in to your [Cosmic account](https://app.cosmicjs.com).\n2. Install the [Simple Blog](https://www.cosmicjs.com/apps/simple-blog) by clicking \"Select App\" then following the steps to create a new Bucket with the demo content. Alternatively, you could start by creating a new Bucket from scratch and add an Object Type titled `Posts` that has the slug `posts` and add a File Metafield titled `Hero` with key `hero`. Then add a few Objects with your own demo content.\n\nNow that we have some demo content, we can integrate the content using the following steps to make Cosmic your headless CMS for React.\n\n### 1. Install a new React app\nYou can use [Create React App](https://github.com/facebook/create-react-app) to install a new React app that includes tooling and configurations.\n```bash\nnpm i -g create-react-app\ncreate-react-app cosmic-react-app\n```\n### 2. Install the Cosmic NPM module and SWR\n```bash\ncd cosmic-react-app\nyarn add cosmicjs swr\n```\n### 3. Add the following code into your `src/App.js` file\nFind your Bucket slug and API read key in <i>Your Bucket > Basic Settings > API Access</i> after [logging in](https://app.cosmicjs.com).\n```javascript\n// src/App.js\nimport React from 'react'\nimport useSWR from 'swr'\nimport Cosmic from 'cosmicjs'\nconst api = Cosmic()\n// Set these values, found in Bucket > Settings after logging in at https://app.cosmicjs.com/login\nconst bucket = api.bucket({\n  slug: 'YOUR_BUCKET_SLUG',\n  read_key: 'YOUR_BUCKET_READ_KEY'\n})\nconst fetchPosts = async () => {\n  const data = await bucket.getObjects({\n    type: 'posts',\n    props: 'slug,title,metadata' // Limit the API response data by props\n  })\n  return data\n}\nfunction App() {\n  const { data, error } = useSWR('fetch-posts', fetchPosts) // Use SWR hook\n  if (!data)\n    return <div>Loading...</div>\n  const posts = data.objects\n  return <div>\n    { posts.map(post => \n      <div key={post.slug} style={{marginBottom: 20}}>\n        {\n          post.metadata.hero &&\n          <div><img alt=\"\" src={`${post.metadata.hero.imgix_url}?w=400`}/></div>\n        }\n        <div>{post.title}</div>\n      </div>)\n    }\n  </div>\n}\nexport default App\n```\n\n### 4. Start your app\nStart your app, and go to http://localhost:3000. Dance 🎉\n```bash\nnpm start\n```\n\nSee more guides in [React CMS documentation](https://docs.cosmicjs.com/) and other headless CMS-based integrations including [Next.js](https://docs.cosmicjs.com/guides/#next-js) and [Gatsby](https://docs.cosmicjs.com/guides/#gatsby).","seo_content":""}},{"_id":"5bad1c880d6e7903879ee271","slug":"slack","title":"Slack","content":"","metafields":[{"value":"https://cosmic-slack-events.cosmicapp.co","key":"link","title":"Link","type":"text","children":null},{"value":"741edfb0-c276-11e8-8edd-1f302b73a4c6-slack.jpg","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/741edfb0-c276-11e8-8edd-1f302b73a4c6-slack.jpg","imgix_url":"https://imgix.cosmicjs.com/741edfb0-c276-11e8-8edd-1f302b73a4c6-slack.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"integrations","created":"2018-09-27T18:08:08.250Z","created_at":"2018-09-27T18:08:08.250Z","modified_at":"2018-09-29T15:38:17.173Z","status":"published","locale":null,"published_at":"2018-09-29T15:38:17.173Z","created_by":"5357ef811693be2118000001","order":1,"modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"link":"https://cosmic-slack-events.cosmicapp.co","image":{"url":"https://cdn.cosmicjs.com/741edfb0-c276-11e8-8edd-1f302b73a4c6-slack.jpg","imgix_url":"https://imgix.cosmicjs.com/741edfb0-c276-11e8-8edd-1f302b73a4c6-slack.jpg"}}},{"_id":"538a10353ff8db6d77000002","slug":"home","title":"Home","content":"","metafields":[{"children":[{"type":"repeating_item","children":[{"title":"Question","key":"question","value":"What is a headless CMS?","type":"text","required":false},{"title":"Answer","key":"answer","value":"<p>A headless content management system (headless CMS) is a kind of CMS that creates more inherent separation between the back-end and the front-end of your applications. This allows for lots of useful functionality - for example, plugging an application into new front-ends (think: websites, mobile phones, smart devices) becomes much easier - because your code doesn't have any dependencies on the front-end.</p><p>This is one, simple, example of what makes headless CMS so great. In our eyes, it's going to become a primary means of content management in the coming decade. <a href=\"/headless-cms\">Learn more about headless content management here.</a></p>","type":"html-textarea","required":false}]},{"type":"repeating_item","children":[{"title":"Question","key":"question","value":"Is headless CMS right for me?","type":"text","required":false},{"title":"Answer","key":"answer","value":"<p>Hard to say. Headless CMS is not for every team, but if you're looking to reduce development time spent on CMS infrastructure, you're definitely in the right place. If you want a content management system that integrates better with the accelerating API-based economy, headless will be great for you. If you want to enable better collaboration between the infamously siloed development and marketing teams, headless is your best bet. Learn more about <a data-reactroot=\"\" data-token-index=\"1\" href=\"https://www.cosmicjs.com/blog/how-to-choose-a-modern-cms-future-proof-your-content-2021\" rel=\"noopener noreferrer\" target=\"_blank\">how to decide if headless is the best choice for your business.</a></p>","type":"html-textarea","required":false}]},{"type":"repeating_item","children":[{"title":"Question","key":"question","value":"What's the Jamstack?","type":"text","required":false},{"title":"Answer","key":"answer","value":"<p>Jamstack refers to a <a href=\"https://jamstack.org/\">new architecture of web and application development</a>. In a nutshell, this architecture allows for a more modern approach to creating applications. It sets your application up for success as we move into a digital age that requires more flexible applications.</p><p>There are 2 ideas that make up the new Jamstack architecture - pre-rendering, and de-coupling. That de-coupling concept is where headless CMS comes in - a headless CMS <strong><em>de-couples</em></strong> the back-end of your application from the front-end.</p>","type":"html-textarea","required":false}]},{"type":"repeating_item","children":[{"title":"Question","key":"question","value":"Is Cosmic open source?","type":"text","required":false},{"title":"Answer","key":"answer","value":"<p>The core Cosmic product is not open source. But we do provide lots of open source resources and examples to help you get started quickly. Trust our team of experts to continually update our software to make sure your team is equipped with the most modern and secure content management software. We are your outsourced content management team. More secure, continuously updated, expertly managed CMS as a service.</p>","type":"html-textarea","required":false}]},{"type":"repeating_item","children":[{"title":"Question","key":"question","value":"I'm a solo developer / freelancer, is Cosmic right for me?","type":"text","required":false},{"title":"Answer","key":"answer","value":"<p>Of course! We have a <a data-reactroot=\"\" data-token-index=\"1\" href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">vibrant Slack Community&nbsp;</a>and welcome developers of any walk of life - enterprise long-haulers and the scrappy-freelancer alike.</p>","type":"html-textarea","required":false}]},{"type":"repeating_item","children":[{"title":"Question","key":"question","value":"Is there a free plan?","type":"text","required":false},{"title":"Answer","key":"answer","value":"<p><a data-reactroot=\"\" data-token-index=\"0\" href=\"https://www.cosmicjs.com/pricing\">Our personal plan is free to use</a> on any Bucket, for unlimited time, no restrictions. Enjoy.</p>","type":"html-textarea","required":false}]},{"type":"repeating_item","children":[{"title":"Question","key":"question","value":"Do you have React / Vue / Angular / Next.js starter guides?","type":"text","required":false},{"title":"Answer","key":"answer","value":"<p>All of the above, and more. Check out our <a href=\"https://docs.cosmicjs.com/guides/initial-setup\">documentation for quickstart guides</a> for all your favorite frameworks, plus a wealth of open-source, pre-built starter apps for you to peruse and pick from if you&#39;d like to use one to get your application rolling.</p>","type":"html-textarea","required":false}]},{"type":"repeating_item","children":[{"title":"Question","key":"question","value":"How's your documentation?","type":"text","required":false},{"title":"Answer","key":"answer","value":"<p><a data-reactroot=\"\" data-token-index=\"0\" href=\"http://docs.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Extensive.</a> We take pride in our docs and keep them regularly updated.</p>","type":"html-textarea","required":false}]},{"type":"repeating_item","children":[{"title":"Question","key":"question","value":"I'm migrating from WordPress to headless CMS - what do I do?","type":"text","required":false},{"title":"Answer","key":"answer","value":"<p>We're working on compiling some extensive resources and migration guides for each use case, but for now, we offer migration assistance for anyone who's decided to take the leap with us over to Cosmic's Headless CMS platform. Reach out to us <a data-reactroot=\"\" data-token-index=\"1\" href=\"http://cosmicjs.com/contact\" rel=\"noopener noreferrer\" target=\"_blank\">via our contact form</a> or in <a data-reactroot=\"\" data-token-index=\"3\" href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">our Slack Channel</a> and we'll guide you and your development team through any questions you may have.</p>","type":"html-textarea","required":false}]}],"type":"repeater","title":"FAQs","key":"faqs","id":"Rr88Uo1oBL","value":"What is a headless CMS?","repeater_fields":[{"title":"Question","key":"question","value":"","type":"text","required":false},{"title":"Answer","key":"answer","value":"","type":"html-textarea","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"pages","created":"2014-05-31T17:24:05.368Z","order":1,"modified":"2015-01-26T03:48:22.839Z","files":"","modified_at":"2021-05-18T13:20:12.270Z","modified_by":"5357ef811693be2118000001","status":"published","publish_at":null,"published_at":"2021-05-18T13:20:12.270Z","unpublish_at":null,"thumbnail":"https://imgix.cosmicjs.com/deeb5c60-341b-11eb-9c4b-5ff458b1095b-modern-cms.png","metadata":{"faqs":[{"question":"What is a headless CMS?","answer":"<p>A headless content management system (headless CMS) is a kind of CMS that creates more inherent separation between the back-end and the front-end of your applications. This allows for lots of useful functionality - for example, plugging an application into new front-ends (think: websites, mobile phones, smart devices) becomes much easier - because your code doesn't have any dependencies on the front-end.</p><p>This is one, simple, example of what makes headless CMS so great. In our eyes, it's going to become a primary means of content management in the coming decade. <a href=\"/headless-cms\">Learn more about headless content management here.</a></p>"},{"question":"Is headless CMS right for me?","answer":"<p>Hard to say. Headless CMS is not for every team, but if you're looking to reduce development time spent on CMS infrastructure, you're definitely in the right place. If you want a content management system that integrates better with the accelerating API-based economy, headless will be great for you. If you want to enable better collaboration between the infamously siloed development and marketing teams, headless is your best bet. Learn more about <a data-reactroot=\"\" data-token-index=\"1\" href=\"https://www.cosmicjs.com/blog/how-to-choose-a-modern-cms-future-proof-your-content-2021\" rel=\"noopener noreferrer\" target=\"_blank\">how to decide if headless is the best choice for your business.</a></p>"},{"question":"What's the Jamstack?","answer":"<p>Jamstack refers to a <a href=\"https://jamstack.org/\">new architecture of web and application development</a>. In a nutshell, this architecture allows for a more modern approach to creating applications. It sets your application up for success as we move into a digital age that requires more flexible applications.</p><p>There are 2 ideas that make up the new Jamstack architecture - pre-rendering, and de-coupling. That de-coupling concept is where headless CMS comes in - a headless CMS <strong><em>de-couples</em></strong> the back-end of your application from the front-end.</p>"},{"question":"Is Cosmic open source?","answer":"<p>The core Cosmic product is not open source. But we do provide lots of open source resources and examples to help you get started quickly. Trust our team of experts to continually update our software to make sure your team is equipped with the most modern and secure content management software. We are your outsourced content management team. More secure, continuously updated, expertly managed CMS as a service.</p>"},{"question":"I'm a solo developer / freelancer, is Cosmic right for me?","answer":"<p>Of course! We have a <a data-reactroot=\"\" data-token-index=\"1\" href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">vibrant Slack Community&nbsp;</a>and welcome developers of any walk of life - enterprise long-haulers and the scrappy-freelancer alike.</p>"},{"question":"Is there a free plan?","answer":"<p><a data-reactroot=\"\" data-token-index=\"0\" href=\"https://www.cosmicjs.com/pricing\">Our personal plan is free to use</a> on any Bucket, for unlimited time, no restrictions. Enjoy.</p>"},{"question":"Do you have React / Vue / Angular / Next.js starter guides?","answer":"<p>All of the above, and more. Check out our <a href=\"https://docs.cosmicjs.com/guides/initial-setup\">documentation for quickstart guides</a> for all your favorite frameworks, plus a wealth of open-source, pre-built starter apps for you to peruse and pick from if you&#39;d like to use one to get your application rolling.</p>"},{"question":"How's your documentation?","answer":"<p><a data-reactroot=\"\" data-token-index=\"0\" href=\"http://docs.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Extensive.</a> We take pride in our docs and keep them regularly updated.</p>"},{"question":"I'm migrating from WordPress to headless CMS - what do I do?","answer":"<p>We're working on compiling some extensive resources and migration guides for each use case, but for now, we offer migration assistance for anyone who's decided to take the leap with us over to Cosmic's Headless CMS platform. Reach out to us <a data-reactroot=\"\" data-token-index=\"1\" href=\"http://cosmicjs.com/contact\" rel=\"noopener noreferrer\" target=\"_blank\">via our contact form</a> or in <a data-reactroot=\"\" data-token-index=\"3\" href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">our Slack Channel</a> and we'll guide you and your development team through any questions you may have.</p>"}]}},{"_id":"5ae38f736086f9690dc5aa77","order":1,"slug":"education-engineer","title":"Education Engineer","content":"<p>Cosmic is transforming the way content is created and delivered to the world. We provide a headless CMS to help teams build modern content-powered apps together.</p><p>We are currently looking for an Education Engineer to help create high-quality content to add more value for our customers.<br><br>If selected to join our team, you would be expected to be self-starting and provide quality, quantifiable results for our remote-first company.<br><br><strong>Scope</strong><br>The tasks will be:<br>- Maintain open source code<br>- Create step-by-step tutorials for building various use cases<br>- Create and maintain templates and extensions<br>- Create guides<br>- Create / maintain video content<br><br><strong>Requirements</strong><br>- Previous experience with creating high-quality developer education content (video preferred)<br><br><strong>Other details</strong><br>This is a remote position. If hired, you will engage in regular standups with the Cosmic team, directly reporting to the CEO. The role is half engineering (mostly frontend) and half marketing. Must be passionate about building great products and educational outreach. Design experience a plus.</p><p>Contact <a href=\"mailto:jobs@cosmicjs.com\"></a><a href=\"mailto:jobs@cosmicjs.com?subject=Developer%20Advocate\">jobs@cosmicjs.com</a> with the subject &quot;Education Engineer&quot; to apply.</p>","metafields":[{"children":null,"type":"textarea","title":"Teaser","key":"teaser","id":"et6SFofNwe","value":"Education Engineers are driven to help customers get the most value from Cosmic. We are currently looking for an Education Engineer to help create high-quality content to add more value for our customers."},{"children":null,"type":"text","title":"Font Awesome Icon","key":"font_awesome_icon","id":"5ZkQPZ2Y22","value":"fa-bullhorn"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"jobs","created_at":"2018-04-27T21:00:35.784Z","created_by":"5716b504e9c686d006000073","created":"2018-04-27T21:00:35.784Z","status":"published","modified_at":"2022-02-04T22:24:05.249Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-02-04T22:24:05.249Z","unpublish_at":null,"metadata":{"teaser":"Education Engineers are driven to help customers get the most value from Cosmic. We are currently looking for an Education Engineer to help create high-quality content to add more value for our customers.","font_awesome_icon":"fa-bullhorn"}},{"_id":"57859a0f1621de245c0004c5","order":1,"slug":"tony-spiro-ceo-co-founder","title":"Tony Spiro, CEO & Co-Founder","content":"<p><a href=\"https://cosmicjs.com/tony\" rel=\"noopener noreferrer\" target=\"_blank\">Tony Spiro</a> is an experienced software engineer who knows the pain of content management in a team setting. From his experience leading digital teams from startups to Fortune 500 companies, he started Cosmic JS to solve his own problems in application development.</p><p>He is thrilled to help teams around the world use Cosmic JS to build amazing products together.</p>","metafields":[{"value":"3c056190-03cf-11e9-a674-8b21bc2bc0e1-me.jpg","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/3c056190-03cf-11e9-a674-8b21bc2bc0e1-me.jpg","imgix_url":"https://imgix.cosmicjs.com/3c056190-03cf-11e9-a674-8b21bc2bc0e1-me.jpg"},{"value":"https://cosmicjs.com/tony","key":"cosmic","title":"Cosmic","type":"text","children":null},{"value":"https://twitter.com/tonyspiro","key":"twitter","title":"Twitter","type":"text","children":null},{"value":"https://www.linkedin.com/in/tonyspiro/","key":"linkedin","title":"Linkedin","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"people","created":"2016-07-13T01:31:59.156Z","status":"published","modified":"2016-08-05T22:19:20.200Z","modified_at":"2018-12-19T20:52:32.682Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-12-19T20:52:32.682Z","metadata":{"image":{"url":"https://cdn.cosmicjs.com/3c056190-03cf-11e9-a674-8b21bc2bc0e1-me.jpg","imgix_url":"https://imgix.cosmicjs.com/3c056190-03cf-11e9-a674-8b21bc2bc0e1-me.jpg"},"cosmic":"https://cosmicjs.com/tony","twitter":"https://twitter.com/tonyspiro","linkedin":"https://www.linkedin.com/in/tonyspiro/"}},{"_id":"5fb8316ce2cf050007d28d3b","order":1,"slug":"clever","title":"Clever","content":"","metafields":[{"children":null,"type":"file","title":"Logo","key":"logo","id":"beG0enqyz1","value":"de069370-59f3-11eb-9e0f-fd6e504bde0d-clever.png","url":"https://cdn.cosmicjs.com/de069370-59f3-11eb-9e0f-fd6e504bde0d-clever.png","imgix_url":"https://imgix.cosmicjs.com/de069370-59f3-11eb-9e0f-fd6e504bde0d-clever.png"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"edqrUrbo7h","value":"Cosmic helps Clever Real Estate save their customers thousands on real estate fees."},{"children":null,"type":"text","title":"Brand Color","key":"brand_color","id":"xuCEjj1S52","value":"#3eb2ef"},{"children":null,"type":"file","title":"Background Image","key":"background_image","id":"evYIBkrznJ","value":"3b8959f0-2b74-11eb-8245-31a0d5eed227-list-with-clever-launch.jpg","url":"https://cdn.cosmicjs.com/3b8959f0-2b74-11eb-8245-31a0d5eed227-list-with-clever-launch.jpg","imgix_url":"https://imgix.cosmicjs.com/3b8959f0-2b74-11eb-8245-31a0d5eed227-list-with-clever-launch.jpg"},{"children":null,"type":"text","title":"Industry","key":"industry","id":"2U1EqYwJ5d","value":"Real Estate"},{"children":null,"type":"text","title":"Product","key":"product","id":"oUKz1ld6iy","value":"Agent Services & Software"},{"children":null,"type":"file","title":"Main Image","key":"main_image","id":"uN9UHKssCM","value":"e887b2a0-2b74-11eb-8245-31a0d5eed227-clever-makes-homebuying-easy.png","url":"https://cdn.cosmicjs.com/e887b2a0-2b74-11eb-8245-31a0d5eed227-clever-makes-homebuying-easy.png","imgix_url":"https://imgix.cosmicjs.com/e887b2a0-2b74-11eb-8245-31a0d5eed227-clever-makes-homebuying-easy.png"},{"children":[{"children":null,"type":"file","title":"Image","key":"image","id":"egD8ow9VxQ","value":"ee9d2990-2b74-11eb-8245-31a0d5eed227-clever-savings-form.png","url":"https://cdn.cosmicjs.com/ee9d2990-2b74-11eb-8245-31a0d5eed227-clever-savings-form.png","imgix_url":"https://imgix.cosmicjs.com/ee9d2990-2b74-11eb-8245-31a0d5eed227-clever-savings-form.png"},{"children":null,"type":"html-textarea","title":"Text","key":"text","id":"7HyJYyCoLJ","value":"<p><a href=\"https://listwithclever.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Clever</a> was founded in late 2017 on a relatively straightforward premise - help homeowners save on real estate fees when buying or selling a home. The founders, Ben and Luke, wanted to do this while still providing great agent services, and a consistent source of leads to their agents. Working out of an apartment, Clever&#39;s founding team defined a strong culture in its early days. In particular, they cultivated tenacity, a passion for learning, and personal-growth in their team, and those values have served the company well. Today, Clever is a remote team of over 30 employees spread across the United States, all of whom share responsibility for helping hundreds of homeowners save over 26 million in Real Estate fees - so far.</p><p>As Clever was hitting its stride in early 2018, they brought on Donovan King to spearhead their efforts to migrate off of their old WordPress website. Donovan knew they were looking at migrating toward a more modern tech stack. Because Clever&#39;s solutions were handling loads of customer data on-site, in addition to managing their own content, they were not going to be well served by a traditional frontend and CMS. Gatsby and the Jamstack was the future of their site, and they needed a Headless CMS that had the flexibility to grow along with their solution.</p>"}],"type":"parent","title":"Section 1","key":"section_1","id":"zt8hulo6Wj","value":"<p><a href=\"https://listwithclever.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Clever</a> was founded in late 2017 on a relatively straightforward premise - help homeowners save on real estate fees when buying or selling a home. The founders, Ben and Luke, wanted to do this while still providing great agent services, and a consistent source of leads to their agents. Working out of an apartment, Clever&#39;s founding team defined a strong culture in its early days. In particular, they cultivated tenacity, a passion for learning, and personal-growth in their team, and those values have served the company well. Today, Clever is a remote team of over 30 employees spread across the United States, all of whom share responsibility for helping hundreds of homeowners save over 26 million in Real Estate fees - so far.</p><p>As Clever was hitting its stride in early 2018, they brought on Donovan King to spearhead their efforts to migrate off of their old WordPress website. Donovan knew they were looking at migrating toward a more modern tech stack. Because Clever&#39;s solutions were handling loads of customer data on-site, in addition to managing their own content, they were not going to be well served by a traditional frontend and CMS. Gatsby and the Jamstack was the future of their site, and they needed a Headless CMS that had the flexibility to grow along with their solution.</p>"},{"children":[{"children":null,"type":"file","title":"Image","key":"image","id":"nrTETI3oh5","value":"3c33eba0-59f4-11eb-9e0f-fd6e504bde0d-clever-screenshot.png","url":"https://cdn.cosmicjs.com/3c33eba0-59f4-11eb-9e0f-fd6e504bde0d-clever-screenshot.png","imgix_url":"https://imgix.cosmicjs.com/3c33eba0-59f4-11eb-9e0f-fd6e504bde0d-clever-screenshot.png"},{"children":null,"type":"html-textarea","title":"Text","key":"text","id":"ZxF14oQWtT","value":"<p>Selecting a Headless CMS wasn&#39;t an easy decision. Donovan compared Cosmic to some of the leading competitors - Contentful being one - but ultimately, Cosmic came out on top. Why? Donovan says among other things, he liked our free trial options; because he was <a href=\"https://www.cosmicjs.com/pricing\">able to play around with the free personal plan</a>, he realized the MVP features they&#39;d be setting up would work best on an unopinionated, no-holds-barred CMS like Cosmic.</p><p>As Clever has rapidly grown, so too have their web applications. Cosmic has kept pace with their solutions the whole way. As they began managing more of their website content through Cosmic, Clever made use of Cosmic&#39;s plugin features to support their content team in their web content creation. Donovan decided he needed a more complex set of scripting libraries for Clever, and Cosmic&#39;s API access provided him everything he needed. Today, Clever is managing all of their website content through Cosmic, and is rapidly expanding into one of the leading real estate tech companies in the industry.</p>"}],"type":"parent","title":"Section 2","key":"section_2","id":"Uki8qS2HrT","value":"<p>Selecting a Headless CMS wasn&#39;t an easy decision. Donovan compared Cosmic to some of the leading competitors - Contentful being one - but ultimately, Cosmic came out on top. Why? Donovan says among other things, he liked our free trial options; because he was <a href=\"https://www.cosmicjs.com/pricing\">able to play around with the free personal plan</a>, he realized the MVP features they&#39;d be setting up would work best on an unopinionated, no-holds-barred CMS like Cosmic.</p><p>As Clever has rapidly grown, so too have their web applications. Cosmic has kept pace with their solutions the whole way. As they began managing more of their website content through Cosmic, Clever made use of Cosmic&#39;s plugin features to support their content team in their web content creation. Donovan decided he needed a more complex set of scripting libraries for Clever, and Cosmic&#39;s API access provided him everything he needed. Today, Clever is managing all of their website content through Cosmic, and is rapidly expanding into one of the leading real estate tech companies in the industry.</p>"},{"children":[{"children":null,"type":"file","title":"Image","key":"image","id":"AJUlIyOBeE","value":"fcc9dae0-2b74-11eb-8245-31a0d5eed227-clever-square-logo.jpg","url":"https://cdn.cosmicjs.com/fcc9dae0-2b74-11eb-8245-31a0d5eed227-clever-square-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/fcc9dae0-2b74-11eb-8245-31a0d5eed227-clever-square-logo.jpg"},{"children":null,"type":"text","title":"Author","key":"author","id":"nP3iHkgLcN","value":"Donovan King - Lead Front-end Engineer"},{"children":null,"type":"textarea","title":"Text","key":"text","id":"yOtOebMMcf","value":"One thing that's fantastic about Cosmic is the Customer Service. There have been several occasions where we had a direct line via Slack to the CEO and Cosmic had changes pushed the same day. One time I think they had a hotfix for us live to their servers in less than 45 minutes! Currently, Cosmic is the primary route for how we're publishing content - due to how flexible it is, how unopinionated it is about data schema, and other features like that. We've been able to implement some pretty complex structures on top of it. Our website structure, individual components, and much more are built in Cosmic."}],"type":"parent","title":"Testimonial Section","key":"testimonial_section","id":"SvdD20RqSe","value":"Donovan King - Lead Front-end Engineer"},{"children":null,"type":"switch","title":"Featured on Home","key":"featured_on_home","id":"ClN2ephHQz","value":false,"options":"yes,no"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"customers","created_at":"2020-11-20T21:13:16.546Z","created_by":"5f8088982aa32f00093977bb","modified_at":"2021-02-16T21:45:50.789Z","created":"2020-11-20T21:13:16.546Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/fcc9dae0-2b74-11eb-8245-31a0d5eed227-clever-square-logo.jpg","modified_by":"5f8088982aa32f00093977bb","publish_at":null,"unpublish_at":null,"published_at":"2021-02-16T21:45:50.789Z","metadata":{"logo":{"url":"https://cdn.cosmicjs.com/de069370-59f3-11eb-9e0f-fd6e504bde0d-clever.png","imgix_url":"https://imgix.cosmicjs.com/de069370-59f3-11eb-9e0f-fd6e504bde0d-clever.png"},"seo_description":"Cosmic helps Clever Real Estate save their customers thousands on real estate fees.","brand_color":"#3eb2ef","background_image":{"url":"https://cdn.cosmicjs.com/3b8959f0-2b74-11eb-8245-31a0d5eed227-list-with-clever-launch.jpg","imgix_url":"https://imgix.cosmicjs.com/3b8959f0-2b74-11eb-8245-31a0d5eed227-list-with-clever-launch.jpg"},"industry":"Real Estate","product":"Agent Services & Software","main_image":{"url":"https://cdn.cosmicjs.com/e887b2a0-2b74-11eb-8245-31a0d5eed227-clever-makes-homebuying-easy.png","imgix_url":"https://imgix.cosmicjs.com/e887b2a0-2b74-11eb-8245-31a0d5eed227-clever-makes-homebuying-easy.png"},"section_1":{"image":{"url":"https://cdn.cosmicjs.com/ee9d2990-2b74-11eb-8245-31a0d5eed227-clever-savings-form.png","imgix_url":"https://imgix.cosmicjs.com/ee9d2990-2b74-11eb-8245-31a0d5eed227-clever-savings-form.png"},"text":"<p><a href=\"https://listwithclever.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Clever</a> was founded in late 2017 on a relatively straightforward premise - help homeowners save on real estate fees when buying or selling a home. The founders, Ben and Luke, wanted to do this while still providing great agent services, and a consistent source of leads to their agents. Working out of an apartment, Clever&#39;s founding team defined a strong culture in its early days. In particular, they cultivated tenacity, a passion for learning, and personal-growth in their team, and those values have served the company well. Today, Clever is a remote team of over 30 employees spread across the United States, all of whom share responsibility for helping hundreds of homeowners save over 26 million in Real Estate fees - so far.</p><p>As Clever was hitting its stride in early 2018, they brought on Donovan King to spearhead their efforts to migrate off of their old WordPress website. Donovan knew they were looking at migrating toward a more modern tech stack. Because Clever&#39;s solutions were handling loads of customer data on-site, in addition to managing their own content, they were not going to be well served by a traditional frontend and CMS. Gatsby and the Jamstack was the future of their site, and they needed a Headless CMS that had the flexibility to grow along with their solution.</p>"},"section_2":{"image":{"url":"https://cdn.cosmicjs.com/3c33eba0-59f4-11eb-9e0f-fd6e504bde0d-clever-screenshot.png","imgix_url":"https://imgix.cosmicjs.com/3c33eba0-59f4-11eb-9e0f-fd6e504bde0d-clever-screenshot.png"},"text":"<p>Selecting a Headless CMS wasn&#39;t an easy decision. Donovan compared Cosmic to some of the leading competitors - Contentful being one - but ultimately, Cosmic came out on top. Why? Donovan says among other things, he liked our free trial options; because he was <a href=\"https://www.cosmicjs.com/pricing\">able to play around with the free personal plan</a>, he realized the MVP features they&#39;d be setting up would work best on an unopinionated, no-holds-barred CMS like Cosmic.</p><p>As Clever has rapidly grown, so too have their web applications. Cosmic has kept pace with their solutions the whole way. As they began managing more of their website content through Cosmic, Clever made use of Cosmic&#39;s plugin features to support their content team in their web content creation. Donovan decided he needed a more complex set of scripting libraries for Clever, and Cosmic&#39;s API access provided him everything he needed. Today, Clever is managing all of their website content through Cosmic, and is rapidly expanding into one of the leading real estate tech companies in the industry.</p>"},"testimonial_section":{"image":{"url":"https://cdn.cosmicjs.com/fcc9dae0-2b74-11eb-8245-31a0d5eed227-clever-square-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/fcc9dae0-2b74-11eb-8245-31a0d5eed227-clever-square-logo.jpg"},"author":"Donovan King - Lead Front-end Engineer","text":"One thing that's fantastic about Cosmic is the Customer Service. There have been several occasions where we had a direct line via Slack to the CEO and Cosmic had changes pushed the same day. One time I think they had a hotfix for us live to their servers in less than 45 minutes! Currently, Cosmic is the primary route for how we're publishing content - due to how flexible it is, how unopinionated it is about data schema, and other features like that. We've been able to implement some pretty complex structures on top of it. Our website structure, individual components, and much more are built in Cosmic."},"featured_on_home":false}},{"_id":"5ef38693de201700072ef9d7","slug":"headless-cms-comparison-home","title":"Headless CMS Comparison Home","content":"<p>The purpose of this Headless CMS comparison page is to outline the differences between the Cosmic Headless CMS and a traditional installed CMS. By comparing technology, maintenance, security, features, and cost analysis, it is our goal to show you the benefits and tradeoffs to help you decide if the Cosmic Headless CMS is the right solution for your team.</p>","metafields":[{"children":null,"type":"file","title":"Logo","key":"logo","id":"vWHwCupBhR","value":"5abbde00-b564-11ea-a2b3-f17f1f2fdbda-wordpress-headless-cms.jpg","url":"https://cdn.cosmicjs.com/5abbde00-b564-11ea-a2b3-f17f1f2fdbda-wordpress-headless-cms.jpg","imgix_url":"https://imgix.cosmicjs.com/5abbde00-b564-11ea-a2b3-f17f1f2fdbda-wordpress-headless-cms.jpg"},{"children":null,"type":"textarea","title":"Tech","key":"tech","id":"EAyZgOIEWF","value":"LAMP: Linux, Apache, MySQL database, PHP."},{"children":null,"type":"textarea","title":"Scalability","key":"scalability","id":"x18JDtGCfS","value":"Does not scale easily. Limited by your servers, hosting provider, and budget."},{"children":null,"type":"textarea","title":"Security","key":"security","id":"ahkYpcaiv1","value":"You manage the security yourself. No default data encryption at rest or in transit."},{"children":null,"type":"textarea","title":"Maintenance","key":"maintenance","id":"W6tAppjiz6","value":"You deploy, host, and maintain everything yourself. Along with your application and content, you need to maintain updates and security for your CMS system."},{"children":null,"type":"textarea","title":"Caching","key":"caching","id":"avXekcOhkk","value":"No caching included out of the box."},{"children":null,"type":"textarea","title":"Media CDN","key":"media_cdn","id":"20sex59kzp","value":"No CDN included out of the box."},{"children":null,"type":"textarea","title":"Image Processing","key":"image_processing","id":"ZwXLHLbjbj","value":"Manually manage your own image sizes and optimizations."},{"children":null,"type":"textarea","title":"Extendability","key":"extendability","id":"hG2Ffk8pnr","value":"Themes and plugins."},{"children":null,"type":"textarea","title":"Front end","key":"front_end","id":"jbAFGYWqcX","value":"Front end is coupled with backend CMS."},{"children":null,"type":"textarea","title":"Number of Projects","key":"number_of_projects","id":"057LDyc7Ne","value":"One login, one website."},{"children":null,"type":"html-textarea","title":"Costs","key":"costs","id":"nn454l5GQ7","value":"<p>You will need to hire developer resources. Average salary of a full-stack developer is <a href=\"https://neuvoo.com/salary/?job=Full+Stack+Developer\" target=\"_blank\">$111,600 per year</a>. You may need to hire 1-3 developers to maintain the CMS.</p>"},{"children":null,"type":"text","title":"Vendor Name","key":"vendor_name","id":"sUi2f8xIXQ","value":"Traditional CMS"},{"children":null,"type":"switch","title":"Include in link list","key":"include_in_link_list","id":"xoN7TUQtJs","value":false,"options":"yes,no"},{"children":null,"type":"text","title":"Cost Value","key":"cost_value","id":"dHyCTj9bWH","value":"$223,200"},{"children":null,"type":"text","title":"Cost Text","key":"cost_text","id":"KGAOTZOyTy","value":"per year"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"cms-competitors","created":"2020-06-24T17:00:03.069Z","created_at":"2020-06-24T17:00:03.069Z","modified_at":"2020-06-30T18:57:24.069Z","status":"published","locale":null,"modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-30T18:57:24.069Z","unpublish_at":null,"order":1,"metadata":{"logo":{"url":"https://cdn.cosmicjs.com/5abbde00-b564-11ea-a2b3-f17f1f2fdbda-wordpress-headless-cms.jpg","imgix_url":"https://imgix.cosmicjs.com/5abbde00-b564-11ea-a2b3-f17f1f2fdbda-wordpress-headless-cms.jpg"},"tech":"LAMP: Linux, Apache, MySQL database, PHP.","scalability":"Does not scale easily. Limited by your servers, hosting provider, and budget.","security":"You manage the security yourself. No default data encryption at rest or in transit.","maintenance":"You deploy, host, and maintain everything yourself. Along with your application and content, you need to maintain updates and security for your CMS system.","caching":"No caching included out of the box.","media_cdn":"No CDN included out of the box.","image_processing":"Manually manage your own image sizes and optimizations.","extendability":"Themes and plugins.","front_end":"Front end is coupled with backend CMS.","number_of_projects":"One login, one website.","costs":"<p>You will need to hire developer resources. Average salary of a full-stack developer is <a href=\"https://neuvoo.com/salary/?job=Full+Stack+Developer\" target=\"_blank\">$111,600 per year</a>. You may need to hire 1-3 developers to maintain the CMS.</p>","vendor_name":"Traditional CMS","include_in_link_list":false,"cost_value":"$223,200","cost_text":"per year"}},{"_id":"6421de49294c3f00080fc8f1","order":1,"slug":"cosmic-dashboard-now-in-public-beta","title":"Cosmic dashboard now in public beta","content":"<p><img src=\"https://imgix.cosmicjs.com/80d92080-ccdf-11ed-a5c3-fb6dd2500767-cosmic-public-beta.png?w=2000&auto=format\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>We are happy to announce the public beta release of the <a href=\"https://beta.cosmicjs.com/signup\" rel=\"noopener noreferrer\" target=\"_blank\">new Cosmic dashboard</a>. You can now sign up and begin using the new dashboard and API v3 for your production applications.</p><p>Click the link below to begin onboarding to the new dashboard. Read on to learn more about all of the new updates and features.</p><p style=\"text-align: center;\"><a href=\"https://beta.cosmicjs.com/signup\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://imgix.cosmicjs.com/40ef6560-9e95-11ed-93ee-cb9a2cd68754-cosmic-button.png?w=600&auto=format\" style=\"width: 200px;\" class=\"fr-fic fr-dib\"></a></p><h3><br>Dashboard updates</h3><p>This release includes the following updates to the dashboard.</p><p><strong>New markdown editor</strong><br>We have completely redesigned our markdown Metafield editor. New features include:</p><ul><li>A handy toolbar for easy access to text editing tools.</li><li>Integration with your Bucket media library for easy media access.</li><li>Full screen focus mode with split pane preview.<br><br></li></ul><p><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/661c6cc0-cd75-11ed-94ed-95257c20dd73-markdown-focus.mp4\" loop=\"\" muted=\"\" playsinline=\"\" src=\"\">Your browser does not support HTML5 video.</video></span></p><p><strong>Object type organization</strong><br>It&#39;s now easier than ever to organize your Object types into folders. With the ability to add / edit / remove Object types from folders from the Object type table and edit view, this should come as a welcome feature for customers who manage lots of Object types.<br><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/dab6dd30-cf1a-11ed-96c3-ab3134a4c131-content-folders.mp4\" loop=\"\" muted=\"\" playsinline=\"\" src=\"\">Your browser does not support HTML5 video.</video></span></p><h3>More updates</h3><p>Along with the public beta release of the dashboard, we have a few more exciting announcements.</p><p><strong>New Cosmic logo</strong><br>We have updated our logo to better tell our story as both a technical and creative leader in the content management space. Go to the <a href=\"https://www.cosmicjs.com/about\">about page</a> to download the latest brand assets.</p><p><img src=\"https://imgix.cosmicjs.com/a28c6df0-c98c-11ed-b01d-23d7b265c299-cosmicwordmarkonlight.svg\" style=\"width: 100%; max-width: 600px;\" class=\"fr-fic fr-dib\"></p><p><br><strong>New documentation</strong><br>We have a beautiful <a href=\"https://docs-v3.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">new documentation site</a> to accompany the new dashboard. Browse the new dashboard features and learn about the latest capabilities with the new Cosmic API v3.</p><p><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/c1d2aee0-cccf-11ed-a5c3-fb6dd2500767-docs-v3.mp4\" loop=\"\" muted=\"\" playsinline=\"\" src=\"\">Your browser does not support HTML5 video.</video></span></p><p><br><strong>Cosmic JavaScript SDK</strong><br>We have a new <a href=\"https://www.npmjs.com/package/@cosmicjs/sdk\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic JavaScript SDK</a> which comes with lots of updates and improvements including:</p><ul><li>Limited TypeScript support.</li><li>Simpler config and Bucket methods.</li><li>Improved methods for <code>objects.findOne</code>, <code>objects.updateOne</code>, <code>objectTypes</code> methods and more.</li><li>Much lighter package size compared to the old NPM module (only 23kb unpacked!).</li></ul><p>Install with:</p><pre>npm i @cosmicjs/sdk</pre><p><br>Go to the <a href=\"https://www.npmjs.com/package/@cosmicjs/sdk\" rel=\"noopener noreferrer\" target=\"_blank\">NPM website page for the Cosmic JavaScript SDK</a> for more info and read the <a href=\"https://www.cosmicjs.com/changelog/new-dashboard-public-beta-release\">public beta release changelog</a> to learn more details regarding these updates.</p><p>We&#39;re excited to onboard your team to the new dashboard and help you integrate your content using the new API resources. If you would like dedicated help with migration, please contact <a href=\"mailto:support@cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic support</a> with subject &quot;Dashboard migration help&quot; and we will follow up with assistance. We can&#39;t wait to see what you build!</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"vTPlun9p4R","value":"5ffa1d1e0046b0000799cb7b","required":true,"object_type":"authors","object":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"hefNAoa29C","value":"<p>We are excited to announce the new Cosmic dashboard is now available in <a href=\"https://beta.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">public beta</a>.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"22Pdkx9ov4","value":"80d92080-ccdf-11ed-a5c3-fb6dd2500767-cosmic-public-beta.png","url":"https://cdn.cosmicjs.com/80d92080-ccdf-11ed-a5c3-fb6dd2500767-cosmic-public-beta.png","imgix_url":"https://imgix.cosmicjs.com/80d92080-ccdf-11ed-a5c3-fb6dd2500767-cosmic-public-beta.png"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"UbH2vcFJ3x","value":"We are excited to announce the new Cosmic dashboard is now available in public beta."},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"alQvUvqXkK","value":"2023-04-04"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2023-03-27T18:19:52.943Z","created_by":"5357ef811693be2118000001","modified_at":"2023-04-04T14:55:20.719Z","created":"2023-03-27T18:19:52.943Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/80d92080-ccdf-11ed-a5c3-fb6dd2500767-cosmic-public-beta.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2023-04-04T14:55:20.719Z","metadata":{"author":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}}},"teaser":"<p>We are excited to announce the new Cosmic dashboard is now available in <a href=\"https://beta.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">public beta</a>.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/80d92080-ccdf-11ed-a5c3-fb6dd2500767-cosmic-public-beta.png","imgix_url":"https://imgix.cosmicjs.com/80d92080-ccdf-11ed-a5c3-fb6dd2500767-cosmic-public-beta.png"},"seo_meta_description":"We are excited to announce the new Cosmic dashboard is now available in public beta.","published_date":"2023-04-04"}},{"_id":"5f6b848200e4af0007910981","order":1,"slug":"vuetify-builds-powerful-applications-cosmic","title":"Vuetify Uses Cosmic to Super-Charge Shopify Content Management","content":"<p><a href=\"https://vuetifyjs.com/en/\" rel=\"noopener noreferrer\" target=\"_blank\"><img class=\"fr-dib\" src=\"https://imgix.cosmicjs.com/08b5b190-0270-11eb-be35-433e751f849e-github-social-preview.png?w=1200&auto=fomat\" style=\"width: 100%;\" alt=\"Vuetify is a Vue UI library that allows users to create amazing applications\" data-name=\"github-social-preview.png\"></a></p><p><br>Since its founding in 2016, <a href=\"https://vuetifyjs.com/en/\">Vuetify</a> has rapidly grown to become one of the leading component libraries for creating powerful <a href=\"https://vuejs.org/\" rel=\"noopener noreferrer\" target=\"_blank\">Vue</a> applications. Led by founder <a href=\"https://www.cosmicjs.com/blog/developer-spotlight-john-leider-of-vuetify\" rel=\"noopener noreferrer\" target=\"_blank\">John Leider</a>, the Vuetify teams&#39; meticulous focus on creating systems that are intuitive and easy-to-use has allowed them to quickly realize great success in their space.</p><p>But in early 2020, Vuetify had a problem. Their online store was completely integrated into Shopify&#39;s back-end platform, and getting this API to communicate with the front-end of their website was far too slow and required too many queries.</p><p><br></p><p><img src=\"https://imgix.cosmicjs.com/a87d79f0-028a-11eb-be35-433e751f849e-vuetify-cosmic.png?w=1200&auto=fomat\" style=\"width: 100%;\" alt=\"Vuetify's marketplace is faster and easier to maintain with a Cosmic Headless CMS\" class=\"fr-fic fr-dib\"></p><p style=\"text-align: center;\"><em>Vuetify&#39;s verbose marketplace is one of their strongest features, but managing it through the Shopify backend was cumbersome and slow, so they turned to Cosmic</em></p><p><br>On top of that, due to Vuetify&#39;s rapid expansion in recent years, they were now managing all different kinds of documents, affiliate links, and sponsors in their original code base. This was quickly becoming sub-optimal. Vuetify needed to find an API that matched their appreciation for intuitive design, and integrated all the flexible features they required. After evaluating their options, nothing seemed like the right combination of those values for Vuetify, except for Cosmic.<br><br></p><div style=\"display: block; text-align: center;\"><img src=\"https://imgix.cosmicjs.com/ca19b490-01b6-11eb-be35-433e751f849e-lux.jpg?w=1200&auto=format\" style=\"width: 100%;\" alt=\"Vuetify enables their customers to build diverse and powerful applications\" class=\"fr-dib\"></div><p style=\"text-align: center;\"><em>Vuetify allows its clients to build diverse and powerful applications,&nbsp;</em><br><em>and Cosmic helps them manage various data types to do so</em></p><p><br>Cosmic&#39;s focus on catering the UI to developers and apparent intuition of common development challenges meant that Vuetify was able to quickly implement the fixes they needed to get data pulled out of the Shopify back-end and onto their front-end site. As CEO &amp; founder John Leider put it:<br><br></p><blockquote><p>&quot;It was literally 10 to 15 minutes from taking the SDK, to getting the data I needed, to consuming it. We cut our server response time down from 300-400 ms to about 50 ms. Instead of needing to query the Shopify API, now we only need to query\r\nCosmic. The baseline just works out-of-the-box, and there&#39;s considerable more information and documentation if you need it.&quot;</p><p><em>&mdash; John Leider, Chief Executive Officer</em></p></blockquote><p><br>Today, Vuetify is primarily using Cosmic to clean up their code base, reduce the need for commits, trigger a webhook to cache their Shopify products, and a handful of other tasks that has optimized both their user-experience and their workflow.</p>","metafields":[{"children":null,"type":"text","title":"Company","key":"company","id":"UQcL36yJNo","value":"Vuetify"},{"children":null,"type":"text","title":"Industry Type","key":"industry_type","id":"WCtKDiuff0","value":"Internet Technology"},{"children":null,"type":"textarea","title":"Teaser","key":"teaser","id":"YuQ6hy2e1d","value":"Vuetify has rapidly become one of the leading component libraries for Vue applications, but their back-end was a headache to manage. Learn how Cosmic helped them solve their challenge, and a few more along the way."},{"children":null,"type":"file","title":"Logo","key":"logo","id":"Kcbdwh7RgM","value":"08b5b190-0270-11eb-be35-433e751f849e-github-social-preview.png","url":"https://cdn.cosmicjs.com/08b5b190-0270-11eb-be35-433e751f849e-github-social-preview.png","imgix_url":"https://imgix.cosmicjs.com/08b5b190-0270-11eb-be35-433e751f849e-github-social-preview.png"},{"children":null,"type":"text","title":"Redirect Path","key":"redirect_path","id":"th15yqrwkhn0ja4ft3co","value":"/customers/vuetify"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2020-09-23T17:23:14.662Z","created_by":"5f1352f9d677c00008cf38b0","modified_at":"2020-11-05T20:42:55.330Z","created":"2020-09-23T17:23:14.662Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/08b5b190-0270-11eb-be35-433e751f849e-github-social-preview.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2020-11-05T20:42:55.330Z","metadata":{"company":"Vuetify","industry_type":"Internet Technology","teaser":"Vuetify has rapidly become one of the leading component libraries for Vue applications, but their back-end was a headache to manage. Learn how Cosmic helped them solve their challenge, and a few more along the way.","logo":{"url":"https://cdn.cosmicjs.com/08b5b190-0270-11eb-be35-433e751f849e-github-social-preview.png","imgix_url":"https://imgix.cosmicjs.com/08b5b190-0270-11eb-be35-433e751f849e-github-social-preview.png"},"redirect_path":"/customers/vuetify"}},{"_id":"5d235a2a6302053e6c92d996","slug":"headless-cms-for-blogs","title":"Headless CMS for Blogs","content":"<p>The Cosmic Headless CMS provides a flexible and scalable content management experience for developers and content creators alike. Companies manage their blog content using the Cosmic CMS because it&rsquo;s intuitive to manage content, approval workflows and team members. With features like <a href=\"https://www.cosmicjs.com/headless-cms/revision-history\">Revision History</a>, <a href=\"https://www.cosmicjs.com/headless-cms/content-preview\">Content Preview</a> and <a href=\"https://www.cosmicjs.com/headless-cms/scheduled-publishing\">Scheduled Publishing</a>, your team can build apps and manage content faster, together.&nbsp;</p><p><br>Whether you&#39;re building a new blog or migrating an existing one, Cosmic provides easy <a href=\"https://www.cosmicjs.com/headless-cms/content-modeling\">content modeling</a> and migration tools to help you get started.&nbsp;</p>","metafields":[{"children":null,"type":"text","title":"Solution Name","key":"solution_name","id":"wrrNtMopy4","value":"Blogs"},{"children":null,"type":"file","title":"Image","key":"image","id":"ZJpUv99pj7","value":"ec1d5de0-9dc0-11e9-a5b4-e5df9f8049d3-Hackernoon.png","url":"https://cdn.cosmicjs.com/ec1d5de0-9dc0-11e9-a5b4-e5df9f8049d3-Hackernoon.png","imgix_url":"https://imgix.cosmicjs.com/ec1d5de0-9dc0-11e9-a5b4-e5df9f8049d3-Hackernoon.png"},{"children":null,"type":"objects","title":"Case Studies","key":"case_studies","id":"SRzTWZot04","value":"5c8a83a0792f9825b48d8133,5a2455620cb0e3291c00002e,59f102cbd4de657279002f97","object_type":"case-studies","objects":[{"_id":"5c8a83a0792f9825b48d8133","slug":"movespring-delivers-health-resources-using-cosmic-js","title":"MoveSpring Delivers Health Resources using Cosmic","content":"<p dir=\"ltr\"><a href=\"https://movespring.com\" rel=\"noopener noreferrer\" target=\"_blank\">MoveSpring</a> is a fun, easy-to-use activity and steps challenge platform. Step your way to success with quick onboarding, real-time scoring, and flexible plan options. MoveSpring is used by organizations like Best Buy, Deloitte and the American Cancer Society to make health a priority, and fun, for their employees.&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/151c3220-4678-11e9-bbe9-d7e354f499a1-MoveSpring.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">MoveSpring manages multiple content resource sections for its users, broken out by Product, Wellness, Tips and Tricks as well as Technology. The team needed a way to easily add blog and help sections that a non-technical content creator could manage. They were able to quickly model and create their content, integrate the content with their website and add their content creators to start publishing and managing dynamic content.&nbsp;</p><p dir=\"ltr\"><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/2e47ad60-4678-11e9-939f-33137870c12d-product-hero-image2x.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&quot;We previously used WordPress for our blog content, but found that we really wanted to utilize the same toolset (React / GraphQL) and have the same look and feel as the rest of our site, which can be challenging for a developer not familiar with WordPress.&nbsp;</p><p>Additionally, we have other dynamic content we would like our Customer Success Managers and Sales team to drive without relying on our development team to build and deploy. After discovering Cosmic, our developer was able to get our new blog up and running within days. Cosmic worked exactly how we hoped it would.&rdquo;</p><p><cite>&mdash; John Contreras, CEO &nbsp;</cite></p></blockquote>","metafields":[{"children":null,"type":"text","title":"Company","key":"company","id":"g8E7TAzNzb","value":"MoveSpring"},{"children":null,"type":"text","title":"Industry Type","key":"industry_type","id":"IazxVO2F44","value":"Health and Wellness"},{"children":null,"type":"textarea","title":"Teaser","key":"teaser","id":"MdNSCJJ6KM","value":"From the creators of Stridekick, MoveSpring is a fun, easy-to-use activity challenge platform. Step your way to success with quick onboarding, real-time scoring, and flexible plan options. MoveSpring is used by organizations like Best Buy, Deloitte and the American Cancer Society to make health a priority, and fun, for their employees. \n\n\n\n"},{"children":null,"type":"file","title":"Logo","key":"logo","id":"z7uTNVr5hZ","value":"ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg","url":"https://cdn.cosmicjs.com/ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg"},{"children":null,"type":"text","title":"Redirect Path","key":"redirect_path","id":"th15yqrwkhn0ja4ft3co","value":"/customers/movespring"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2019-03-14T16:38:56.354Z","status":"published","modified_at":"2020-11-05T20:43:27.287Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-11-05T20:43:27.287Z","unpublish_at":null},{"_id":"5a2455620cb0e3291c00002e","slug":"acculevel-deploys-a-blog","title":"Acculevel Deploys a Blog","content":"<p dir=\"ltr\"><a href=\"https://acculevel.com\" rel=\"noopener noreferrer\" target=\"_blank\">Acculevel</a> is Your Foundation Expert. Serving the Midwest United States for the last 20 years, Acculevel knows what it means to serve and do a job right. Customer retention, reviews and loyalty are the name of their game, so to optimize these efforts and keep customers engaged and informed, Acculevel is scaling up their digital presence through its upcoming website, a new mobile application and more. Led by a new Chief Technology Officer overseeing developers and content editors, here&#39;s how Acculevel is ensuring their own foundation is solid.<br><br>Mired in an installed <a href=\"https://hackernoon.com/cosmic-js-vs-wordpress-668608df4e22\" rel=\"noopener noreferrer\" target=\"_blank\">WordPress</a> system was leaving Acculevel without the flexibility needed to nimbly build and publish content campaigns to engage with customers. Acculevel&#39;s tech team is currently building out a new zippy website built on a <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a> stack, complete with API integrations for ACH Authentication (Plaid) and Payment Gateway (Stripe). Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editors to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/516cb890-daa8-11e7-92aa-b5a1b0875421-21761700_1534030483286380_3096937493413845441_n.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a seamless on-boarding experience for creating a Bucket to manage blog content for our growing organization. We needed a programming-language agnostic API to manage content both within our existing WordPress website as well as within our new Node.js web application. Cosmic fit the bill perfectly with its simple Object schema and powerful Metafields. With Cosmic, content is just data and you can pull it however you&#39;d like, wherever you like, allowing us &nbsp;to build new tools in the future such as survey tools, employee forums and more.&rdquo;</p><p><cite>&mdash; Dylan Marsh, Chief Technology Officer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Acculevel ","key":"company","title":"Company","type":"text","children":null},{"value":"Construction","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editor to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","imgix_url":"https://imgix.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-12-03T19:49:54.515Z","created_by":"5716b504e9c686d006000073","created":"2017-12-03T19:49:54.515Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null},{"_id":"59f102cbd4de657279002f97","slug":"datalyze-solutions-adds-blog-and-job-feeds","title":"Datalyze Solutions Adds a Blog Feed","content":"<p>Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier. That&#39;s why <a href=\"https://www.datalyze-solutions.com\" rel=\"noopener noreferrer\" target=\"_blank\">Datalyze Solutions</a> chooses Cosmic to deliver its content from the cloud for its Blog feeds.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/564c8f40-ca4d-11e7-a5c4-d31978c51f26-Screen Shot 2017-11-15 at 3.38.13 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic has been in use at Datalyze Solutions for more than one and a half years. Cosmic has become a critically important tool for us to publish blog posts quickly and easily. This way, our customers and partners can stay informed about the latest news from our company and other industry-relevant information. Cosmic offers exactly the flexibility and features we really need as content editors!&quot;</p><p>&mdash; Carolin Bauer, Content Editor and Marketing Manager</p></blockquote>","metafields":[{"value":"Datalyze Solutions","key":"company","title":"Company","type":"text","children":null},{"value":"Internet","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier.","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","imgix_url":"https://imgix.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-25T21:31:55.033Z","created_by":"5716b504e9c686d006000073","created":"2017-10-25T21:31:55.033Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null}]},{"children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"simple-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"react-static-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"simple-vue-blog","type":"text","required":false}]}],"type":"repeater","title":"App Slugs","key":"app_slugs","id":"pFbkY7SWFv","value":"simple-blog","repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}]},{"children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"onesignal","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"unsplash-photos","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"wordpress-importer","type":"text","required":false}]}],"type":"repeater","title":"Extension Slugs","key":"extension_slugs","id":"3sj4w3beMT","value":"onesignal","repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}]},{"children":null,"type":"html-textarea","title":"Testimonial","key":"testimonial","id":"NErgVY5OCM","value":"<p>&quot;When the opportunity to work with Cosmic came up, I jumped on the opportunity. Using an API-first content management platform like Cosmic was perfect (and super simple) for connecting best-in-class services like Algolia for search and SendGrid for email. &nbsp;In terms of providing the framework for teams to quickly build quality professional apps, Cosmic is definitely onto something.&rdquo;</p>"},{"children":null,"type":"text","title":"Testimonial Credit","key":"testimonial_credit","id":"n74ogsWZ8P","value":"David Smooke, CEO at Hacker Noon"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created":"2019-07-08T14:58:50.360Z","created_at":"2019-07-08T14:58:50.360Z","modified_at":"2020-08-10T14:05:12.245Z","status":"published","locale":null,"published_at":"2020-06-16T20:50:30.706Z","modified_by":"5357ef811693be2118000001","publish_at":null,"order":1,"unpublish_at":null,"metadata":{"solution_name":"Blogs","image":{"url":"https://cdn.cosmicjs.com/ec1d5de0-9dc0-11e9-a5b4-e5df9f8049d3-Hackernoon.png","imgix_url":"https://imgix.cosmicjs.com/ec1d5de0-9dc0-11e9-a5b4-e5df9f8049d3-Hackernoon.png"},"case_studies":[{"_id":"5c8a83a0792f9825b48d8133","slug":"movespring-delivers-health-resources-using-cosmic-js","title":"MoveSpring Delivers Health Resources using Cosmic","content":"<p dir=\"ltr\"><a href=\"https://movespring.com\" rel=\"noopener noreferrer\" target=\"_blank\">MoveSpring</a> is a fun, easy-to-use activity and steps challenge platform. Step your way to success with quick onboarding, real-time scoring, and flexible plan options. MoveSpring is used by organizations like Best Buy, Deloitte and the American Cancer Society to make health a priority, and fun, for their employees.&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/151c3220-4678-11e9-bbe9-d7e354f499a1-MoveSpring.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">MoveSpring manages multiple content resource sections for its users, broken out by Product, Wellness, Tips and Tricks as well as Technology. The team needed a way to easily add blog and help sections that a non-technical content creator could manage. They were able to quickly model and create their content, integrate the content with their website and add their content creators to start publishing and managing dynamic content.&nbsp;</p><p dir=\"ltr\"><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/2e47ad60-4678-11e9-939f-33137870c12d-product-hero-image2x.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&quot;We previously used WordPress for our blog content, but found that we really wanted to utilize the same toolset (React / GraphQL) and have the same look and feel as the rest of our site, which can be challenging for a developer not familiar with WordPress.&nbsp;</p><p>Additionally, we have other dynamic content we would like our Customer Success Managers and Sales team to drive without relying on our development team to build and deploy. After discovering Cosmic, our developer was able to get our new blog up and running within days. Cosmic worked exactly how we hoped it would.&rdquo;</p><p><cite>&mdash; John Contreras, CEO &nbsp;</cite></p></blockquote>","metafields":[{"children":null,"type":"text","title":"Company","key":"company","id":"g8E7TAzNzb","value":"MoveSpring"},{"children":null,"type":"text","title":"Industry Type","key":"industry_type","id":"IazxVO2F44","value":"Health and Wellness"},{"children":null,"type":"textarea","title":"Teaser","key":"teaser","id":"MdNSCJJ6KM","value":"From the creators of Stridekick, MoveSpring is a fun, easy-to-use activity challenge platform. Step your way to success with quick onboarding, real-time scoring, and flexible plan options. MoveSpring is used by organizations like Best Buy, Deloitte and the American Cancer Society to make health a priority, and fun, for their employees. \n\n\n\n"},{"children":null,"type":"file","title":"Logo","key":"logo","id":"z7uTNVr5hZ","value":"ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg","url":"https://cdn.cosmicjs.com/ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg"},{"children":null,"type":"text","title":"Redirect Path","key":"redirect_path","id":"th15yqrwkhn0ja4ft3co","value":"/customers/movespring"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2019-03-14T16:38:56.354Z","status":"published","modified_at":"2020-11-05T20:43:27.287Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-11-05T20:43:27.287Z","unpublish_at":null,"metadata":{"company":"MoveSpring","industry_type":"Health and Wellness","teaser":"From the creators of Stridekick, MoveSpring is a fun, easy-to-use activity challenge platform. Step your way to success with quick onboarding, real-time scoring, and flexible plan options. MoveSpring is used by organizations like Best Buy, Deloitte and the American Cancer Society to make health a priority, and fun, for their employees. \n\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg"},"redirect_path":"/customers/movespring"}},{"_id":"5a2455620cb0e3291c00002e","slug":"acculevel-deploys-a-blog","title":"Acculevel Deploys a Blog","content":"<p dir=\"ltr\"><a href=\"https://acculevel.com\" rel=\"noopener noreferrer\" target=\"_blank\">Acculevel</a> is Your Foundation Expert. Serving the Midwest United States for the last 20 years, Acculevel knows what it means to serve and do a job right. Customer retention, reviews and loyalty are the name of their game, so to optimize these efforts and keep customers engaged and informed, Acculevel is scaling up their digital presence through its upcoming website, a new mobile application and more. Led by a new Chief Technology Officer overseeing developers and content editors, here&#39;s how Acculevel is ensuring their own foundation is solid.<br><br>Mired in an installed <a href=\"https://hackernoon.com/cosmic-js-vs-wordpress-668608df4e22\" rel=\"noopener noreferrer\" target=\"_blank\">WordPress</a> system was leaving Acculevel without the flexibility needed to nimbly build and publish content campaigns to engage with customers. Acculevel&#39;s tech team is currently building out a new zippy website built on a <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a> stack, complete with API integrations for ACH Authentication (Plaid) and Payment Gateway (Stripe). Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editors to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/516cb890-daa8-11e7-92aa-b5a1b0875421-21761700_1534030483286380_3096937493413845441_n.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a seamless on-boarding experience for creating a Bucket to manage blog content for our growing organization. We needed a programming-language agnostic API to manage content both within our existing WordPress website as well as within our new Node.js web application. Cosmic fit the bill perfectly with its simple Object schema and powerful Metafields. With Cosmic, content is just data and you can pull it however you&#39;d like, wherever you like, allowing us &nbsp;to build new tools in the future such as survey tools, employee forums and more.&rdquo;</p><p><cite>&mdash; Dylan Marsh, Chief Technology Officer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Acculevel ","key":"company","title":"Company","type":"text","children":null},{"value":"Construction","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editor to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","imgix_url":"https://imgix.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-12-03T19:49:54.515Z","created_by":"5716b504e9c686d006000073","created":"2017-12-03T19:49:54.515Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"company":"Acculevel ","industry_type":"Construction","teaser":"Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editor to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","imgix_url":"https://imgix.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg"}}},{"_id":"59f102cbd4de657279002f97","slug":"datalyze-solutions-adds-blog-and-job-feeds","title":"Datalyze Solutions Adds a Blog Feed","content":"<p>Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier. That&#39;s why <a href=\"https://www.datalyze-solutions.com\" rel=\"noopener noreferrer\" target=\"_blank\">Datalyze Solutions</a> chooses Cosmic to deliver its content from the cloud for its Blog feeds.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/564c8f40-ca4d-11e7-a5c4-d31978c51f26-Screen Shot 2017-11-15 at 3.38.13 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic has been in use at Datalyze Solutions for more than one and a half years. Cosmic has become a critically important tool for us to publish blog posts quickly and easily. This way, our customers and partners can stay informed about the latest news from our company and other industry-relevant information. Cosmic offers exactly the flexibility and features we really need as content editors!&quot;</p><p>&mdash; Carolin Bauer, Content Editor and Marketing Manager</p></blockquote>","metafields":[{"value":"Datalyze Solutions","key":"company","title":"Company","type":"text","children":null},{"value":"Internet","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier.","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","imgix_url":"https://imgix.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-25T21:31:55.033Z","created_by":"5716b504e9c686d006000073","created":"2017-10-25T21:31:55.033Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"metadata":{"company":"Datalyze Solutions","industry_type":"Internet","teaser":"Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier.","logo":{"url":"https://cdn.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","imgix_url":"https://imgix.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png"}}}],"app_slugs":[{"slug":"simple-blog"},{"slug":"react-static-blog"},{"slug":"simple-vue-blog"}],"extension_slugs":[{"slug":"onesignal"},{"slug":"unsplash-photos"},{"slug":"wordpress-importer"}],"testimonial":"<p>&quot;When the opportunity to work with Cosmic came up, I jumped on the opportunity. Using an API-first content management platform like Cosmic was perfect (and super simple) for connecting best-in-class services like Algolia for search and SendGrid for email. &nbsp;In terms of providing the framework for teams to quickly build quality professional apps, Cosmic is definitely onto something.&rdquo;</p>","testimonial_credit":"David Smooke, CEO at Hacker Noon"}},{"_id":"5fac567a0a5526000718655e","order":2,"slug":"boundary-la","title":"Boundary LA","content":"","metafields":[{"children":null,"type":"file","title":"Logo","key":"logo","id":"HyrIETvAK7","value":"160cc530-2463-11eb-b940-89e6869fdeb0-5ef69560902e8c94aa7490c5BOUNDARY-logo-dark.svg","url":"https://cdn.cosmicjs.com/160cc530-2463-11eb-b940-89e6869fdeb0-5ef69560902e8c94aa7490c5BOUNDARY-logo-dark.svg","imgix_url":"https://imgix.cosmicjs.com/160cc530-2463-11eb-b940-89e6869fdeb0-5ef69560902e8c94aa7490c5BOUNDARY-logo-dark.svg"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"LAzfLA0cy5","value":"Development and Design Agency BoundaryLA uses Cosmic to win over a Medical Services client"},{"children":null,"type":"text","title":"Brand Color","key":"brand_color","id":"xjQnz1p8w3","value":"#f27e20"},{"children":null,"type":"file","title":"Background Image","key":"background_image","id":"O3XbbIHFl0","value":"a9712b90-2472-11eb-bc9c-1da9ebee7b3c-www.boundaryla.comapproach-hires.png","url":"https://cdn.cosmicjs.com/a9712b90-2472-11eb-bc9c-1da9ebee7b3c-www.boundaryla.comapproach-hires.png","imgix_url":"https://imgix.cosmicjs.com/a9712b90-2472-11eb-bc9c-1da9ebee7b3c-www.boundaryla.comapproach-hires.png"},{"children":null,"type":"text","title":"Industry","key":"industry","id":"bwsQnIQcBU","value":"Marketing"},{"children":null,"type":"text","title":"Product","key":"product","id":"9yjbZnGKuE","value":"Agency Services"},{"children":null,"type":"file","title":"Main Image","key":"main_image","id":"gs0adV5Be3","value":"89a457a0-2473-11eb-92c7-1dc18636053a-boundary-collage.png","url":"https://cdn.cosmicjs.com/89a457a0-2473-11eb-92c7-1dc18636053a-boundary-collage.png","imgix_url":"https://imgix.cosmicjs.com/89a457a0-2473-11eb-92c7-1dc18636053a-boundary-collage.png"},{"children":[{"children":null,"type":"file","title":"Image","key":"image","id":"5uIMvdNWKM","value":"cb622060-2463-11eb-b940-89e6869fdeb0-boundary-la.png","url":"https://cdn.cosmicjs.com/cb622060-2463-11eb-b940-89e6869fdeb0-boundary-la.png","imgix_url":"https://imgix.cosmicjs.com/cb622060-2463-11eb-b940-89e6869fdeb0-boundary-la.png"},{"children":null,"type":"html-textarea","title":"Text","key":"text","id":"GG3rqARYhg","value":"<p><a href=\"https://www.boundaryla.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Boundary LA</a> is one of the leading design and development agencies on the West Coast. Their designs impress the minds of consumers for hot new brands like MUD/WTR and established monoliths such as Red Bull. Their approach to building applications for their customers blends business research and modern technology solutions with a fiery creativity.</p><p>When Boundary LA was approached to build a new web application for a medical services company, Co-Founder Tyler Leonard knew they would be deploying the app with a headless CMS. He&#39;d used other leading headless CMS services before, but for this app, they broadened their search to find something that allowed for HIPAA Compliance, better mobile integration, and fit the client&#39;s budget.</p><p><br></p><p><br></p>"}],"type":"parent","title":"Section 1","key":"section_1","id":"awfiyfnPYI","value":"<p><a href=\"https://www.boundaryla.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Boundary LA</a> is one of the leading design and development agencies on the West Coast. Their designs impress the minds of consumers for hot new brands like MUD/WTR and established monoliths such as Red Bull. Their approach to building applications for their customers blends business research and modern technology solutions with a fiery creativity.</p><p>When Boundary LA was approached to build a new web application for a medical services company, Co-Founder Tyler Leonard knew they would be deploying the app with a headless CMS. He'd used other leading headless CMS services before, but for this app, they broadened their search to find something that allowed for HIPAA Compliance, better mobile integration, and fit the client's budget.</p><p><br></p><p><br></p>"},{"children":[{"children":null,"type":"file","title":"Image","key":"image","id":"CjkyK8ifer","value":"98d90b70-2465-11eb-b940-89e6869fdeb0-boundarylaapproach.png","url":"https://cdn.cosmicjs.com/98d90b70-2465-11eb-b940-89e6869fdeb0-boundarylaapproach.png","imgix_url":"https://imgix.cosmicjs.com/98d90b70-2465-11eb-b940-89e6869fdeb0-boundarylaapproach.png"},{"children":null,"type":"html-textarea","title":"Text","key":"text","id":"LK7q1IFICj","value":"<p>Fortunately, Cosmic seemed like the perfect solution, and after some internal consideration, Cosmic was the solution BoundaryLA selected. They&#39;ve never looked back. Today, Boundary LA is building on top of their initial application with their headless back-end, and their client is successfully managing their own content through a secure, HIPAA-compliant back-end.</p><p>Mission accomplished.</p>"}],"type":"parent","title":"Section 2","key":"section_2","id":"OihREDUysL","value":"<p>Fortunately, Cosmic seemed like the perfect solution, and after some internal consideration, Cosmic was the solution BoundaryLA selected. They've never looked back. Today, Boundary LA is building on top of their initial application with their headless back-end, and their client is successfully managing their own content through a secure, HIPAA-compliant back-end.</p><p>Mission accomplished.</p>"},{"children":[{"children":null,"type":"file","title":"Image","key":"image","id":"zMgfDHkcqV","value":"70bb6c00-2465-11eb-b940-89e6869fdeb0-tylerleonards.jpg","url":"https://cdn.cosmicjs.com/70bb6c00-2465-11eb-b940-89e6869fdeb0-tylerleonards.jpg","imgix_url":"https://imgix.cosmicjs.com/70bb6c00-2465-11eb-b940-89e6869fdeb0-tylerleonards.jpg"},{"children":null,"type":"text","title":"Author","key":"author","id":"9uygnBzzeI","value":"Tyler Leonard, Co-Founder of BoundaryLA"},{"children":null,"type":"textarea","title":"Text","key":"text","id":"4T1LHHvg07","value":"In this case, we'd be working with a medical application, and needed HIPAA compliance from a mobile-app through to a front-end. This limited other options. We didn't want to use two separate solutions to achieve this. We've continued to build on top of everything we deployed initially. For us, we could go in and flexibly change through different social tools. Our clients have no issues maintaining it either. For the questions we have had, we've sometimes had the CEO respond directly, support all-around has been fantastic."},{"children":null,"type":"textarea","title":"Testimonial Home","key":"testimonial_home","id":"g7ol0v8tp2szrlpdeyz6","object_type":"undefined","value":"\"An all-in-one, HIPPA-compliant back-end that fit the client's budget\""}],"type":"parent","title":"Testimonial Section","key":"testimonial_section","id":"ZpjTztFpFL","value":"Tyler Leonard, Co-Founder of BoundaryLA","state":"open"},{"children":null,"type":"switch","title":"Featured on Home","key":"featured_on_home","id":"jKHapcUEt1","value":true,"options":"yes,no"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"customers","created_at":"2020-11-11T21:24:10.122Z","created_by":"5f8088982aa32f00093977bb","modified_at":"2020-12-18T15:18:18.847Z","created":"2020-11-11T21:24:10.122Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/cb622060-2463-11eb-b940-89e6869fdeb0-boundary-la.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2020-12-18T15:18:18.847Z","metadata":{"logo":{"url":"https://cdn.cosmicjs.com/160cc530-2463-11eb-b940-89e6869fdeb0-5ef69560902e8c94aa7490c5BOUNDARY-logo-dark.svg","imgix_url":"https://imgix.cosmicjs.com/160cc530-2463-11eb-b940-89e6869fdeb0-5ef69560902e8c94aa7490c5BOUNDARY-logo-dark.svg"},"seo_description":"Development and Design Agency BoundaryLA uses Cosmic to win over a Medical Services client","brand_color":"#f27e20","background_image":{"url":"https://cdn.cosmicjs.com/a9712b90-2472-11eb-bc9c-1da9ebee7b3c-www.boundaryla.comapproach-hires.png","imgix_url":"https://imgix.cosmicjs.com/a9712b90-2472-11eb-bc9c-1da9ebee7b3c-www.boundaryla.comapproach-hires.png"},"industry":"Marketing","product":"Agency Services","main_image":{"url":"https://cdn.cosmicjs.com/89a457a0-2473-11eb-92c7-1dc18636053a-boundary-collage.png","imgix_url":"https://imgix.cosmicjs.com/89a457a0-2473-11eb-92c7-1dc18636053a-boundary-collage.png"},"section_1":{"image":{"url":"https://cdn.cosmicjs.com/cb622060-2463-11eb-b940-89e6869fdeb0-boundary-la.png","imgix_url":"https://imgix.cosmicjs.com/cb622060-2463-11eb-b940-89e6869fdeb0-boundary-la.png"},"text":"<p><a href=\"https://www.boundaryla.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Boundary LA</a> is one of the leading design and development agencies on the West Coast. Their designs impress the minds of consumers for hot new brands like MUD/WTR and established monoliths such as Red Bull. Their approach to building applications for their customers blends business research and modern technology solutions with a fiery creativity.</p><p>When Boundary LA was approached to build a new web application for a medical services company, Co-Founder Tyler Leonard knew they would be deploying the app with a headless CMS. He&#39;d used other leading headless CMS services before, but for this app, they broadened their search to find something that allowed for HIPAA Compliance, better mobile integration, and fit the client&#39;s budget.</p><p><br></p><p><br></p>"},"section_2":{"image":{"url":"https://cdn.cosmicjs.com/98d90b70-2465-11eb-b940-89e6869fdeb0-boundarylaapproach.png","imgix_url":"https://imgix.cosmicjs.com/98d90b70-2465-11eb-b940-89e6869fdeb0-boundarylaapproach.png"},"text":"<p>Fortunately, Cosmic seemed like the perfect solution, and after some internal consideration, Cosmic was the solution BoundaryLA selected. They&#39;ve never looked back. Today, Boundary LA is building on top of their initial application with their headless back-end, and their client is successfully managing their own content through a secure, HIPAA-compliant back-end.</p><p>Mission accomplished.</p>"},"testimonial_section":{"image":{"url":"https://cdn.cosmicjs.com/70bb6c00-2465-11eb-b940-89e6869fdeb0-tylerleonards.jpg","imgix_url":"https://imgix.cosmicjs.com/70bb6c00-2465-11eb-b940-89e6869fdeb0-tylerleonards.jpg"},"author":"Tyler Leonard, Co-Founder of BoundaryLA","text":"In this case, we'd be working with a medical application, and needed HIPAA compliance from a mobile-app through to a front-end. This limited other options. We didn't want to use two separate solutions to achieve this. We've continued to build on top of everything we deployed initially. For us, we could go in and flexibly change through different social tools. Our clients have no issues maintaining it either. For the questions we have had, we've sometimes had the CEO respond directly, support all-around has been fantastic.","testimonial_home":"\"An all-in-one, HIPPA-compliant back-end that fit the client's budget\""},"featured_on_home":true}},{"_id":"5ef386485090f100070d4dc1","slug":"wordpress-headless-cms","title":"WordPress Headless CMS","content":"<p><span style=\"color: rgb(88, 96, 105);\">WordPress has been around for a long time, since 2004, making it ancient in internet years. It has an ecosystem and brand recognition that is second to none in the open source CMS space. <span style=\"color: rgb(88, 96, 105);\">However, as it tries to keep up with new Headless CMS solutions, <span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\">it is showing its age</span></span>. <span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\">Cosmic is an alternative to WordPress that your developers and content creators will love.</span></span></span></span></span></span></span></span></p><p><br></p><h3>Monolithic vs Headless CMS</h3><p><span style=\"color: rgb(88, 96, 105);\">WordPress, as a monolithic CMS, and other older installed CMS systems like it, comes with a coupled front end application layer that requires additional development and maintenance. <span style=\"color: rgb(88, 96, 105);\">Cosmic is a Headless CMS meaning that the content API and presentation layer are decoupled which gives your team greater flexibility when it comes to where your content can go.</span></span></p><p><span style=\"color: rgb(88, 96, 105);\">Cosmic provides everything your team of developers and content creators need: powerful and intuitive APIs for developers, and an easy-to-use dashboard for content creators. We&#39;ve removed all complexity and CMS maintenance, so your team can focus on building great products faster, together.</span></p><p><br></p><h3>But can&#39;t WordPress go Headless?</h3><p><span style=\"color: rgb(88, 96, 105);\">Although you CAN make WordPress a Headless CMS, you still have a lot of work to do to bring it up to the level of an optimized CMS system that&#39;s truly headless. And along with<span style=\"color: rgb(88, 96, 105);\">&nbsp;your application,</span> you will need to maintain the CMS itself, adding more development costs and <span style=\"color: rgb(88, 96, 105);\">taking away focus from</span> what really matter<span style=\"color: rgb(88, 96, 105);\">s: creating great content and user experiences.</span></span></p>","metafields":[{"children":null,"type":"file","title":"Logo","key":"logo","id":"YDlWpctl7O","value":"5abbde00-b564-11ea-a2b3-f17f1f2fdbda-wordpress-headless-cms.jpg","url":"https://cdn.cosmicjs.com/5abbde00-b564-11ea-a2b3-f17f1f2fdbda-wordpress-headless-cms.jpg","imgix_url":"https://imgix.cosmicjs.com/5abbde00-b564-11ea-a2b3-f17f1f2fdbda-wordpress-headless-cms.jpg"},{"children":null,"type":"textarea","title":"Tech","key":"tech","id":"Ilo8X7NYz3","value":"LAMP: Linux, Apache, MySQL database, PHP."},{"children":null,"type":"textarea","title":"Scalability","key":"scalability","id":"uwMJgzbspX","value":"Does not scale easily. Limited by your servers, hosting provider, and budget."},{"children":null,"type":"textarea","title":"Security","key":"security","id":"WaqzILUKhA","value":"You manage the security yourself. No default data encryption at rest or in transit."},{"children":null,"type":"textarea","title":"Maintenance","key":"maintenance","id":"qvcDwAFYpb","value":"You deploy, host, and maintain everything yourself. Along with your application and content, you need to maintain updates and security for your CMS system."},{"children":null,"type":"textarea","title":"Caching","key":"caching","id":"LbgwBj57Hj","value":"No caching included out of the box."},{"children":null,"type":"textarea","title":"Media CDN","key":"media_cdn","id":"EW15DdHPXH","value":"No CDN included out of the box."},{"children":null,"type":"textarea","title":"Image Processing","key":"image_processing","id":"M5Elf9cuQZ","value":"Manually manage your own image sizes and optimizations."},{"children":null,"type":"textarea","title":"Extendability","key":"extendability","id":"Lxfg7sHgTy","value":"Themes and plugins."},{"children":null,"type":"textarea","title":"Front end","key":"front_end","id":"e2EV5rvNbP","value":"Front end is coupled with backend CMS. Can be made to be Headless."},{"children":null,"type":"textarea","title":"Number of Projects","key":"number_of_projects","id":"iUEnodbXfJ","value":"One login, one website."},{"children":null,"type":"html-textarea","title":"Costs","key":"costs","id":"pMWcIHZgOE","value":"<p>You will need to hire developer resources. Average salary of a full-stack developer is <a href=\"https://neuvoo.com/salary/?job=Full+Stack+Developer\" target=\"_blank\">$111,600 per year</a>. You may need to hire 1-3 developers to maintain the CMS.</p>"},{"children":null,"type":"text","title":"Vendor Name","key":"vendor_name","id":"k6OZ6Nt0I5","value":"WordPress Headless CMS"},{"children":null,"type":"switch","title":"Include in link list","key":"include_in_link_list","id":"LqfeoWSB7N","value":true,"options":"yes,no"},{"children":null,"type":"text","title":"Cost Value","key":"cost_value","id":"j2eU4KKose","value":"$223,200"},{"children":null,"type":"text","title":"Cost Text","key":"cost_text","id":"RovKGYNDfM","value":"per year"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"cms-competitors","created":"2020-06-24T16:58:48.218Z","created_at":"2020-06-24T16:58:48.218Z","modified_at":"2020-06-28T20:53:43.556Z","status":"published","locale":null,"modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-28T20:53:43.556Z","unpublish_at":null,"order":2,"metadata":{"logo":{"url":"https://cdn.cosmicjs.com/5abbde00-b564-11ea-a2b3-f17f1f2fdbda-wordpress-headless-cms.jpg","imgix_url":"https://imgix.cosmicjs.com/5abbde00-b564-11ea-a2b3-f17f1f2fdbda-wordpress-headless-cms.jpg"},"tech":"LAMP: Linux, Apache, MySQL database, PHP.","scalability":"Does not scale easily. Limited by your servers, hosting provider, and budget.","security":"You manage the security yourself. No default data encryption at rest or in transit.","maintenance":"You deploy, host, and maintain everything yourself. Along with your application and content, you need to maintain updates and security for your CMS system.","caching":"No caching included out of the box.","media_cdn":"No CDN included out of the box.","image_processing":"Manually manage your own image sizes and optimizations.","extendability":"Themes and plugins.","front_end":"Front end is coupled with backend CMS. Can be made to be Headless.","number_of_projects":"One login, one website.","costs":"<p>You will need to hire developer resources. Average salary of a full-stack developer is <a href=\"https://neuvoo.com/salary/?job=Full+Stack+Developer\" target=\"_blank\">$111,600 per year</a>. You may need to hire 1-3 developers to maintain the CMS.</p>","vendor_name":"WordPress Headless CMS","include_in_link_list":true,"cost_value":"$223,200","cost_text":"per year"}},{"_id":"643d8809ce3e2f0008ab0d12","order":2,"slug":"html-editor-media-updates-import-export-team-members","title":"HTML editor media updates, import / export team members","content":"<p>We have shipped some new features now available in the <a href=\"https://beta.cosmicjs.com/signup\" rel=\"noopener noreferrer\" target=\"_blank\">new dashboard</a>. Read about them below.</p><p><br><strong>HTML editor media updates</strong><br>There is a new toolbar button in the HTML editor that enables you to choose and add media already uploaded to your Bucket. Click the &quot;Cosmic media&quot; button in the toolbar to use it.</p><p><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi\" loop=\"\" muted=\"\" playsinline=\"\" src=\"https://cdn.cosmicjs.com/5c7635d0-dd4b-11ed-a522-5d99a4e99c98-CleanShot-2023-04-17-at-11.11.03.mp4\" style=\"width: 600px;\">Your browser does not support HTML5 video.</video></span>This\r\nis available on the Object content area as well as HTML Metafields. Select from media including images, video, as well as other file formats.</p><p><br><strong>Import / export team members</strong><br>You can now import team members into your Projects and Workspaces using a CSV file.</p><p><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi\" loop=\"\" muted=\"\" playsinline=\"\" src=\"https://cdn.cosmicjs.com/2ef8c050-ddfa-11ed-977e-f7253dba75d2-import-team.mp4\" style=\"width: 600px;\">Your browser does not support HTML5 video.</video></span></p><p>Importing team members from the old dashboard is now much easier using this feature. Follow these steps to import team members from the old dashboard:</p><ol><li>In the old dashboard, go to any Bucket team section found in <em>Bucket &gt; Settings &gt; Team</em>.</li><li>Click the link that says &quot;Export to CSV&quot;.</li><li>In the new dashboard go to <em>Project &gt; Team</em>. Click the button titled &quot;Import team CSV&quot;.</li><li>Upload the CSV and set the roles for each team member.</li></ol><p><br></p><p>We hope you enjoy these updates. Sign up for the <a href=\"https://beta.cosmicjs.com/signup\" rel=\"noopener noreferrer\" target=\"_blank\">new dashboard</a> to begin using these new features. Please let us know if you have any questions in <a href=\"https://cosmicjs.slack.com/\" rel=\"noopener noreferrer\" target=\"_blank\">our Slack channel</a>, and <a href=\"https://twitter.com/CosmicJS\" rel=\"noopener noreferrer\" target=\"_blank\">reach out on Twitter</a>.</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"FKhNS4vgpF","value":"2023-04-18"},{"children":null,"type":"object","title":"Author","key":"author","id":"oHWRyiSCZ4","value":"5ffa1d1e0046b0000799cb7b","object_type":"authors","object":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"sEnwsHUxtM","value":"05796370-ddf9-11ed-977e-f7253dba75d2-cosmic-media.png","url":"https://cdn.cosmicjs.com/05796370-ddf9-11ed-977e-f7253dba75d2-cosmic-media.png","imgix_url":"https://imgix.cosmicjs.com/05796370-ddf9-11ed-977e-f7253dba75d2-cosmic-media.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2023-04-17T17:55:21.057Z","created_by":"5357ef811693be2118000001","modified_at":"2023-04-18T15:04:07.438Z","created":"2023-04-17T17:55:21.057Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/05796370-ddf9-11ed-977e-f7253dba75d2-cosmic-media.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2023-04-18T15:04:07.438Z","metadata":{"published_date":"2023-04-18","author":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}}},"featured_image":{"url":"https://cdn.cosmicjs.com/05796370-ddf9-11ed-977e-f7253dba75d2-cosmic-media.png","imgix_url":"https://imgix.cosmicjs.com/05796370-ddf9-11ed-977e-f7253dba75d2-cosmic-media.png"}}},{"_id":"5ca05675572e762d9baaf7c9","order":2,"slug":"mux","title":"Mux","content":"","metafields":[{"children":null,"type":"text","title":"Link","key":"link","id":"cPd9WhuRfB","value":"https://cosmicjs.com/extensions/mux-videos"},{"children":null,"type":"file","title":"Image","key":"image","id":"UtpoqcZo7q","value":"9c06ddf0-8ed7-11ea-910b-435199f15a39-mux.jpg","url":"https://cdn.cosmicjs.com/9c06ddf0-8ed7-11ea-910b-435199f15a39-mux.jpg","imgix_url":"https://imgix.cosmicjs.com/9c06ddf0-8ed7-11ea-910b-435199f15a39-mux.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"integrations","created_at":"2019-03-31T05:56:05.151Z","created_by":"5357ef811693be2118000001","created":"2019-03-31T05:56:05.151Z","status":"published","published_at":"2020-05-05T13:52:25.018Z","modified_at":"2020-05-05T13:52:25.018Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"link":"https://cosmicjs.com/extensions/mux-videos","image":{"url":"https://cdn.cosmicjs.com/9c06ddf0-8ed7-11ea-910b-435199f15a39-mux.jpg","imgix_url":"https://imgix.cosmicjs.com/9c06ddf0-8ed7-11ea-910b-435199f15a39-mux.jpg"}}},{"_id":"5f5fac071936450007d8a01c","order":2,"slug":"kyle-meagher","title":"Kyle Meagher","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"hsMOJCxIAj","value":"kylemeags"},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D2rdKO4lEL","value":"e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2020-09-14T17:44:39.110Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-14T17:45:09.251Z","created":"2020-09-14T17:44:39.110Z","status":"published","published_at":"2020-09-14T17:44:39.110Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","metadata":{"username":"kylemeags","profile_picture":{"url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}}},{"_id":"5ea1b85b3b2bad0009f50b2b","slug":"chris-sevilleja","title":"Chris Sevilleja","content":"","metafields":[{"children":null,"type":"textarea","title":"Testimonial","key":"testimonial","id":"sLROxFCa9l","value":"Really like Cosmic. Build your content in a CMS and get a REST or GraphQL API immediately! Slick tool to make dev quicker! Even has Gatsby Preview so you can check out changes before publishing."},{"children":null,"type":"text","title":"Author Name","key":"author_name","id":"IMI4gUfY8G","value":"Chris Sevilleja"},{"children":null,"type":"file","title":"Author Image","key":"author_image","id":"83q9IQJyai","value":"9a6dd380-8578-11ea-a693-5b45721f7339-chris-sevilleja.jpeg","url":"https://cdn.cosmicjs.com/9a6dd380-8578-11ea-a693-5b45721f7339-chris-sevilleja.jpeg","imgix_url":"https://imgix.cosmicjs.com/9a6dd380-8578-11ea-a693-5b45721f7339-chris-sevilleja.jpeg"},{"children":null,"type":"text","title":"Business","key":"business","id":"8HUUPhsB9X","value":"Scotch.io"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"testimonials","created":"2020-04-23T15:46:35.710Z","created_at":"2020-04-23T15:46:35.710Z","modified_at":"2020-10-02T01:48:34.802Z","status":"published","locale":null,"created_by":"56d66b2f903a79b904000001","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-04-23T15:46:43.868Z","unpublish_at":null,"order":2,"thumbnail":"https://imgix.cosmicjs.com/9a6dd380-8578-11ea-a693-5b45721f7339-chris-sevilleja.jpeg","metadata":{"testimonial":"Really like Cosmic. Build your content in a CMS and get a REST or GraphQL API immediately! Slick tool to make dev quicker! Even has Gatsby Preview so you can check out changes before publishing.","author_name":"Chris Sevilleja","author_image":{"url":"https://cdn.cosmicjs.com/9a6dd380-8578-11ea-a693-5b45721f7339-chris-sevilleja.jpeg","imgix_url":"https://imgix.cosmicjs.com/9a6dd380-8578-11ea-a693-5b45721f7339-chris-sevilleja.jpeg"},"business":"Scotch.io"}},{"_id":"5afefdaad7c06b6b70cc0d79","order":2,"slug":"designer","title":"Designer","content":"<p>Cosmic is transforming the way content is created and delivered to the world. We provide a headless CMS to help teams build modern content-powered apps together.</p><p>We are currently looking for a Designer to work on our branding and user experience for our products and marketing materials.</p><p>If selected to join our team, you would be expected to be self-starting to provide quality, quantifiable results for our remote-first company.</p><p>Contact <a href=\"mailto:jobs@cosmicjs.com?subject=Developer%20Advocate\"></a><a href=\"mailto:jobs@cosmicjs.com?subject=Designer\">jobs@cosmicjs.com</a> with the subject &quot;Designer&quot; to apply.</p>","metafields":[{"children":null,"type":"textarea","title":"Teaser","key":"teaser","id":"l9xcrl4q2I","value":"We are currently looking for a Designer to work on our branding and user experience for our products and marketing materials."},{"children":null,"type":"text","title":"Font Awesome Icon","key":"font_awesome_icon","id":"zoTpaRP1UT","value":"fa-picture-o"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"jobs","created_at":"2018-05-18T16:22:02.088Z","created_by":"5357ef811693be2118000001","created":"2018-05-18T16:22:02.088Z","status":"published","modified_at":"2020-10-02T02:11:12.546Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-05-18T14:33:09.505Z","unpublish_at":null,"metadata":{"teaser":"We are currently looking for a Designer to work on our branding and user experience for our products and marketing materials.","font_awesome_icon":"fa-picture-o"}},{"_id":"631ba62d9ade990009c6ea9f","order":2,"slug":"astro-cms","title":"Astro CMS","content":"","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"727hC8oe3x","value":"e987e2d0-307f-11ed-873b-2bc1a58daa5a-full-logo-light.png","url":"https://cdn.cosmicjs.com/e987e2d0-307f-11ed-873b-2bc1a58daa5a-full-logo-light.png","imgix_url":"https://imgix.cosmicjs.com/e987e2d0-307f-11ed-873b-2bc1a58daa5a-full-logo-light.png"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"XJPqCCtikV","value":"eca883c0-307f-11ed-873b-2bc1a58daa5a-logomark-light.png","url":"https://cdn.cosmicjs.com/eca883c0-307f-11ed-873b-2bc1a58daa5a-logomark-light.png","imgix_url":"https://imgix.cosmicjs.com/eca883c0-307f-11ed-873b-2bc1a58daa5a-logomark-light.png"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"wTkUNBKQK8","value":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for Astro websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"LIrMOfMqMw","value":"Astro"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"z6wY8JVA2D","value":"Cosmic is the best Astro Headless CMS on the market. Use the GraphQL, REST, and other API tools to integrate with any website or app."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"6YRuerHqlS","value":"e987e2d0-307f-11ed-873b-2bc1a58daa5a-full-logo-light.png","url":"https://cdn.cosmicjs.com/e987e2d0-307f-11ed-873b-2bc1a58daa5a-full-logo-light.png","imgix_url":"https://imgix.cosmicjs.com/e987e2d0-307f-11ed-873b-2bc1a58daa5a-full-logo-light.png"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"CX1b1ZwULK","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"PvI0QG1KQT","value":"The Best Headless CMS for Astro"},{"children":[{"type":"repeating_item","children":[{"title":"Title","key":"title","value":"An intro to Astro with headless CMS content","type":"text","required":false},{"title":"Link","key":"link","value":"https://www.youtube.com/embed/7GNeFPn8W9E?showinfo=0&wmode=opaque","type":"text","required":false}]}],"type":"repeater","title":"Videos","key":"videos","id":"TgYdnYv8dZ","value":"An intro to Astro with headless CMS content","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]},{"children":null,"type":"text","title":"Apps Search Term","key":"apps_search_term","id":"ayCpVwyBDV","value":""},{"children":null,"type":"text","title":"Articles Search Term","key":"articles_search_term","id":"X8d3xa0zsB","value":""},{"children":null,"type":"html-textarea","title":"Page Overview","key":"page_overview","id":"WOnlYTHCPW","value":""},{"children":null,"type":"html-textarea","title":"SEO Content","key":"seo_content","id":"6C6ILD78SM","value":""},{"children":null,"type":"text","title":"Page Overview Title","key":"page_overview_title","id":"xH2AkMr7E5","value":""},{"children":[{"type":"repeating_item","children":[{"title":"App Slug","key":"app_slug","value":"simple-astro-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"App Slug","key":"app_slug","value":"astro-cosmic-blog","type":"text","required":false}]}],"type":"repeater","title":"Apps","key":"apps","id":"N0oRCJWgo9","value":"simple-astro-blog","repeater_fields":[{"title":"App Slug","key":"app_slug","value":"","type":"text","required":false}]},{"children":[{"type":"repeating_item","children":[{"title":"Article Slug","key":"article_slug","value":"add-a-headless-cms-to-astro-in-3-easy-steps","type":"text"}]},{"type":"repeating_item","children":[{"title":"Article Slug","key":"article_slug","value":"how-to-build-a-blazing-fast-astro-blog-with-cosmic-cms","type":"text","required":false}]}],"type":"repeater","title":"Articles","key":"articles","id":"de5GgGGX2p","value":"add-a-headless-cms-to-astro-in-3-easy-steps","repeater_fields":[{"title":"Article Slug","key":"article_slug","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2022-09-09T20:46:37.362Z","created_by":"5357ef811693be2118000001","created":"2022-09-09T20:46:37.362Z","status":"published","modified_at":"2022-10-14T00:22:21.210Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"thumbnail":"https://imgix.cosmicjs.com/eca883c0-307f-11ed-873b-2bc1a58daa5a-logomark-light.png","published_at":"2022-10-14T00:22:21.210Z","metadata":{"image":{"url":"https://cdn.cosmicjs.com/e987e2d0-307f-11ed-873b-2bc1a58daa5a-full-logo-light.png","imgix_url":"https://imgix.cosmicjs.com/e987e2d0-307f-11ed-873b-2bc1a58daa5a-full-logo-light.png"},"thumbnail":{"url":"https://cdn.cosmicjs.com/eca883c0-307f-11ed-873b-2bc1a58daa5a-logomark-light.png","imgix_url":"https://imgix.cosmicjs.com/eca883c0-307f-11ed-873b-2bc1a58daa5a-logomark-light.png"},"blurb":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for Astro websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Astro","seo_description":"Cosmic is the best Astro Headless CMS on the market. Use the GraphQL, REST, and other API tools to integrate with any website or app.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/e987e2d0-307f-11ed-873b-2bc1a58daa5a-full-logo-light.png","imgix_url":"https://imgix.cosmicjs.com/e987e2d0-307f-11ed-873b-2bc1a58daa5a-full-logo-light.png"},"code_example":"","seo_title":"The Best Headless CMS for Astro","videos":[{"title":"An intro to Astro with headless CMS content","link":"https://www.youtube.com/embed/7GNeFPn8W9E?showinfo=0&wmode=opaque"}],"apps_search_term":"","articles_search_term":"","page_overview":"","seo_content":"","page_overview_title":"","apps":[{"app_slug":"simple-astro-blog"},{"app_slug":"astro-cosmic-blog"}],"articles":[{"article_slug":"add-a-headless-cms-to-astro-in-3-easy-steps"},{"article_slug":"how-to-build-a-blazing-fast-astro-blog-with-cosmic-cms"}]}},{"_id":"63d4509b7e957c00081cce20","order":2,"slug":"cosmic-dashboard-now-in-private-beta","title":"Cosmic dashboard now in private beta","content":"<p><img src=\"https://imgix.cosmicjs.com/1abd5ec0-9e94-11ed-93ee-cb9a2cd68754-cosmic-beta.png?w=1200&auto=format\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>We are excited to announce the new Cosmic dashboard is now available in <a href=\"https://beta.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">private beta</a>. Starting today, a limited number of customers will be able to onboard to the new dashboard to prepare for production use. Follow the link below to begin the onboarding process and read <a href=\"https://www.cosmicjs.com/changelog/new-dashboard-private-beta-and-api-v3-release\" rel=\"noopener noreferrer\" target=\"_blank\">the changelog</a> to learn about all of the updates.</p><p>Please note, we are asking that only <span data-token-index=\"1\"><strong>one admin per team</strong></span> be designated to join the private beta to perform project migrations, testing, and invite team members. If you are not the admin of your project(s), please forward this note to any colleagues to be the designated admin to begin this process.</p><p>We can&rsquo;t wait to show you all of the updates, improvements, and new features that we know you&#39;ll love. Reach out to <a href=\"https://www.cosmicjs.com/contact\">Cosmic support</a> if you have any questions. Let&rsquo;s go!</p><p style=\"text-align: center;\"><a href=\"https://beta.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://imgix.cosmicjs.com/40ef6560-9e95-11ed-93ee-cb9a2cd68754-cosmic-button.png?w=600&auto=format\" style=\"width: 200px;\" class=\"fr-fic fr-dib\"></a></p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"Zs9lyuf8QD","value":"5ffa1d1e0046b0000799cb7b","required":true,"object_type":"authors","object":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"f4fOuVNYrt","value":"<p>We are excited to announce the new Cosmic dashboard is now available in <a href=\"https://beta.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">private beta</a>.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"VTzI13i3It","value":"f6579c30-a0cd-11ed-93ee-cb9a2cd68754-private-beta-og.png","url":"https://cdn.cosmicjs.com/f6579c30-a0cd-11ed-93ee-cb9a2cd68754-private-beta-og.png","imgix_url":"https://imgix.cosmicjs.com/f6579c30-a0cd-11ed-93ee-cb9a2cd68754-private-beta-og.png"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"2gG315iyT2","value":"We are excited to announce the new Cosmic dashboard is now available in private beta."},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"9AD3rTsd1a","value":"2023-01-31"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2023-01-27T22:30:51.502Z","created_by":"5357ef811693be2118000001","modified_at":"2023-01-31T17:44:12.484Z","created":"2023-01-27T22:30:51.502Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/1abd5ec0-9e94-11ed-93ee-cb9a2cd68754-cosmic-beta.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2023-01-31T17:44:12.484Z","metadata":{"author":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}}},"teaser":"<p>We are excited to announce the new Cosmic dashboard is now available in <a href=\"https://beta.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">private beta</a>.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/f6579c30-a0cd-11ed-93ee-cb9a2cd68754-private-beta-og.png","imgix_url":"https://imgix.cosmicjs.com/f6579c30-a0cd-11ed-93ee-cb9a2cd68754-private-beta-og.png"},"seo_meta_description":"We are excited to announce the new Cosmic dashboard is now available in private beta.","published_date":"2023-01-31"}},{"_id":"5b19af1122558e11e6178c16","order":2,"slug":"cookie-policy","title":"Cookie Policy","content":"<p><em>Last updated: 07/11/2019</em></p><p><br></p><ol><li><strong>Introduction</strong></li></ol><p>This Notice applies to Cosmic JS Inc. (&ldquo;<strong>Cosmic JS</strong>&rdquo;, &ldquo;<strong>we</strong>&rdquo;, &ldquo;<strong>our</strong>&rdquo; or &ldquo;<strong>us</strong>&rdquo;). &nbsp;</p><p>Like most websites, we employ &ldquo;cookies&rdquo; or similar technologies. This Cookie Notice tells you about the use of Cookies and similar technologies on the websites and Apps listed in our Privacy Policy <a href=\"https://cosmicjs.com/terms\"></a><a href=\"https://cosmicjs.com/terms\">https://cosmicjs.com/terms</a> (collectively, the &quot;Sites&quot;). &nbsp;</p><p>When you first access our Sites, you will receive a message advising you that cookies and similar technologies are in use. By clicking &ldquo;accept cookies&rdquo;, closing the message, or continuing to browse the Sites, you signify that you understand\r\nand agree to the use of these technologies, as described in this Cookie Notice.&nbsp;</p><p>You do not have to accept cookies and consent can be withdrawn at any time (see Section IV, How to Control Cookies, below). You can change your browser settings to refuse or restrict cookies, and you may delete them after they have been placed on your\r\ndevice at any time. If you do not accept or delete our cookies, some areas of our Sites that you access may take more time to work, or may not function properly.&nbsp;</p><ol><li><strong>What are cookies?</strong></li></ol><p>Cookies are small files containing a string of characters which we may store on your computer or mobile device when you visit one of our websites. &nbsp;When you visit the website or App again, the cookies allow us to recognize your browser. Cookies may\r\nstore your preferences and other information but cannot read data off your hard disk or read cookie files created by other sites.</p><p>Cookies set by a website owner (in this case, Cosmic JS) are called &ldquo;first party cookies&rdquo;. Cookies set by parties other than the website owner are called &ldquo;third party cookies&rdquo;. Third party cookies enable third party features or\r\nfunctionality to be provided on or through the website (i.e. advertising, social media functions and analytics).</p><ol><li><strong>The Cookies We Use</strong></li></ol><p>Cookies make the use of our Sites easier by, among other things, saving your preferences. We may also use cookies to deliver content tailored to your interests. Our cookies may enable us to relate your use of our Sites to Personal Data that you previously\r\nsubmitted.&nbsp;</p><p>The information that we collect with cookies allows us to statistically analyze usage of our Sites, and to improve and customize our content and other offerings. However, we only disclose information collected with cookies to third parties on an aggregated\r\nbasis without the use of any information that personally identifies you.&nbsp;</p><p>The specific types of first party and third-party cookies placed by our Sites and the purposes they perform are described in the table below:&nbsp;</p><p><br></p><table cellpadding='\\\"0\\\"' cellspacing='\\\"0\\\"'><tbody><tr><td valign='\\\"top\\\"'>Type of Cookies<br></td><td valign='\\\"top\\\"'>Who serves these cookies<br></td><td valign='\\\"top\\\"'>How to Refuse<br></td></tr><tr><td valign='\\\"top\\\"'><strong>Strictly Necessary Cookies</strong><br>These are cookies that are required for the operation of our Sites. They include, for example, cookies that enable you to log into secure areas of our websites, use a shopping cart or make use of e-billing services.<br></td><td valign='\\\"top\\\"'>Cosmic JS<br></td><td valign='\\\"top\\\"'>These cookies are strictly necessary to deliver the Sites and therefore cannot be refused. They can be deleted or blocked using your browser settings, however (see Section IV, How to Control Cookies, below).<br><br><br></td></tr><tr><td valign='\\\"top\\\"'><strong>Performance and Functionality Cookies</strong><br>These are used to recognize you when you return to our Sites. This enables us to personalize our content for you and remember your preferences (for example, your choice of language or region), but are non-essential to the performance of the Sites.<br></td><td valign='\\\"top\\\"'>Cosmic JS<br></td><td valign='\\\"top\\\"'>These cookies can be deleted or blocked using your browser settings (see Section IV, How to Control Cookies, below).<br><br><br></td></tr><tr><td valign='\\\"top\\\"'><strong>Analytical or Customization Cookies</strong><br>These cookies collect information about how users access and move through the Sites. We use this information in either aggregate form to help us to improve the way our Sites work, or to personalize our Sites to your interests.<br></td><td valign='\\\"top\\\"'>Cosmic JS<br><br><br>Google Universal Analytics<br><br><br>Intercom<br></td><td valign='\\\"top\\\"'>These cookies can be deleted or blocked using your browser settings (see Section IV, How to Control Cookies, below).<br>Alternatively, please follow the links below to opt-out:<br><ul><li>Google Universal Analytics <a href=\"https://tools.google.com/dlpage/gaoptout\">https://tools.google.com/dlpage/gaoptout</a></li><li><a href=\"https://www.intercom.com/terms-and-policies#cookie-policy\">https://www.intercom.com/terms-and-policies#cookie-policy</a></li></ul></td></tr><tr><td valign='\\\"top\\\"'><br><br></td><td valign='\\\"top\\\"'><br><br></td><td valign='\\\"top\\\"'><br><br></td></tr><tr><td valign='\\\"top\\\"'><strong>Social Media Cookies</strong><br>These cookies allow us to integrate social media functions into our Sites and may also be used for advertising purposes.<br></td><td valign='\\\"top\\\"'>Twitter<br>Facebook<br>YouTube<br></td><td valign='\\\"top\\\"'>These cookies can be deleted or blocked using your browser settings (see Section IV, How to Control Cookies, below).<br>Alternatively, please follow the links below to opt-out:<br><ul><li>Twitter:&nbsp;</li></ul><a href=\"https://twitter.com/personalization\">https://twitter.com/personalization</a><br><ul><li>Facebook: <a href=\"https://www.facebook.com/ads/settings\">https://www.facebook.com/ads/settings</a></li><li>YouTube: <a href=\"https://support.google.com/ads/answer/2662922?hl=en-GB\">https://support.google.com/ads/answer/2662922?hl=en-GB</a>&nbsp;</li></ul></td></tr></tbody></table><p><br></p><ol><li><strong>How to Control Cookies&nbsp;</strong></li></ol><p>When you first access our Sites, you will receive a message advising you that cookies and similar technologies are in use. By clicking &ldquo;accept cookies&rdquo;, closing the message, or continuing to browse the Site, you signify that you understand\r\nand agree to the use of these technologies, as described in this Cookie Notice.&nbsp;</p><p>You do not have to accept cookies and consent can be withdrawn at any time, although you may not be able to use certain features on the Sites. You can do this by clicking the appropriate opt-out provided in the cookie table above or by activating the\r\nsettings on your browser that allows you to refuse all or some cookies.</p><p>Please follow the links below to helpful information for the most popular browsers:</p><ul><li>Microsoft Internet Explorer:</li></ul><p><a href=\"https://support.microsoft.com/en-gb/help/17442/windows-internet-explorer-delete-manage-cookies\">https://support.microsoft.com/en-gb/help/17442/windows-internet-explorer-delete-manage-cookies</a>&nbsp;</p><ul><li>Google Chrome:&nbsp;</li></ul><p><a href=\"https://support.google.com/chrome/answer/95647?co=GENIE.Platform%253DDesktop&hl=en\">https://support.google.com/chrome/answer/95647?co=GENIE.Platform%3DDesktop&amp;hl=en</a></p><ul><li>Mozilla Firefox:&nbsp;</li></ul><p><a href=\"https://support.mozilla.org/en-US/kb/enable-and-disable-cookies-website-preferences\">https://support.mozilla.org/en-US/kb/enable-and-disable-cookies-website-preferences</a>&nbsp;</p><ul><li>Apple Safari: &nbsp;</li></ul><p><a href=\"https://support.apple.com/kb/PH21411?locale=en_US\">https://support.apple.com/kb/PH21411?locale=en_US</a> &nbsp;</p><p>In addition, you can exercise advertising cookie choices by visiting:</p><ul><li><a href=\"http://www.aboutads.info/choices/\">http://www.aboutads.info/choices/</a>,&nbsp;</li><li><a href=\"http://www.networkadvertising.org/choices/\">http://www.networkadvertising.org/choices/</a>; or&nbsp;</li><li><a href=\"http://youronlinechoices.com/\">http://youronlinechoices.com/</a>.</li></ul><ol><li><strong>Web Beacons</strong></li></ol><p>As well as cookies, we use other technologies to recognize and track visitors to our Sites. A web beacon (also known as a &ldquo;tracking pixel&rdquo; or &ldquo;clear GIF&rdquo;) is a clear graphic image (typically a one-pixel tag) that is delivered through\r\na web browser or HTML e-mail, typically in conjunction with a cookie.</p><p>Web beacons allows us, for example, to monitor how users move from one page within our websites to another, to track access to our communications, to understand whether users have come to our websites from an online advertisement displayed on a third-party\r\nwebsite, to measure how ads have been viewed and to improve site performance. &nbsp;</p><ol><li><strong>Targeted Advertising&nbsp;</strong></li></ol><p>Please note that third parties (including, for example, advertising networks and providers of external services like web traffic analysis services) use cookies, over which we have no control. These cookies are likely to be analytical/performance cookies\r\nor targeting cookies. These companies may use information about your visits to this and other websites in order to provide relevant advertisements about goods and services that you may be interested in. They may also employ technology that is used to\r\nmeasure the effectiveness of advertisements.&nbsp;</p><ol><li><strong>Changes to this Cookie Notice</strong></li></ol><p>We may occasionally amend this Cookie Notice to reflect company and customer feedback, and we reserve the right to make changes to this Cookie Notice at any time.&nbsp;</p><p>The provisions contained in this Cookie Notice supersede all previous notices or policies regarding our use of cookies and similar technology on our Sites.&nbsp;</p><p>Please check the &ldquo;Last Updated&rdquo; legend at the top of this page to see when this Cookie Notice was last revised.&nbsp;</p><p>We encourage you to check frequently to see the current Cookie Notice to be informed of how Cosmic JS is committed to protecting your information and providing you with improved content on our Sites in order to enhance your experience.</p><ol><li><strong>VIII.</strong><strong>Contact us</strong></li></ol><p>If you have any questions or concerns about this Notice or Cosmic JS&rsquo;s data practices, please contact our Cosmic JS privacy team:</p><p>Using email at: <a href=\"mailto:support@cosmicjs.com\">support@cosmicjs.com</a><br>In writing to: 3208 Bonniebrook Dr. Plano, TX 75075</p>","metafields":[],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"pages","created_at":"2018-06-07T22:17:53.569Z","created_by":"5357ef811693be2118000001","created":"2018-06-07T22:17:53.569Z","status":"published","published_at":"2019-07-11T19:05:18.175Z","modified_at":"2019-07-11T19:05:18.175Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":null},{"_id":"5d235a7572d8f04604eb203a","slug":"headless-cms-for-company-websites","title":"Headless CMS for Company Websites","content":"<p>The Cosmic Headless CMS empowers companies to manage content for their website quickly and seamlessly. Company websites are populated with content representing numerous departments, which can create bottlenecks internally and cause content to be less timely. Cosmic solves these problems by offering a flexible CMS Dashboard for content creators to draft, manage and schedule content for publishing. Custom <a href=\"https://www.cosmicjs.com/headless-cms/user-roles\">user roles and permissions</a> ensure each team member has the tools to do their job.<br><br></p><p>Helpful features include <a href=\"https://www.cosmicjs.com/headless-cms/revision-history\">Revision History</a> and <a href=\"https://www.cosmicjs.com/headless-cms/activity-logs\">Team Usage reports</a>, giving Managers a high level view over their projects and team&#39;s productivity.&nbsp;</p>","metafields":[{"children":null,"type":"text","title":"Solution Name","key":"solution_name","id":"CR6YE77yZw","value":"Company Websites"},{"children":null,"type":"file","title":"Image","key":"image","id":"0x2TChvJbd","value":"caed7450-9dbd-11e9-a5b4-e5df9f8049d3-Company-Websites.png","url":"https://cdn.cosmicjs.com/caed7450-9dbd-11e9-a5b4-e5df9f8049d3-Company-Websites.png","imgix_url":"https://imgix.cosmicjs.com/caed7450-9dbd-11e9-a5b4-e5df9f8049d3-Company-Websites.png"},{"children":null,"type":"objects","title":"Case Studies","key":"case_studies","id":"aEvTJVyRlY","value":"5bd206599dca8d10e941b69b,5b86a2c6016461100076e5c7,5bd88cc2dcf8c4248f3ccc4b","object_type":"case-studies","objects":[{"_id":"5bd206599dca8d10e941b69b","slug":"derive-systems-runs-on-cosmic-js","title":"Derive Systems runs on Cosmic","content":"<p dir=\"ltr\"><a href=\"https://derivesystems.com\" rel=\"noopener noreferrer\" target=\"_blank\">Derive Systems</a>  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. </p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/3d484f50-d881-11e8-a05d-ade53a62d98b-Derive Systems.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">The team at Derive Systems was in search of a headless CMS that would give their developers flexibility out-of-the-box while enabling their content managers to manage content in a familiar and modern CMS Dashboard. They chose Cosmic due to its easy content modeling tools for their Blog, Press, About and Team Sections. Derive now runs a Next.js, React and Express framework that utilizes the Cosmic GraphQL API to deliver its content.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/ea968040-d882-11e8-8793-13fe540ddec9-Derive Systems GIF.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&ldquo;Leveraging the Cosmic GraphQL API allows for easy updates to our news and blog, while keeping payloads small and fast. Integration with Cosmic could not be easier thanks to their great support. We look forward to developing more features on the platform.&rdquo;</p><br><p><cite>&mdash; Dustin Brink, Front End Developer at Derive Systems&nbsp;</cite></p></blockquote>","metafields":[{"value":"Derive Systems","key":"company","title":"Company","type":"text","children":null},{"value":"Automotive","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Derive Systems  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","imgix_url":"https://imgix.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-25T18:07:21.426Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-11-15T14:51:19.007Z"},{"_id":"5b86a2c6016461100076e5c7","slug":"consolidating-the-content-chaos-tac-switches-from-wordpress-to-cosmic-js","title":"Consolidating the Content Chaos: TAC Switches from WordPress to Cosmic","content":"<p>TAC - <a href=\"https://thearnoldcos.com\" rel=\"noopener noreferrer\" target=\"_blank\">The Arnold Companies</a> is among the largest fuel wholesalers and aviation service providers in the country. Steady growth, positive financial results and a diverse industry base consistently make TAC one of the top private companies in the US. TAC is made up of many separate brands under one corporate identity, including <a href=\"https://thearnoldcos.com/tac-energy\" rel=\"noopener noreferrer\" target=\"_blank\">TAC Energy</a>, <a href=\"https://thearnoldcos.com/tac-air\" rel=\"noopener noreferrer\" target=\"_blank\">TAC Air</a> and <a href=\"https://thearnoldcos.com/keystone-aviation\" rel=\"noopener noreferrer\" target=\"_blank\">Keystone Aviation</a>.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1edc4420-03d5-11e9-b2e6-ef985cd5a622-TAC_Air.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>With TAC&#39;s old website built as stand-alone sites that linked to each other on a WordPress foundation, the user experience was over-complicated and required too many steps for visitors to find what they were looking for. Being WordPress-based, it did not allow for clear information architecture to promote the different business lines within the portfolio.&nbsp;</p><p>Through a structured RFP process to identify a partner in re-thinking the customer experience and content management system, interactive agency <a href=\"https://simplemedia.co\" rel=\"noopener noreferrer\" target=\"_blank\">Simple Media</a> and Cosmic were selected. Other platform options included WordPress, Drupal, and Joomla.&nbsp;</p><p>Focused on building with a mobile-first approach and consolidating the chaos of the existing number of brand sites to bring harmony to the four brands and ease-of-use in content management, TAC found an outstanding and simple solution in Cosmic.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/28c0eb80-03d5-11e9-b2e6-ef985cd5a622-TAC_Air2.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>To learn more about the development, Brandon Reid, Lead Developer on the project breaks down the stack:&nbsp;</p><p><strong>Development Team:</strong> &quot;TAC&rsquo;s backend is powered by Node, Next.js, and Express. Next.js is used for server side rendering capabilities for SEO optimization as well as site routing. Next.js also makes it easy to integrate with Babel and Webpack since they are built right in. The team used Next.js routing API to rendering page templates for pages that have the same design layouts. TAC&rsquo;s frontend is powered by React.js and the world&#39;s most popular react UI framework, Material UI. In order to use Material UI with SSR, the team had to wrap the site in a JSSProvider and use CSSBaseline. For development they used Eslint as a linter for a cleaner and more consistent codebase.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/9bc8cba0-03e6-11e9-9a9a-9b696b7d5c75-Fuel-Tanker-Truck.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Since TAC uses ES6 JavaScript, the team had to also implement a very small amount of polyfill to transpile ES6 to ES5 in order for the site to work with IE11. Some notable node modules used were:&nbsp;</p><ul><li>React-Image-Gallery for the image galleries across the site</li><li>React-Masonry-Component for the newsroom</li><li>Fetch for API requests</li><li>For email services/API the team used Nodemailer and Mailgun</li></ul><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7c547000-b079-11e8-966b-171c4c72e338-IMG_4405.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>TAC&#39;s development team started building the site by using Cosmic&rsquo;s React Starter, which helped them get jump-started right away. Building TAC started with implementing all globals for the site (Header, Footer, Favicon, etc), so the developers quickly created some JavaScript request functions to pull data from the Cosmic Buckets using Cosmic&rsquo;s Node API. The team added those global components to the sites main _app layout, so every page would be wrapped and rendered with those globals. From there they analyzed what pages would have reusable components across multiple pages or the site, and created component views for those pages based off their analysis.&nbsp;</p><p>TAC was then able to efficiently knock out page designs and implement object types in the Cosmic bucket on the fly. As TAC got closer to site launch, they noticed compatibility issues with IE11 and had to come up with a solution. At first, they were going to do a browser sniff in the codebase to display something that would work on IE. Instead, the team implemented Babel and some polyfills to solve their &nbsp;compatibility issues.&quot;</p><p style=\"text-align: center;\"><br></p><p><br></p><p style=\"text-align: center;\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7d6520b0-b04d-11e8-8760-cbfd96ceee1a-ezgif-4-42d2daea45.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&quot;Our goal in this project was not to reinvent the brands, but to simplify the communication and process for website content management. Cosmic has allowed us to become current in our presentation and relevant in our content push. Plus, the site is easier to use for visitors and staff alike.&quot;</p><p><cite>&mdash; Tad Perryman, VP of Marketing, TAC - The Arnold Companies</cite></p></blockquote>","metafields":[{"value":"The Arnold Companies","key":"company","title":"Company","type":"text","children":null},{"value":"Energy / Aviation","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"TAC - The Arnold Companies is among the largest fuel wholesalers and aviation service providers in the country. Steady growth, positive financial results and a diverse industry base consistently make TAC one of the top private companies in the US. TAC is made up of many separate brands under one corporate identity, including TAC Energy, TAC Air and Keystone Aviation. \n\n\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg","imgix_url":"https://imgix.cosmicjs.com/9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-01T22:26:36.367Z","created_by":"5716b504e9c686d006000073","created":"2018-08-29T13:42:30.982Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-12-20T14:40:21.379Z"},{"_id":"5bd88cc2dcf8c4248f3ccc4b","slug":"tripwire-interactive-builds-a-react-corporate-website","title":"Tripwire Interactive Builds a React Corporate Website","content":"<p dir=\"ltr\">Tripwire Interactive is an entertainment software developer and publisher founded in 2005 by the award-winning mod team and winners of the 2004 edition of the &ldquo;$1,000,000 Make Something Unreal&rdquo; competition.</p><p dir=\"ltr\"><br><img src=\"https://cosmic-s3.imgix.net/1e7ac570-e363-11e8-8e9f-c7fa3cdb2209-Tripwire.png?w=1200\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"><br></p><p dir=\"ltr\">Gamers want games that grab their attention and will keep them coming back for more. <a href=\"https://www.tripwireinteractive.com/#/#top\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a> has been producing those types of games since the first Red Orchestra mod that won the &quot;Make Something Unreal&quot; competition in 2004. Since then Tripwire has won numerous Multiplayer and FPS Game of the Year awards from top editorial sites and millions have played a Red Orchestra or Killing Floor game, with an average play time of over 40 hours, per player, per game!&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://cosmic-s3.imgix.net/ec4f9940-dc64-11e8-9094-a112ce16fea9-40953819_2090843480937681_5517411053975109632_o.jpg?w=1200&quot;\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"><br></p><p dir=\"ltr\">Historically using an Umbraco system, The Tripwire Interactive team needed an easy way for their marketers to maintain marketing website content for their games&#39; parent brand. Each new game needed a dedicated landing page with marketing content. Blog,\r\nCareer and Press feeds needed to be managed by the marketing team without bottlenecking the developers. The Tripwire Interactive team chose Cosmic as their dynamic content management solution as they built their new corporate website on a modern React\r\nstack.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team\r\nhas been enjoying the ease of use with the new system.&quot;</p><p><cite>&mdash; Owen Liversidge, Lead Developer</cite></p></blockquote><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/297454e0-e387-11e8-89c3-0b430965f348-ezgif-4-5e5da2b90b13.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"Tripwire Interactive","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Gamers want games that grab their attention and will keep them coming back for more. Tripwire Interactive has been producing those types of games since the first Red Orchestra mod that won the \"Make Something Unreal\" competition in 2004. Since then Tripwire has won numerous Multiplayer and FPS Game of the Year awards from top editorial sites and millions have played a Red Orchestra or Killing Floor game, with an average play time of over 40 hours, per player, per game! \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-30T16:54:26.538Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-11-08T20:12:40.566Z"}]},{"children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"creative-agency","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"vuejs-store-locator","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"angular-company-website","type":"text","required":false}]}],"type":"repeater","title":"App Slugs","key":"app_slugs","id":"0VoVnWQ6LC","value":"creative-agency","repeater_fields":"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\""},{"children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"wordpress-importer","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"export-to-csv","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"google-analytics","type":"text","required":false}]}],"type":"repeater","title":"Extension Slugs","key":"extension_slugs","id":"oc1yJadcKC","value":"wordpress-importer","repeater_fields":"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\""},{"children":null,"type":"html-textarea","title":"Testimonial","key":"testimonial","id":"Lysc55fQtS","value":"<p>&ldquo;Leveraging the Cosmic GraphQL API allows for easy updates to our news and blog, while keeping payloads small and fast. Integration with Cosmic could not be easier thanks to their great support. We look forward to developing more features on the platform.&rdquo;</p>"},{"children":null,"type":"text","title":"Testimonial Credit","key":"testimonial_credit","id":"Pk3h88NstH","value":"Dustin Brink, Front End Developer at Derive Systems "}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created":"2019-07-08T15:00:05.867Z","created_at":"2019-07-08T15:00:05.867Z","modified_at":"2020-08-10T14:05:12.245Z","status":"published","locale":null,"published_at":"2020-05-06T05:31:15.844Z","modified_by":"5357ef811693be2118000001","publish_at":null,"order":2,"unpublish_at":null,"metadata":{"solution_name":"Company Websites","image":{"url":"https://cdn.cosmicjs.com/caed7450-9dbd-11e9-a5b4-e5df9f8049d3-Company-Websites.png","imgix_url":"https://imgix.cosmicjs.com/caed7450-9dbd-11e9-a5b4-e5df9f8049d3-Company-Websites.png"},"case_studies":[{"_id":"5bd206599dca8d10e941b69b","slug":"derive-systems-runs-on-cosmic-js","title":"Derive Systems runs on Cosmic","content":"<p dir=\"ltr\"><a href=\"https://derivesystems.com\" rel=\"noopener noreferrer\" target=\"_blank\">Derive Systems</a>  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. </p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/3d484f50-d881-11e8-a05d-ade53a62d98b-Derive Systems.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">The team at Derive Systems was in search of a headless CMS that would give their developers flexibility out-of-the-box while enabling their content managers to manage content in a familiar and modern CMS Dashboard. They chose Cosmic due to its easy content modeling tools for their Blog, Press, About and Team Sections. Derive now runs a Next.js, React and Express framework that utilizes the Cosmic GraphQL API to deliver its content.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/ea968040-d882-11e8-8793-13fe540ddec9-Derive Systems GIF.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&ldquo;Leveraging the Cosmic GraphQL API allows for easy updates to our news and blog, while keeping payloads small and fast. Integration with Cosmic could not be easier thanks to their great support. We look forward to developing more features on the platform.&rdquo;</p><br><p><cite>&mdash; Dustin Brink, Front End Developer at Derive Systems&nbsp;</cite></p></blockquote>","metafields":[{"value":"Derive Systems","key":"company","title":"Company","type":"text","children":null},{"value":"Automotive","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Derive Systems  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","imgix_url":"https://imgix.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-25T18:07:21.426Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-11-15T14:51:19.007Z","metadata":{"company":"Derive Systems","industry_type":"Automotive","teaser":"Derive Systems  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. \n","logo":{"url":"https://cdn.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","imgix_url":"https://imgix.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg"}}},{"_id":"5b86a2c6016461100076e5c7","slug":"consolidating-the-content-chaos-tac-switches-from-wordpress-to-cosmic-js","title":"Consolidating the Content Chaos: TAC Switches from WordPress to Cosmic","content":"<p>TAC - <a href=\"https://thearnoldcos.com\" rel=\"noopener noreferrer\" target=\"_blank\">The Arnold Companies</a> is among the largest fuel wholesalers and aviation service providers in the country. Steady growth, positive financial results and a diverse industry base consistently make TAC one of the top private companies in the US. TAC is made up of many separate brands under one corporate identity, including <a href=\"https://thearnoldcos.com/tac-energy\" rel=\"noopener noreferrer\" target=\"_blank\">TAC Energy</a>, <a href=\"https://thearnoldcos.com/tac-air\" rel=\"noopener noreferrer\" target=\"_blank\">TAC Air</a> and <a href=\"https://thearnoldcos.com/keystone-aviation\" rel=\"noopener noreferrer\" target=\"_blank\">Keystone Aviation</a>.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1edc4420-03d5-11e9-b2e6-ef985cd5a622-TAC_Air.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>With TAC&#39;s old website built as stand-alone sites that linked to each other on a WordPress foundation, the user experience was over-complicated and required too many steps for visitors to find what they were looking for. Being WordPress-based, it did not allow for clear information architecture to promote the different business lines within the portfolio.&nbsp;</p><p>Through a structured RFP process to identify a partner in re-thinking the customer experience and content management system, interactive agency <a href=\"https://simplemedia.co\" rel=\"noopener noreferrer\" target=\"_blank\">Simple Media</a> and Cosmic were selected. Other platform options included WordPress, Drupal, and Joomla.&nbsp;</p><p>Focused on building with a mobile-first approach and consolidating the chaos of the existing number of brand sites to bring harmony to the four brands and ease-of-use in content management, TAC found an outstanding and simple solution in Cosmic.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/28c0eb80-03d5-11e9-b2e6-ef985cd5a622-TAC_Air2.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>To learn more about the development, Brandon Reid, Lead Developer on the project breaks down the stack:&nbsp;</p><p><strong>Development Team:</strong> &quot;TAC&rsquo;s backend is powered by Node, Next.js, and Express. Next.js is used for server side rendering capabilities for SEO optimization as well as site routing. Next.js also makes it easy to integrate with Babel and Webpack since they are built right in. The team used Next.js routing API to rendering page templates for pages that have the same design layouts. TAC&rsquo;s frontend is powered by React.js and the world&#39;s most popular react UI framework, Material UI. In order to use Material UI with SSR, the team had to wrap the site in a JSSProvider and use CSSBaseline. For development they used Eslint as a linter for a cleaner and more consistent codebase.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/9bc8cba0-03e6-11e9-9a9a-9b696b7d5c75-Fuel-Tanker-Truck.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Since TAC uses ES6 JavaScript, the team had to also implement a very small amount of polyfill to transpile ES6 to ES5 in order for the site to work with IE11. Some notable node modules used were:&nbsp;</p><ul><li>React-Image-Gallery for the image galleries across the site</li><li>React-Masonry-Component for the newsroom</li><li>Fetch for API requests</li><li>For email services/API the team used Nodemailer and Mailgun</li></ul><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7c547000-b079-11e8-966b-171c4c72e338-IMG_4405.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>TAC&#39;s development team started building the site by using Cosmic&rsquo;s React Starter, which helped them get jump-started right away. Building TAC started with implementing all globals for the site (Header, Footer, Favicon, etc), so the developers quickly created some JavaScript request functions to pull data from the Cosmic Buckets using Cosmic&rsquo;s Node API. The team added those global components to the sites main _app layout, so every page would be wrapped and rendered with those globals. From there they analyzed what pages would have reusable components across multiple pages or the site, and created component views for those pages based off their analysis.&nbsp;</p><p>TAC was then able to efficiently knock out page designs and implement object types in the Cosmic bucket on the fly. As TAC got closer to site launch, they noticed compatibility issues with IE11 and had to come up with a solution. At first, they were going to do a browser sniff in the codebase to display something that would work on IE. Instead, the team implemented Babel and some polyfills to solve their &nbsp;compatibility issues.&quot;</p><p style=\"text-align: center;\"><br></p><p><br></p><p style=\"text-align: center;\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7d6520b0-b04d-11e8-8760-cbfd96ceee1a-ezgif-4-42d2daea45.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&quot;Our goal in this project was not to reinvent the brands, but to simplify the communication and process for website content management. Cosmic has allowed us to become current in our presentation and relevant in our content push. Plus, the site is easier to use for visitors and staff alike.&quot;</p><p><cite>&mdash; Tad Perryman, VP of Marketing, TAC - The Arnold Companies</cite></p></blockquote>","metafields":[{"value":"The Arnold Companies","key":"company","title":"Company","type":"text","children":null},{"value":"Energy / Aviation","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"TAC - The Arnold Companies is among the largest fuel wholesalers and aviation service providers in the country. Steady growth, positive financial results and a diverse industry base consistently make TAC one of the top private companies in the US. TAC is made up of many separate brands under one corporate identity, including TAC Energy, TAC Air and Keystone Aviation. \n\n\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg","imgix_url":"https://imgix.cosmicjs.com/9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-01T22:26:36.367Z","created_by":"5716b504e9c686d006000073","created":"2018-08-29T13:42:30.982Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-12-20T14:40:21.379Z","metadata":{"company":"The Arnold Companies","industry_type":"Energy / Aviation","teaser":"TAC - The Arnold Companies is among the largest fuel wholesalers and aviation service providers in the country. Steady growth, positive financial results and a diverse industry base consistently make TAC one of the top private companies in the US. TAC is made up of many separate brands under one corporate identity, including TAC Energy, TAC Air and Keystone Aviation. \n\n\n\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg","imgix_url":"https://imgix.cosmicjs.com/9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg"}}},{"_id":"5bd88cc2dcf8c4248f3ccc4b","slug":"tripwire-interactive-builds-a-react-corporate-website","title":"Tripwire Interactive Builds a React Corporate Website","content":"<p dir=\"ltr\">Tripwire Interactive is an entertainment software developer and publisher founded in 2005 by the award-winning mod team and winners of the 2004 edition of the &ldquo;$1,000,000 Make Something Unreal&rdquo; competition.</p><p dir=\"ltr\"><br><img src=\"https://cosmic-s3.imgix.net/1e7ac570-e363-11e8-8e9f-c7fa3cdb2209-Tripwire.png?w=1200\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"><br></p><p dir=\"ltr\">Gamers want games that grab their attention and will keep them coming back for more. <a href=\"https://www.tripwireinteractive.com/#/#top\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a> has been producing those types of games since the first Red Orchestra mod that won the &quot;Make Something Unreal&quot; competition in 2004. Since then Tripwire has won numerous Multiplayer and FPS Game of the Year awards from top editorial sites and millions have played a Red Orchestra or Killing Floor game, with an average play time of over 40 hours, per player, per game!&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://cosmic-s3.imgix.net/ec4f9940-dc64-11e8-9094-a112ce16fea9-40953819_2090843480937681_5517411053975109632_o.jpg?w=1200&quot;\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"><br></p><p dir=\"ltr\">Historically using an Umbraco system, The Tripwire Interactive team needed an easy way for their marketers to maintain marketing website content for their games&#39; parent brand. Each new game needed a dedicated landing page with marketing content. Blog,\r\nCareer and Press feeds needed to be managed by the marketing team without bottlenecking the developers. The Tripwire Interactive team chose Cosmic as their dynamic content management solution as they built their new corporate website on a modern React\r\nstack.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team\r\nhas been enjoying the ease of use with the new system.&quot;</p><p><cite>&mdash; Owen Liversidge, Lead Developer</cite></p></blockquote><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/297454e0-e387-11e8-89c3-0b430965f348-ezgif-4-5e5da2b90b13.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"Tripwire Interactive","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Gamers want games that grab their attention and will keep them coming back for more. Tripwire Interactive has been producing those types of games since the first Red Orchestra mod that won the \"Make Something Unreal\" competition in 2004. Since then Tripwire has won numerous Multiplayer and FPS Game of the Year awards from top editorial sites and millions have played a Red Orchestra or Killing Floor game, with an average play time of over 40 hours, per player, per game! \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-30T16:54:26.538Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-11-08T20:12:40.566Z","metadata":{"company":"Tripwire Interactive","industry_type":"Gaming","teaser":"Gamers want games that grab their attention and will keep them coming back for more. Tripwire Interactive has been producing those types of games since the first Red Orchestra mod that won the \"Make Something Unreal\" competition in 2004. Since then Tripwire has won numerous Multiplayer and FPS Game of the Year awards from top editorial sites and millions have played a Red Orchestra or Killing Floor game, with an average play time of over 40 hours, per player, per game! \n","logo":{"url":"https://cdn.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg"}}}],"app_slugs":[{"slug":"creative-agency"},{"slug":"vuejs-store-locator"},{"slug":"angular-company-website"}],"extension_slugs":[{"slug":"wordpress-importer"},{"slug":"export-to-csv"},{"slug":"google-analytics"}],"testimonial":"<p>&ldquo;Leveraging the Cosmic GraphQL API allows for easy updates to our news and blog, while keeping payloads small and fast. Integration with Cosmic could not be easier thanks to their great support. We look forward to developing more features on the platform.&rdquo;</p>","testimonial_credit":"Dustin Brink, Front End Developer at Derive Systems "}},{"_id":"58fbe247db1c070e0900181e","order":2,"slug":"nodejs-cms","title":"Node.js CMS","content":"<h2>Node.js CMS Templates</h2><p>You can use our <a href=\"https://www.cosmicjs.com/apps?q=Node.js\">React CMS Templates</a> and <a href=\"https://www.cosmicjs.com/articles?q=Node.js\">Node.js CMS Tutorials</a>, which includes Node.js CMS GitHub code examples.</p><h2>Node.js CMS Dashboard</h2><p>Cosmic is a powerful Headless CMS that enables your team to build apps faster. Developers get flexible API tools, and content creators get an intuitive content management dashboard. Get started free.</p>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"Vgp5HgjYoo","value":"7171a4d0-27b0-11e7-b6ae-8108cf4caa96-nodejs.svg","url":"https://cdn.cosmicjs.com/7171a4d0-27b0-11e7-b6ae-8108cf4caa96-nodejs.svg","imgix_url":"https://imgix.cosmicjs.com/7171a4d0-27b0-11e7-b6ae-8108cf4caa96-nodejs.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"zh07iEptWu","value":"759e85a0-27b0-11e7-b6ae-8108cf4caa96-nodejs.svg","url":"https://cdn.cosmicjs.com/759e85a0-27b0-11e7-b6ae-8108cf4caa96-nodejs.svg","imgix_url":"https://imgix.cosmicjs.com/759e85a0-27b0-11e7-b6ae-8108cf4caa96-nodejs.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"tQ4ByvfCGH","value":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for Node.js websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"4IcikPO8nI","value":"Node.js"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"2DbQ3kz2Rz","value":"Cosmic is the best Node.js Headless CMS on the market. Use the GraphQL, REST, and other API tools to integrate with any website or app."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"8f1MthySJQ","value":"753075c0-2aca-11e7-ae54-e9a1fc58ec22-node.jpg","url":"https://cdn.cosmicjs.com/753075c0-2aca-11e7-ae54-e9a1fc58ec22-node.jpg","imgix_url":"https://imgix.cosmicjs.com/753075c0-2aca-11e7-ae54-e9a1fc58ec22-node.jpg"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"23SbGaRLAB","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"dWjNp0LnL1","value":"The Best Headless CMS for Node.js"},{"children":[{"type":"repeating_item","children":[{"title":"Title","key":"title","value":"Getting Started with Cosmic CMS and Next.js (Part 1)","type":"text","required":false},{"title":"Link","key":"link","value":"https://www.youtube.com/embed/NZA1dF2IDqQ?showinfo=0&wmode=opaque","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Title","key":"title","value":"Building a Blog with Cosmic CMS and Next.js (Part 2)","type":"text","required":false},{"title":"Link","key":"link","value":"https://www.youtube.com/embed/sdvdwo3g3PE?showinfo=0&wmode=opaque","type":"text","required":false}]}],"type":"repeater","title":"Videos","key":"videos","id":"srD98wDobg","value":"Getting Started with Cosmic CMS and Next.js (Part 1)","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]},{"children":null,"type":"text","title":"Apps Search Term","key":"apps_search_term","id":"v95tq5i2enaf3oreecdk","value":""},{"children":null,"type":"text","title":"Articles Search Term","key":"articles_search_term","id":"apps_search_term_kef9yhcej8gy","value":""},{"children":null,"type":"html-textarea","title":"Page Overview","key":"page_overview","id":"zYuPyDtTWY","value":""},{"children":null,"type":"html-textarea","title":"SEO Content","key":"seo_content","id":"6dT4bcaDeW","value":""}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-22T23:07:51.159Z","created_by":"5357ef811693be2118000001","created":"2017-04-22T23:07:51.159Z","status":"published","modified_at":"2020-09-30T14:01:38.940Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-09-30T14:01:38.940Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/7171a4d0-27b0-11e7-b6ae-8108cf4caa96-nodejs.svg","imgix_url":"https://imgix.cosmicjs.com/7171a4d0-27b0-11e7-b6ae-8108cf4caa96-nodejs.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/759e85a0-27b0-11e7-b6ae-8108cf4caa96-nodejs.svg","imgix_url":"https://imgix.cosmicjs.com/759e85a0-27b0-11e7-b6ae-8108cf4caa96-nodejs.svg"},"blurb":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for Node.js websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Node.js","seo_description":"Cosmic is the best Node.js Headless CMS on the market. Use the GraphQL, REST, and other API tools to integrate with any website or app.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/753075c0-2aca-11e7-ae54-e9a1fc58ec22-node.jpg","imgix_url":"https://imgix.cosmicjs.com/753075c0-2aca-11e7-ae54-e9a1fc58ec22-node.jpg"},"code_example":"","seo_title":"The Best Headless CMS for Node.js","videos":[{"title":"Getting Started with Cosmic CMS and Next.js (Part 1)","link":"https://www.youtube.com/embed/NZA1dF2IDqQ?showinfo=0&wmode=opaque"},{"title":"Building a Blog with Cosmic CMS and Next.js (Part 2)","link":"https://www.youtube.com/embed/sdvdwo3g3PE?showinfo=0&wmode=opaque"}],"apps_search_term":"","articles_search_term":"","page_overview":"","seo_content":""}},{"_id":"5aea0bb75958540e8514e67e","order":3,"slug":"customer-success-executive","title":"Customer Success Executive","content":"<p>Cosmic is transforming the way content is created and delivered to the world. We provide a headless CMS to help teams build modern content-powered apps together.</p><p>We are currently looking for an Customer Success Executive to help our customers get more value out of their use of Cosmic.</p><p>If selected to join our team, you would be expected to be self-starting and provide quality, quantifiable results for our remote-first company.</p><p>Contact <a href=\"mailto:jobs@cosmicjs.com\"></a><a href=\"mailto:jobs@cosmicjs.com?subject=Developer%20Advocate\"></a><a href=\"mailto:jobs@cosmicjs.com?subject=Customer%20Success%20Executive\">jobs@cosmicjs.com</a> with the subject &quot;Customer Success Executive&quot; to apply.</p>","metafields":[{"children":null,"type":"textarea","title":"Teaser","key":"teaser","id":"ZZvzt6G8RN","value":"As an Customer Success Executive at Cosmic, you will help our customers get more value out of their use of Cosmic"},{"children":null,"type":"text","title":"Font Awesome Icon","key":"font_awesome_icon","id":"jhGgJgAunT","value":"fa-users"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"jobs","created_at":"2018-05-02T19:04:23.318Z","created_by":"5716b504e9c686d006000073","created":"2018-05-02T19:04:23.318Z","status":"published","modified_at":"2020-10-02T02:11:12.546Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-05-18T13:19:36.442Z","unpublish_at":null,"metadata":{"teaser":"As an Customer Success Executive at Cosmic, you will help our customers get more value out of their use of Cosmic","font_awesome_icon":"fa-users"}},{"_id":"5ef386b138f28e0008b99776","slug":"drupal-headless-cms","title":"Drupal Headless CMS","content":"<p><span style=\"color: rgb(88, 96, 105);\">Drupal has been around for a long time, since 2001, making it ancient in internet years. It&#39;s built a wide-reaching ecosystem and brand recognition in the open source CMS space. <span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\">However, as it tries to keep up with new Headless CMS solutions, <span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\">it is showing its age</span></span>. <span style=\"color: rgb(88, 96, 105);\">Cosmic is an alternative to Drupal that your developers and content creators will love.</span></span></span></span></p><p><br></p><h3>Monolithic vs Headless CMS</h3><p><span style=\"color: rgb(88, 96, 105);\">Drupal, as a monolithic CMS, and other older installed CMS systems like it, comes with a coupled front end application layer that requires additional development and maintenance. <span style=\"color: rgb(88, 96, 105);\">Cosmic is a Headless CMS meaning that the content API and presentation layer are decoupled which gives your team greater flexibility when it comes to where your content can go.</span></span></p><p><span style=\"color: rgb(88, 96, 105);\">Cosmic provides everything your team of developers and content creators need: powerful and intuitive APIs for developers, and an easy-to-use dashboard for content creators. We&#39;ve removed all complexity and CMS maintenance, so your team can focus on building great products faster, together.</span></p><h3><br>But can&#39;t Drupal go Headless?</h3><p><span style=\"color: rgb(88, 96, 105);\">Although you CAN make Drupal a Headless CMS, you still have a lot of work to do to bring it up to the level of an optimized CMS system that&#39;s truly headless. <span style=\"color: rgb(88, 96, 105);\">And along with<span style=\"color: rgb(88, 96, 105);\">&nbsp;your application,</span> you will need to maintain the CMS itself, adding more development costs and <span style=\"color: rgb(88, 96, 105);\">taking away focus from</span> what really matter<span style=\"color: rgb(88, 96, 105);\">s: creating great content and user experiences.</span></span></span></p>","metafields":[{"children":null,"type":"text","title":"Vendor Name","key":"vendor_name","id":"1AHNoBihoX","value":"Drupal Headless CMS"},{"children":null,"type":"file","title":"Logo","key":"logo","id":"M9SdGCQyP7","value":"65a7e8a0-b577-11ea-8df1-6dc611c1b567-drupal-headless-cms.png","url":"https://cdn.cosmicjs.com/65a7e8a0-b577-11ea-8df1-6dc611c1b567-drupal-headless-cms.png","imgix_url":"https://imgix.cosmicjs.com/65a7e8a0-b577-11ea-8df1-6dc611c1b567-drupal-headless-cms.png"},{"children":null,"type":"textarea","title":"Tech","key":"tech","id":"L9iv7AVRDP","value":"LAMP: Linux, Apache, MySQL database, PHP."},{"children":null,"type":"textarea","title":"Scalability","key":"scalability","id":"xiqtajVd4p","value":"Does not scale easily. Limited by your servers, hosting provider, and budget."},{"children":null,"type":"textarea","title":"Security","key":"security","id":"jDWPuYbCCN","value":"You manage the security yourself. No default data encryption at rest or in transit."},{"children":null,"type":"textarea","title":"Maintenance","key":"maintenance","id":"uy7DTAiGzy","value":"You deploy, host, and maintain everything yourself. Along with your application and content, you need to maintain updates and security for your CMS system."},{"children":null,"type":"textarea","title":"Caching","key":"caching","id":"iNZL7cEsQK","value":"No caching included out of the box."},{"children":null,"type":"textarea","title":"Media CDN","key":"media_cdn","id":"fzX7vsutNM","value":"No CDN included out of the box."},{"children":null,"type":"textarea","title":"Image Processing","key":"image_processing","id":"VPVIGhsCZg","value":"Manually manage your own image sizes and optimizations."},{"children":null,"type":"textarea","title":"Extendability","key":"extendability","id":"r5DHJxsaJI","value":"Themes and plugins."},{"children":null,"type":"textarea","title":"Front end","key":"front_end","id":"CZ3AkBbkj0","value":"Front end is coupled with backend CMS."},{"children":null,"type":"textarea","title":"Number of Projects","key":"number_of_projects","id":"igXKCHu47v","value":"One login, one website."},{"children":null,"type":"html-textarea","title":"Costs","key":"costs","id":"Et7SwUDVuX","value":"<p>You will need to hire developer resources. Average salary of a full-stack developer is <a href=\"https://neuvoo.com/salary/?job=Full+Stack+Developer\" target=\"_blank\">$111,600 per year</a>. You may need to hire 1-3 developers to maintain the CMS.</p>"},{"children":null,"type":"switch","title":"Include in link list","key":"include_in_link_list","id":"l6ED5O7HGb","value":true,"options":"yes,no"},{"children":null,"type":"text","title":"Cost Value","key":"cost_value","id":"iOhEU0Xc11","value":"$223,200"},{"children":null,"type":"text","title":"Cost Text","key":"cost_text","id":"MlkzD0D4it","value":"per year"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"cms-competitors","created":"2020-06-24T17:00:33.175Z","created_at":"2020-06-24T17:00:33.175Z","modified_at":"2020-06-28T20:52:37.297Z","status":"published","locale":null,"modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-28T20:52:37.297Z","unpublish_at":null,"order":3,"metadata":{"vendor_name":"Drupal Headless CMS","logo":{"url":"https://cdn.cosmicjs.com/65a7e8a0-b577-11ea-8df1-6dc611c1b567-drupal-headless-cms.png","imgix_url":"https://imgix.cosmicjs.com/65a7e8a0-b577-11ea-8df1-6dc611c1b567-drupal-headless-cms.png"},"tech":"LAMP: Linux, Apache, MySQL database, PHP.","scalability":"Does not scale easily. Limited by your servers, hosting provider, and budget.","security":"You manage the security yourself. No default data encryption at rest or in transit.","maintenance":"You deploy, host, and maintain everything yourself. Along with your application and content, you need to maintain updates and security for your CMS system.","caching":"No caching included out of the box.","media_cdn":"No CDN included out of the box.","image_processing":"Manually manage your own image sizes and optimizations.","extendability":"Themes and plugins.","front_end":"Front end is coupled with backend CMS.","number_of_projects":"One login, one website.","costs":"<p>You will need to hire developer resources. Average salary of a full-stack developer is <a href=\"https://neuvoo.com/salary/?job=Full+Stack+Developer\" target=\"_blank\">$111,600 per year</a>. You may need to hire 1-3 developers to maintain the CMS.</p>","include_in_link_list":true,"cost_value":"$223,200","cost_text":"per year"}},{"_id":"63a354f2e0454f00086388cc","order":3,"slug":"cosmic-year-in-review-2022","title":"Cosmic Year in Review","content":"<p><img src=\"https://imgix.cosmicjs.com/751edbb0-8165-11ed-a98f-051589794d26-cosmic-2022.png?w=1200&auto=format\" data-name=\"cosmic-2022.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>2022 was a productive year for us at Cosmic. I am proud of the progress we&#39;ve made this year and stoked for more great things to come in 2023. Read about some of the highlights in the recap below:</p><h2>2022 Highlights</h2><p><strong>New dashboard progress</strong><br>Over the course of the year, we have been building, what can only be described in my humble opinion, as the best content management system in the world. Starting from the ground up, we have reimagined the experience, building it with hand-crafted precision.</p><p>Special thanks goes to the customers who have been helping to provide feedback along the way 🙌 We are coming very close to a beta release, and are looking forward to getting it into your hands for wider release, so stay tuned!</p><p style=\"text-align: center;\"><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/a0804990-8167-11ed-a98f-051589794d26-dashboard-preview.mp4\" loop=\"\" muted=\"\" playsinline=\"\" src=\"\">Your browser does not support HTML5 video.</video></span><br>The beautiful new dashboard 😍</p><p><strong>Infrastructure updates</strong><br>We are grateful to you for choosing Cosmic to host and deliver your mission-critical content. With this trust comes our commitment to providing a resilient and performant service for your team and your customers, wherever they are in the world. This year we shipped <a href=\"https://www.cosmicjs.com/blog/global-infrastructure-updates\">a big update</a> to make our global infrastructure more resilient, adding multiple regions to our data centers as well as making the dashboard up to three times faster.</p><p><img src=\"https://imgix.cosmicjs.com/fb967680-e4a9-11eb-aaa7-f94d35ca882e-1626270428681.jpg?w=1200&auto=format\" data-name=\"1626270428681.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><strong>Educational resources</strong><br>Along with updates to improve the service experience, we&#39;ve continued efforts to teach about the value of decoupling content from code to make your team more efficient and productive.</p><p>We offered new educational resources in <a href=\"https://www.cosmicjs.com/changelog/new-docs-examples\" rel=\"noopener noreferrer\" target=\"_blank\">our documentation</a> to help you learn about the powerful capabilities of the Cosmic API.</p><p>We provided how-to articles to help you learn how you can use Cosmic to power content for various use cases such as a <a href=\"https://www.cosmicjs.com/apps/developer-portfolio\" rel=\"noopener noreferrer\" target=\"_blank\">developer portfolio</a>, <a href=\"https://www.cosmicjs.com/apps/nextjs-restaurant-website\" rel=\"noopener noreferrer\" target=\"_blank\">restaurant website</a>, and <a href=\"https://www.cosmicjs.com/apps/nextjs-non-profit-website\" rel=\"noopener noreferrer\" target=\"_blank\">non-profit website</a>.</p><p><a href=\"https://www.cosmicjs.com/apps/developer-portfolio\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://imgix.cosmicjs.com/ab80e820-f7c6-11ec-8f84-3f01a4a22fe2-developer-portfolio-cover-2.png?w=1200&auto=format\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></a></p><p>As the year ends, and the web3 world seems to have vanished like a thief in the night, we offered a <a href=\"https://www.cosmicjs.com/apps/unft-marketplace\" rel=\"noopener noreferrer\" target=\"_blank\">digital art marketplace website</a> powered by good old fashioned centralized API services: Cosmic and Stripe.</p><p><a href=\"https://www.cosmicjs.com/apps/unft-marketplace\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://imgix.cosmicjs.com/d2327370-0195-11ed-b7be-d956591ad437-home-dark.gif?w=1000\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></a></p><p>We even <a href=\"https://www.cosmicjs.com/blog/introducing-build-time-a-new-podcast-by-cosmic\">launched a podcast</a> to help you learn more about Cosmic and the latest technology trends to help you build modern apps using powerful tools (Follow Build Time on <a href=\"https://www.youtube.com/@CosmicJS\" rel=\"noopener noreferrer\" target=\"_blank\">YouTube</a> and <a href=\"https://open.spotify.com/show/2KKUCT7VbhJD6yzwGWZbfr\" rel=\"noopener noreferrer\" target=\"_blank\">Spotify</a>!)</p><p><a href=\"https://www.youtube.com/@CosmicJS\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://imgix.cosmicjs.com/d6c91900-11f0-11ed-b476-13ceb56f12f2-banner.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></a></p><h2>2023 and onward 🚀</h2><p>I&#39;m proud of our accomplishments in 2022 and excited for what&#39;s to come in 2023. This year, we not only focused on building a world-class product for our customers, we&#39;ve also focused on building and strengthening a world-class team. And for\r\nthe Cosmic team I am very proud and grateful. But our work is not done yet, it is just beginning!</p><p>At Cosmic, we will continue to focus on helping teams build great products to better share their content with the world. It&#39;s a beautiful mission that I feel fortunate to be working on.</p><p>Cheers to a productive 2022 and we can&#39;t wait to see what you build in 2023 🥂<br><br>Tony Spiro<br>Cosmic CEO</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"AxgVe8LCgw","value":"5768b253163172890e00002c","required":true,"object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"VoIS1r71Zd","value":"<p>2022 was a productive year for us at Cosmic. I am proud of the progress we&#39;ve made this year and stoked for more great things to come in 2023.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"OwYxg9MEaf","value":"751edbb0-8165-11ed-a98f-051589794d26-cosmic-2022.png","url":"https://cdn.cosmicjs.com/751edbb0-8165-11ed-a98f-051589794d26-cosmic-2022.png","imgix_url":"https://imgix.cosmicjs.com/751edbb0-8165-11ed-a98f-051589794d26-cosmic-2022.png"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"EQuHOEDJFB","value":"2022 was a productive year for us at Cosmic. I am proud of the progress we've made this year and stoked for more great things to come in 2023."},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"EdNSlOqbJJ","value":"2022-12-22"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2022-12-21T18:48:17.853Z","created_by":"5357ef811693be2118000001","modified_at":"2022-12-22T16:32:57.573Z","created":"2022-12-21T18:48:17.854Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/751edbb0-8165-11ed-a98f-051589794d26-cosmic-2022.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2022-12-22T16:32:57.573Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>2022 was a productive year for us at Cosmic. I am proud of the progress we&#39;ve made this year and stoked for more great things to come in 2023.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/751edbb0-8165-11ed-a98f-051589794d26-cosmic-2022.png","imgix_url":"https://imgix.cosmicjs.com/751edbb0-8165-11ed-a98f-051589794d26-cosmic-2022.png"},"seo_meta_description":"2022 was a productive year for us at Cosmic. I am proud of the progress we've made this year and stoked for more great things to come in 2023.","published_date":"2022-12-22"}},{"_id":"5d235aaf957da74a7c432562","slug":"headless-cms-for-press-websites","title":"Headless CMS for Press Websites","content":"<p>Global organizations use the Cosmic Headless CMS to publish content like blogs, news updates, press releases, quarterly financials, case studies and more. With Cosmic, press teams can publish multi-language content localized to over 400 regions, all from the same Dashboard. Approval <a href=\"https://www.cosmicjs.com/headless-cms/team-workflows\">Workflows</a>, <a href=\"https://www.cosmicjs.com/headless-cms/revision-history\">Revision History</a> and <a href=\"https://www.cosmicjs.com/headless-cms/content-preview\">Content Preview</a> assist press directors as they manage content for upcoming campaigns in collaboration with their content creators. The Cosmic headless CMS approach promotes the most collaboration and flexibility for your team.<br><br></p><p>All content stored in Cosmic is available for easy <a href=\"https://www.cosmicjs.com/headless-cms/import-export\">export</a> and reuse, so press content can live forever and be migrated from project to project.&nbsp;</p>","metafields":[{"children":null,"type":"text","title":"Solution Name","key":"solution_name","id":"rcgbKYTwDb","value":"Press Websites"},{"children":null,"type":"file","title":"Image","key":"image","id":"RUdMyB2eTV","value":"39b60450-9f54-11e9-ac09-4be8a5631b5e-Hostmaker.png","url":"https://cdn.cosmicjs.com/39b60450-9f54-11e9-ac09-4be8a5631b5e-Hostmaker.png","imgix_url":"https://imgix.cosmicjs.com/39b60450-9f54-11e9-ac09-4be8a5631b5e-Hostmaker.png"},{"children":null,"type":"objects","title":"Case Studies","key":"case_studies","id":"M2C9X1oO3n","value":"596663e8880d69fb6c000194,5b743e111a739a78a5f0725b,5be9ca96cc3f3e2ce66ce511","object_type":"case-studies","objects":[{"_id":"596663e8880d69fb6c000194","slug":"joblift-elevates-their-stack","title":"Joblift Elevates Their Stack ","content":"<p>In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, <a href=\"https://joblift.co.uk\" rel=\"noopener noreferrer\" target=\"_blank\">Joblift</a> seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/16ac66c0-03d7-11e9-a9c3-c1326db90b81-DrzF-2BX0AA0WTE.jpg-large.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Joblift manages localized content to serve Job, Press and Blog feeds to its various markets, including the UK, Netherlands and Germany. Easy user roles and permissions equip their team with the tools they need to seamlessly run a global organization.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic has completely sped up our ability to upload our content easily and efficiently. With Cosmic we now have a smooth process for uploading press releases which reflects the quality content on our website.&rdquo;</p><p><cite>&mdash; Ashleigh Grady, Content Editor and Marketing Manager</cite></p></blockquote>","metafields":[{"value":"Joblift","key":"company","title":"Company","type":"text","children":null},{"value":"Career Services","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T18:01:12.194Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-12-19T21:44:38.361Z"},{"_id":"5b743e111a739a78a5f0725b","slug":"hostmaker-manages-localized-content","title":"Hostmaker Manages Localized Content ","content":"<p><a href=\"https://hostmaker.com/gb/london/\" rel=\"noopener noreferrer\" target=\"_blank\">Hostmaker</a> is a property management company that operates across 9 cities in 6 countries. Hostmaker manages properties that are being rented to vacationers and lodgers from around the world. They take the hosts&#39; home and provide cleaning and decor services prior to listing the location on up to 15 various travel booking platforms. Hostmaker&#39;s hosts love the service for the superior volume that they continue to deliver compared to their competitors, which are driven by proprietary pricing strategies, local market expertise and global industry experience.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/18ece0f0-a64d-11e8-a7de-db2e81aae7c3-IMG_4191.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Hostmaker&#39;s tech team needed a solution for their product marketing managers to update Landing Pages, Case Studies, Press Releases and FAQs for the various markets they manage, including cities such as Rome, London and Barcelona. Localizing content for Hostmaker&#39;s audiences is a mission-critical piece of the marketing strategy that is driving such tremendous growth. Hostmaker chose Cosmic to give their cross-functional team the tools they need to perform their jobs. Now Hostmaker&#39;s developers can build reusable components and scalable content models while their marketers can manage content specific to a particular locale.&nbsp;</p><p style=\"text-align: center;\"><br></p><p><br></p><div class=\"fr-embedly      \" data-original-embed=\"<a href='https://twitter.com/HOSTMAKERCo/status/1035198450739097600' class='embedly-card'></a>\"><a href=\"https://twitter.com/HOSTMAKERCo/status/1035198450739097600\" class=\"embedly-card\"></a></div><p><br></p><p><br></p><blockquote><p>&quot;We&rsquo;ve been using Cosmic for around a year. At first there were some issues with components that prohibited us from performing all our desired tasks, but all those issues were quickly solved by the Cosmic Team. As of now, the tools are great, and have even improved during our use of the platform. It does all the things we need at the moment. As a tool Cosmic has been not only ideal for managing components on the site but adaptive enough for our non-tech users to create landing pages and modify existing content, saving us precious dev time.&rdquo;</p><p><br></p><p><cite>&mdash; Hostmaker Digital Team</cite></p></blockquote>","metafields":[{"value":"Hostmaker","key":"company","title":"Company","type":"text","children":null},{"value":"Hospitality ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Hostmaker is a property management company that operates across 9 cities in 6 countries. Hostmaker manages properties that are being rented to vacationers and lodgers from around the world. They take the hosts' home and provide cleaning and decor services prior to listing the location on up to 15 various travel booking platforms. Hostmaker's hosts love the service for the superior volume that they continue to deliver compared to their competitors, which are driven by proprietary pricing strategies, local market expertise and global industry experience. \n\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-01T22:26:36.367Z","created_by":"5716b504e9c686d006000073","created":"2018-08-15T14:52:01.115Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-09-25T15:10:44.600Z"},{"_id":"5be9ca96cc3f3e2ce66ce511","slug":"road-redemption-launches-a-marketing-microsite","title":"Road Redemption Launches a Marketing Microsite","content":"<p dir=\"ltr\"><a href=\"http://www.tripwireinteractive.com\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a>, a leading entertainment software developer and publisher founded in 2005, recently launched its corporate website on Cosmic. The Tripwire Interactive team can now easily manage microsite content for each game with a dedicated studio manager as its content creator. This is important as Tripwire is always debuting new marketing campaigns to accompany game launches.&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/88ed0170-e6ab-11e8-93f0-a94cde6f34a7-22181530_1681202368577875_2605572198226217292_o.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><a href=\"http://roadredemption.tripwireinteractive.com\" rel=\"noopener noreferrer\" target=\"_blank\">Road Redemption</a> is the first of many games to have innovative content creator access provided via a headless CMS API that delivers the best of both worlds for cross-functional teams. <a href=\"https://cosmicjs.com/case-studies/tripwire-interactive-builds-a-react-corporate-website\" rel=\"noopener noreferrer\" target=\"_blank\">Read more</a> about how Tripwire Interactive builds apps faster using Cosmic.</p><p dir=\"ltr\"><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team\r\nhas been enjoying the ease of use with the new system.&quot;</p><p><cite>&mdash; Owen Liversidge, Lead Developer</cite></p></blockquote><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1395df80-e6ad-11e8-93f0-a94cde6f34a7-BIJMnRzCcAAcEDC.png-large.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"Road Redemption ","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Tripwire Interactive, a leading entertainment software developer and publisher founded in 2005, recently launched its corporate website on Cosmic. The Tripwire Interactive team can now easily manage microsite content for each game with a dedicated studio manager as its content creator. This is important as Tripwire is always debuting new marketing campaigns to accompany game launches. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png","imgix_url":"https://imgix.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-11-12T18:46:46.371Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-11-13T21:30:43.964Z"}]},{"children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"react-cosmedium-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"simple-react-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"simple-vue-blog","type":"text","required":false}]}],"type":"repeater","title":"App Slugs","key":"app_slugs","id":"nAhl8qK6YO","value":"react-cosmedium-blog","repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}]},{"children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"wordpress-importer","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"unsplash-photos","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"onesignal","type":"text","required":false}]}],"type":"repeater","title":"Extension Slugs","key":"extension_slugs","id":"bUu2BQkiLt","value":"wordpress-importer","repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}]},{"children":null,"type":"html-textarea","title":"Testimonial","key":"testimonial","id":"YaGtL7K5fz","value":"<p>&quot;As a tool Cosmic has been not only ideal for managing components on the site but adaptive enough for our non-tech users to create landing pages and modify existing content, saving us precious dev time.&rdquo;</p>"},{"children":null,"type":"text","title":"Testimonial Credit","key":"testimonial_credit","id":"L9c2N6jzBK","value":"Hostmaker Digital Team"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created":"2019-07-08T15:01:03.706Z","created_at":"2019-07-08T15:01:03.706Z","modified_at":"2020-08-10T14:05:12.245Z","status":"published","locale":null,"published_at":"2020-06-16T20:45:38.770Z","modified_by":"5357ef811693be2118000001","publish_at":null,"order":3,"unpublish_at":null,"metadata":{"solution_name":"Press Websites","image":{"url":"https://cdn.cosmicjs.com/39b60450-9f54-11e9-ac09-4be8a5631b5e-Hostmaker.png","imgix_url":"https://imgix.cosmicjs.com/39b60450-9f54-11e9-ac09-4be8a5631b5e-Hostmaker.png"},"case_studies":[{"_id":"596663e8880d69fb6c000194","slug":"joblift-elevates-their-stack","title":"Joblift Elevates Their Stack ","content":"<p>In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, <a href=\"https://joblift.co.uk\" rel=\"noopener noreferrer\" target=\"_blank\">Joblift</a> seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/16ac66c0-03d7-11e9-a9c3-c1326db90b81-DrzF-2BX0AA0WTE.jpg-large.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Joblift manages localized content to serve Job, Press and Blog feeds to its various markets, including the UK, Netherlands and Germany. Easy user roles and permissions equip their team with the tools they need to seamlessly run a global organization.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic has completely sped up our ability to upload our content easily and efficiently. With Cosmic we now have a smooth process for uploading press releases which reflects the quality content on our website.&rdquo;</p><p><cite>&mdash; Ashleigh Grady, Content Editor and Marketing Manager</cite></p></blockquote>","metafields":[{"value":"Joblift","key":"company","title":"Company","type":"text","children":null},{"value":"Career Services","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T18:01:12.194Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-12-19T21:44:38.361Z","metadata":{"company":"Joblift","industry_type":"Career Services","teaser":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","logo":{"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}}},{"_id":"5b743e111a739a78a5f0725b","slug":"hostmaker-manages-localized-content","title":"Hostmaker Manages Localized Content ","content":"<p><a href=\"https://hostmaker.com/gb/london/\" rel=\"noopener noreferrer\" target=\"_blank\">Hostmaker</a> is a property management company that operates across 9 cities in 6 countries. Hostmaker manages properties that are being rented to vacationers and lodgers from around the world. They take the hosts&#39; home and provide cleaning and decor services prior to listing the location on up to 15 various travel booking platforms. Hostmaker&#39;s hosts love the service for the superior volume that they continue to deliver compared to their competitors, which are driven by proprietary pricing strategies, local market expertise and global industry experience.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/18ece0f0-a64d-11e8-a7de-db2e81aae7c3-IMG_4191.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Hostmaker&#39;s tech team needed a solution for their product marketing managers to update Landing Pages, Case Studies, Press Releases and FAQs for the various markets they manage, including cities such as Rome, London and Barcelona. Localizing content for Hostmaker&#39;s audiences is a mission-critical piece of the marketing strategy that is driving such tremendous growth. Hostmaker chose Cosmic to give their cross-functional team the tools they need to perform their jobs. Now Hostmaker&#39;s developers can build reusable components and scalable content models while their marketers can manage content specific to a particular locale.&nbsp;</p><p style=\"text-align: center;\"><br></p><p><br></p><div class=\"fr-embedly      \" data-original-embed=\"<a href='https://twitter.com/HOSTMAKERCo/status/1035198450739097600' class='embedly-card'></a>\"><a href=\"https://twitter.com/HOSTMAKERCo/status/1035198450739097600\" class=\"embedly-card\"></a></div><p><br></p><p><br></p><blockquote><p>&quot;We&rsquo;ve been using Cosmic for around a year. At first there were some issues with components that prohibited us from performing all our desired tasks, but all those issues were quickly solved by the Cosmic Team. As of now, the tools are great, and have even improved during our use of the platform. It does all the things we need at the moment. As a tool Cosmic has been not only ideal for managing components on the site but adaptive enough for our non-tech users to create landing pages and modify existing content, saving us precious dev time.&rdquo;</p><p><br></p><p><cite>&mdash; Hostmaker Digital Team</cite></p></blockquote>","metafields":[{"value":"Hostmaker","key":"company","title":"Company","type":"text","children":null},{"value":"Hospitality ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Hostmaker is a property management company that operates across 9 cities in 6 countries. Hostmaker manages properties that are being rented to vacationers and lodgers from around the world. They take the hosts' home and provide cleaning and decor services prior to listing the location on up to 15 various travel booking platforms. Hostmaker's hosts love the service for the superior volume that they continue to deliver compared to their competitors, which are driven by proprietary pricing strategies, local market expertise and global industry experience. \n\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-01T22:26:36.367Z","created_by":"5716b504e9c686d006000073","created":"2018-08-15T14:52:01.115Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-09-25T15:10:44.600Z","metadata":{"company":"Hostmaker","industry_type":"Hospitality ","teaser":"Hostmaker is a property management company that operates across 9 cities in 6 countries. Hostmaker manages properties that are being rented to vacationers and lodgers from around the world. They take the hosts' home and provide cleaning and decor services prior to listing the location on up to 15 various travel booking platforms. Hostmaker's hosts love the service for the superior volume that they continue to deliver compared to their competitors, which are driven by proprietary pricing strategies, local market expertise and global industry experience. \n\n\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg"}}},{"_id":"5be9ca96cc3f3e2ce66ce511","slug":"road-redemption-launches-a-marketing-microsite","title":"Road Redemption Launches a Marketing Microsite","content":"<p dir=\"ltr\"><a href=\"http://www.tripwireinteractive.com\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a>, a leading entertainment software developer and publisher founded in 2005, recently launched its corporate website on Cosmic. The Tripwire Interactive team can now easily manage microsite content for each game with a dedicated studio manager as its content creator. This is important as Tripwire is always debuting new marketing campaigns to accompany game launches.&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/88ed0170-e6ab-11e8-93f0-a94cde6f34a7-22181530_1681202368577875_2605572198226217292_o.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><a href=\"http://roadredemption.tripwireinteractive.com\" rel=\"noopener noreferrer\" target=\"_blank\">Road Redemption</a> is the first of many games to have innovative content creator access provided via a headless CMS API that delivers the best of both worlds for cross-functional teams. <a href=\"https://cosmicjs.com/case-studies/tripwire-interactive-builds-a-react-corporate-website\" rel=\"noopener noreferrer\" target=\"_blank\">Read more</a> about how Tripwire Interactive builds apps faster using Cosmic.</p><p dir=\"ltr\"><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team\r\nhas been enjoying the ease of use with the new system.&quot;</p><p><cite>&mdash; Owen Liversidge, Lead Developer</cite></p></blockquote><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1395df80-e6ad-11e8-93f0-a94cde6f34a7-BIJMnRzCcAAcEDC.png-large.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"Road Redemption ","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Tripwire Interactive, a leading entertainment software developer and publisher founded in 2005, recently launched its corporate website on Cosmic. The Tripwire Interactive team can now easily manage microsite content for each game with a dedicated studio manager as its content creator. This is important as Tripwire is always debuting new marketing campaigns to accompany game launches. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png","imgix_url":"https://imgix.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-11-12T18:46:46.371Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-11-13T21:30:43.964Z","metadata":{"company":"Road Redemption ","industry_type":"Gaming","teaser":"Tripwire Interactive, a leading entertainment software developer and publisher founded in 2005, recently launched its corporate website on Cosmic. The Tripwire Interactive team can now easily manage microsite content for each game with a dedicated studio manager as its content creator. This is important as Tripwire is always debuting new marketing campaigns to accompany game launches. \n","logo":{"url":"https://cdn.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png","imgix_url":"https://imgix.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png"}}}],"app_slugs":[{"slug":"react-cosmedium-blog"},{"slug":"simple-react-blog"},{"slug":"simple-vue-blog"}],"extension_slugs":[{"slug":"wordpress-importer"},{"slug":"unsplash-photos"},{"slug":"onesignal"}],"testimonial":"<p>&quot;As a tool Cosmic has been not only ideal for managing components on the site but adaptive enough for our non-tech users to create landing pages and modify existing content, saving us precious dev time.&rdquo;</p>","testimonial_credit":"Hostmaker Digital Team"}},{"_id":"5a01dc0d508dc15a7900002d","order":3,"slug":"big-fish-home-case-study","title":"Big Fish Home Case Study","content":"","metafields":[{"value":"c21c50b0-c3d7-11e7-8406-7bb6a804057f-fairway-solitare.png","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/c21c50b0-c3d7-11e7-8406-7bb6a804057f-fairway-solitare.png","imgix_url":"https://imgix.cosmicjs.com/c21c50b0-c3d7-11e7-8406-7bb6a804057f-fairway-solitare.png"},{"value":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch. Big Fish uses Cosmic JS to curate and update content on each of their landing pages.","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"https://cosmicjs.com/case-studies/big-fish-launches-marketing-and-tutorial-content-for-games","key":"link","title":"Link","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"home-page-case-studies","created_at":"2017-11-07T16:15:09.059Z","created_by":"5357ef811693be2118000001","created":"2017-11-07T16:15:09.059Z","status":"published","modified_at":"2017-11-07T20:45:40.325Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/c21c50b0-c3d7-11e7-8406-7bb6a804057f-fairway-solitare.png","imgix_url":"https://imgix.cosmicjs.com/c21c50b0-c3d7-11e7-8406-7bb6a804057f-fairway-solitare.png"},"teaser":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch. Big Fish uses Cosmic JS to curate and update content on each of their landing pages.","link":"https://cosmicjs.com/case-studies/big-fish-launches-marketing-and-tutorial-content-for-games"}},{"_id":"595e933ba76e1fd9730001bd","order":3,"slug":"vuejs-cms","title":"Vue.js CMS","content":"<h2>Vue.js CMS Templates</h2><p>You can use our <a href=\"https://www.cosmicjs.com/apps?q=Vue.js\">Vue.js CMS Templates</a>, which includes Vue.js CMS GitHub code examples.</p><h2>Vue.js CMS Dashboard</h2><p>Cosmic offers a Headless CMS to enable your team to build apps faster. Developers get powerful API tools, and content creators get an intuitive content management dashboard. Get started free.</p><div class=\"embdscl0\"><a class=\"embd-facebook\" href=\"https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fapp.cosmicjs.com%2Fcosmic-js%2Fedit-object%2F595e933ba76e1fd9730001bd%23e.8fp4ap.vc54re\"></a><a class=\"embd-twitter\" href=\"https://twitter.com/intent/tweet?text=RunKit&url=https%3A%2F%2Fapp.cosmicjs.com%2Fcosmic-js%2Fedit-object%2F595e933ba76e1fd9730001bd%23e.8fp4ap.vc54re&via=embedly\"></a></div>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"HnCGHSoilc","value":"c7807470-8ee9-11ea-a8ae-93035d8042eb-vuejs-cms.png","url":"https://cdn.cosmicjs.com/c7807470-8ee9-11ea-a8ae-93035d8042eb-vuejs-cms.png","imgix_url":"https://imgix.cosmicjs.com/c7807470-8ee9-11ea-a8ae-93035d8042eb-vuejs-cms.png"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"7AQzHDOQoK","value":"858dda70-6288-11e7-ab3d-9ddd8313526f-96da6390-e18a-11e6-a19e-716cc90a0c51-Vue.js_Logo.svg","url":"https://cdn.cosmicjs.com/858dda70-6288-11e7-ab3d-9ddd8313526f-96da6390-e18a-11e6-a19e-716cc90a0c51-Vue.js_Logo.svg","imgix_url":"https://imgix.cosmicjs.com/858dda70-6288-11e7-ab3d-9ddd8313526f-96da6390-e18a-11e6-a19e-716cc90a0c51-Vue.js_Logo.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"k8S5vwrsEg","value":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for Vue.js websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"JdxMZqvoPK","value":"Vue.js"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"kYZrLEpN0h","value":"Cosmic is the best CMS for Vue.js websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"0ELQruXqWF","value":"8453e9c0-eee7-11eb-849a-8548c9a99fc0-Cosmic-Vue-CMS.png","url":"https://cdn.cosmicjs.com/8453e9c0-eee7-11eb-849a-8548c9a99fc0-Cosmic-Vue-CMS.png","imgix_url":"https://imgix.cosmicjs.com/8453e9c0-eee7-11eb-849a-8548c9a99fc0-Cosmic-Vue-CMS.png"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"RflK27pQcw","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"qPowgLntuk","value":"Best Headless CMS for Vue.js"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"BoFDqqLUeP","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]},{"children":null,"type":"text","title":"Apps Search Term","key":"apps_search_term","id":"0j2XD9Gog1","value":""},{"children":null,"type":"text","title":"Articles Search Term","key":"articles_search_term","id":"8RgqbG1UTr","value":""},{"children":null,"type":"text","title":"Page Overview Title","key":"page_overview_title","id":"gj036836gx4c73fpdjzb","value":""},{"children":null,"type":"html-textarea","title":"Page Overview","key":"page_overview","id":"iSVFzvAn9h","value":""},{"children":null,"type":"html-textarea","title":"SEO Content","key":"seo_content","id":"lcsUSsZiB9","value":""},{"children":[],"type":"repeater","title":"Apps","key":"apps","id":"dkpxmwigd1z8x4ants9f","value":"","repeater_fields":[{"title":"App Slug","key":"app_slug","value":"","type":"text","required":false}]},{"children":[],"type":"repeater","title":"Articles","key":"articles","id":"dwil4bqojngnkej4v85k","value":"","repeater_fields":[{"title":"Article Slug","key":"article_slug","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-22T23:07:51.159Z","created_by":"5357ef811693be2118000001","created":"2017-07-06T19:44:59.812Z","status":"published","modified_at":"2021-07-27T14:32:51.045Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2021-07-27T14:32:51.045Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/c7807470-8ee9-11ea-a8ae-93035d8042eb-vuejs-cms.png","imgix_url":"https://imgix.cosmicjs.com/c7807470-8ee9-11ea-a8ae-93035d8042eb-vuejs-cms.png"},"thumbnail":{"url":"https://cdn.cosmicjs.com/858dda70-6288-11e7-ab3d-9ddd8313526f-96da6390-e18a-11e6-a19e-716cc90a0c51-Vue.js_Logo.svg","imgix_url":"https://imgix.cosmicjs.com/858dda70-6288-11e7-ab3d-9ddd8313526f-96da6390-e18a-11e6-a19e-716cc90a0c51-Vue.js_Logo.svg"},"blurb":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for Vue.js websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Vue.js","seo_description":"Cosmic is the best CMS for Vue.js websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/8453e9c0-eee7-11eb-849a-8548c9a99fc0-Cosmic-Vue-CMS.png","imgix_url":"https://imgix.cosmicjs.com/8453e9c0-eee7-11eb-849a-8548c9a99fc0-Cosmic-Vue-CMS.png"},"code_example":"","seo_title":"Best Headless CMS for Vue.js","videos":[],"apps_search_term":"","articles_search_term":"","page_overview_title":"","page_overview":"","seo_content":"","apps":[],"articles":[]}},{"_id":"5ea1b8776bc68d0007e51bd3","slug":"katie-prowd","title":"Katie Prowd","content":"","metafields":[{"children":null,"type":"textarea","title":"Testimonial","key":"testimonial","id":"dVBSAS6zOc","value":"The headless CMS we chose had to tick a lot of boxes. At the end of the day, though, it needed to be easy for our external writers to use. We recorded a quick screencast video internally showing how to set up a piece of content, sent that out to our team, and I haven’t had a question from any of our writers since."},{"children":null,"type":"text","title":"Author Name","key":"author_name","id":"yPjurVDEdy","value":"Katie Prowd"},{"children":null,"type":"text","title":"Business","key":"business","id":"kjJkGXFOFE","value":"Co-Founder of Hypometer Technologies"},{"children":null,"type":"file","title":"Author Image","key":"author_image","id":"VrOT8UtDB8","value":"cdfcd5d0-856d-11ea-856b-416510aa3c93-katie.jpeg","url":"https://cdn.cosmicjs.com/cdfcd5d0-856d-11ea-856b-416510aa3c93-katie.jpeg","imgix_url":"https://imgix.cosmicjs.com/cdfcd5d0-856d-11ea-856b-416510aa3c93-katie.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"testimonials","created":"2020-04-23T15:47:03.913Z","created_at":"2020-04-23T15:47:03.913Z","modified_at":"2020-10-02T01:48:41.244Z","status":"published","locale":null,"created_by":"56d66b2f903a79b904000001","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-04-23T15:47:37.600Z","unpublish_at":null,"order":3,"thumbnail":"https://imgix.cosmicjs.com/cdfcd5d0-856d-11ea-856b-416510aa3c93-katie.jpeg","metadata":{"testimonial":"The headless CMS we chose had to tick a lot of boxes. At the end of the day, though, it needed to be easy for our external writers to use. We recorded a quick screencast video internally showing how to set up a piece of content, sent that out to our team, and I haven’t had a question from any of our writers since.","author_name":"Katie Prowd","business":"Co-Founder of Hypometer Technologies","author_image":{"url":"https://cdn.cosmicjs.com/cdfcd5d0-856d-11ea-856b-416510aa3c93-katie.jpeg","imgix_url":"https://imgix.cosmicjs.com/cdfcd5d0-856d-11ea-856b-416510aa3c93-katie.jpeg"}}},{"_id":"5bad1c6add42057ecb90054a","slug":"algolia","title":"Algolia","content":"","metafields":[{"value":"https://cosmicjs.com/extensions/algolia-search","key":"link","title":"Link","type":"text","children":false,"has_length_edit":true,"parent":false},{"value":"95179e90-c277-11e8-9f7c-33ff0775acd8-al.jpg","key":"image","title":"Image","type":"file","children":false,"has_length_edit":false,"parent":false,"url":"https://cdn.cosmicjs.com/95179e90-c277-11e8-9f7c-33ff0775acd8-al.jpg","imgix_url":"https://imgix.cosmicjs.com/95179e90-c277-11e8-9f7c-33ff0775acd8-al.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"integrations","created":"2018-09-27T18:07:38.380Z","created_at":"2018-09-27T18:07:38.380Z","modified_at":"2018-09-27T18:07:38.380Z","status":"published","locale":null,"published_at":"2018-09-27T18:07:38.380Z","created_by":"5357ef811693be2118000001","order":3,"metadata":{"link":"https://cosmicjs.com/extensions/algolia-search","image":{"url":"https://cdn.cosmicjs.com/95179e90-c277-11e8-9f7c-33ff0775acd8-al.jpg","imgix_url":"https://imgix.cosmicjs.com/95179e90-c277-11e8-9f7c-33ff0775acd8-al.jpg"}}},{"_id":"5768b253163172890e00002c","order":3,"slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},{"_id":"5f31a4a9edba7300080e5a34","order":4,"slug":"kaya-ismail","title":"Kaya Ismail","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"hsMOJCxIAj","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D2rdKO4lEL","value":"8579d4e0-db42-11ea-84a8-4b73110d28e6-kaya-ismail.png","url":"https://cdn.cosmicjs.com/8579d4e0-db42-11ea-84a8-4b73110d28e6-kaya-ismail.png","imgix_url":"https://imgix.cosmicjs.com/8579d4e0-db42-11ea-84a8-4b73110d28e6-kaya-ismail.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2020-08-10T19:48:57.679Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-14T17:45:13.790Z","created":"2020-08-10T19:48:57.679Z","status":"published","published_at":"2020-08-10T19:48:57.679Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/8579d4e0-db42-11ea-84a8-4b73110d28e6-kaya-ismail.png","metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/8579d4e0-db42-11ea-84a8-4b73110d28e6-kaya-ismail.png","imgix_url":"https://imgix.cosmicjs.com/8579d4e0-db42-11ea-84a8-4b73110d28e6-kaya-ismail.png"}}},{"_id":"5ea2fd4df443b700079fdec4","slug":"owen-liversidge","title":"Owen Liversidge","content":"","metafields":[{"children":null,"type":"textarea","title":"Testimonial","key":"testimonial","id":"KEZY64i9i5","value":"Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team has been enjoying the ease of use with the new system."},{"children":null,"type":"text","title":"Author Name","key":"author_name","id":"hRIRsI4bjG","value":"Owen Liversidge"},{"children":null,"type":"text","title":"Business","key":"business","id":"3IRSXrKVJD","value":"Lead Developer, Tripwire Interactive"},{"children":null,"type":"file","title":"Author Image","key":"author_image","id":"4qBTG4ZvWM","value":"5531e5a0-863a-11ea-84bd-5ddd5c96ac0f-owen.jpeg","url":"https://cdn.cosmicjs.com/5531e5a0-863a-11ea-84bd-5ddd5c96ac0f-owen.jpeg","imgix_url":"https://imgix.cosmicjs.com/5531e5a0-863a-11ea-84bd-5ddd5c96ac0f-owen.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"testimonials","created":"2020-04-24T14:53:01.850Z","created_at":"2020-04-24T14:53:01.850Z","modified_at":"2020-10-02T01:48:55.987Z","status":"published","locale":null,"created_by":"56d66b2f903a79b904000001","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-10-02T01:48:55.987Z","unpublish_at":null,"order":4,"thumbnail":"https://imgix.cosmicjs.com/5531e5a0-863a-11ea-84bd-5ddd5c96ac0f-owen.jpeg","metadata":{"testimonial":"Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team has been enjoying the ease of use with the new system.","author_name":"Owen Liversidge","business":"Lead Developer, Tripwire Interactive","author_image":{"url":"https://cdn.cosmicjs.com/5531e5a0-863a-11ea-84bd-5ddd5c96ac0f-owen.jpeg","imgix_url":"https://imgix.cosmicjs.com/5531e5a0-863a-11ea-84bd-5ddd5c96ac0f-owen.jpeg"}}},{"_id":"59f49a7cee2adb545c0005bc","order":4,"slug":"life-is-good-shares-gratitude","title":"Life is Good Shares Gratitude","content":"<p>The <a href=\"https://www.lifeisgood.com/?utm_source=cosmicjs.com&utm_medium=referral&utm_campaign=gratitudewall\" rel=\"noopener noreferrer\" target=\"_blank\">Life is Good</a> community shares one simple, unifying mission: to spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add &quot;sticky notes&quot; with their name and what they are grateful for to the gratitude board.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7dbdb6b0-c59a-11e7-a9fd-155dbd0b0a76-Optimism_Tree_default.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Gratitude Wall is adapted from the Cosmic <a href=\"https://cosmicjs.com/apps/sticky-notes\" rel=\"noopener noreferrer\" target=\"_blank\">Sticky Notes App</a>, built on <a href=\"https://cosmicjs.com/knowledge-base/react-cms\" rel=\"noopener noreferrer\" target=\"_blank\">React</a>, Redux and <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a>. The Wall is currently running on Heroku and is i-framed into WordPress on its landing page. The Life is Good team also built a simple moderation application so that their team can easily approve or delete User Generated Content as it flows in. They also built client-side moderation during content entry, which checks against a banned list of words and blocks submission.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen Shot 2017-11-16 at 1.59.39 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a robust scaffolding to accept, store, and moderate User Generated Content and display it in a custom web app in real time. With Cosmic, we were able to develop an MVP in a matter of hours and focus our resources on UX and design versus content management. The Cosmic Support Team was extremely helpful throughout the process. We&rsquo;re excited to leverage these tools again for future projects.&rdquo;</p><p><cite>&mdash; Chris Schwab, Front End Engineer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Life is Good","key":"company","title":"Company","type":"text","children":null},{"value":"Ecommerce | Apparel","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-28T14:55:56.103Z","created_by":"5716b504e9c686d006000073","created":"2017-10-28T14:55:56.103Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-07-25T21:53:35.289Z","metadata":{"company":"Life is Good","industry_type":"Ecommerce | Apparel","teaser":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","logo":{"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}}},{"_id":"6424a8f8381f7c0008a471d4","order":4,"slug":"new-dashboard-public-beta-release","title":"New dashboard public beta release","content":"<p><strong>Summary</strong></p><ul><li>🎉 The new Cosmic dashboard is now in <a href=\"https://beta.cosmicjs.com/signup\" rel=\"noopener noreferrer\" target=\"_blank\">public beta</a>. This means everyone can now sign up and onboard.</li><li>📖 We have a new <a href=\"https://docs-v3.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">documentation site</a>.</li><li>🛠 We have a new <a href=\"https://www.npmjs.com/package/@cosmicjs/sdk\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic JavaScript SDK</a>.</li></ul><p>Read below to learn about the latest changes. Note: These changes are in addition to the <a href=\"https://www.cosmicjs.com/changelog/new-dashboard-private-beta-and-api-v3-release\" rel=\"noopener noreferrer\" target=\"_blank\">private beta release changelog</a>.\r\nIt is recommended you read that if you haven&#39;t already.</p><p><br><strong>Dashboard changes</strong></p><ul><li>📝 New markdown metafield.</li><li>🗃️ Content folder updates for improved content organization.</li><li>🪝 Webhook payload model updates. <a href=\"https://docs-v3.cosmicjs.com/docs/api/webhooks#the-webhook-model\" rel=\"noopener noreferrer\" target=\"_blank\">See docs</a>.</li><li>🐌 Object slugs are now unique to Object type, not Bucket.</li></ul><p><br><strong>Cosmic JavaScript SDK</strong><br>Install the new <a href=\"https://www.npmjs.com/package/@cosmicjs/sdk\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic JavaScript SDK</a> by running <code>npm i @cosmicjs/sdk</code> in your terminal. You should expect the following changes:</p><ol><li>We&#39;ve added TypeScript support. Though limited, we plan to continue to include more TypeScript support.</li><li>Simpler config and authentication methods. See <a href=\"https://docs-v3.cosmicjs.com/docs/api/authentication\" rel=\"noopener noreferrer\" target=\"_blank\">authentication in docs</a>.</li><li>Improved methods for working with Objects including:<ul><li><code>findOne</code> now returns an Object.</li><li><code>updateOne</code> only requires specifying the Object id and no longer requires the <code>$set</code> declaration.</li><li><code>deleteOne</code> only requires specifying the Object id.</li></ul></li><li>Legacy methods are no longer supported for <code>getObjects</code>, <code>getMedia</code> etc.</li><li>Much lighter package size compared to the old NPM module (only 23kb unpacked!).</li></ol><p>See more examples for all methods in the <a href=\"https://docs-v3.cosmicjs.com/docs/api\" rel=\"noopener noreferrer\" target=\"_blank\">API reference section of the new Cosmic docs</a>.</p><p>We hope you enjoy these updates. <a href=\"https://beta.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Sign up for the new dashboard</a> to begin using all of the new and improved features.</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"AskVBF6exv","value":"2023-04-04"},{"children":null,"type":"object","title":"Author","key":"author","id":"r7qeIx7SsM","value":"5ffa1d1e0046b0000799cb7b","object_type":"authors","object":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"osxO08j0Pl","value":"","url":null,"imgix_url":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2023-03-29T21:09:11.999Z","created_by":"5357ef811693be2118000001","modified_at":"2023-04-04T16:27:14.263Z","created":"2023-03-29T21:09:11.999Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/80d92080-ccdf-11ed-a5c3-fb6dd2500767-cosmic-public-beta.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2023-04-04T16:27:14.263Z","metadata":{"published_date":"2023-04-04","author":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}}},"featured_image":{"url":null,"imgix_url":null}}},{"_id":"5d235af46302053e6c92d99b","slug":"headless-cms-for-marketing-campaigns","title":"Headless CMS for Marketing Campaigns","content":"<p>Teams launching marketing campaigns, product launch countdowns and user-generated-content campaigns use the Cosmic Headless CMS to model, create and deliver content quickly. Developers are given API tools and resources to integrate content with any website or app, while marketers can manage everything from marketing copy to user-generated-data. <a href=\"https://www.cosmicjs.com/headless-cms/web-dashboard\">Content creation</a> takes minutes and marketers can easily manage campaign results as well as edit marketing copy and images without bottlenecking their development team.<br><br></p><p>Features like <a href=\"https://www.cosmicjs.com/headless-cms/scheduled-publishing\">Scheduled Publishing</a> and <a href=\"https://www.cosmicjs.com/headless-cms/webhooks\">Webhooks</a> allow teams to plan campaign releases and create workflows with third-party tools.</p>","metafields":[{"children":null,"type":"text","title":"Solution Name","key":"solution_name","id":"wZUqSnAMZu","value":"Marketing Campaigns"},{"children":null,"type":"file","title":"Image","key":"image","id":"drIIdu7WXa","value":"63cd02c0-9f54-11e9-ac09-4be8a5631b5e-91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen-Shot-2017-11-16-at-1.59.39-PM.png","url":"https://cdn.cosmicjs.com/63cd02c0-9f54-11e9-ac09-4be8a5631b5e-91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen-Shot-2017-11-16-at-1.59.39-PM.png","imgix_url":"https://imgix.cosmicjs.com/63cd02c0-9f54-11e9-ac09-4be8a5631b5e-91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen-Shot-2017-11-16-at-1.59.39-PM.png"},{"children":null,"type":"objects","title":"Case Studies","key":"case_studies","id":"2sAduEtNPU","value":"59f49a7cee2adb545c0005bc,59663607a6a3f55962000e40,59666b26c863d9eb6c0001f5","object_type":"case-studies","objects":[{"_id":"59f49a7cee2adb545c0005bc","slug":"life-is-good-shares-gratitude","title":"Life is Good Shares Gratitude","content":"<p>The <a href=\"https://www.lifeisgood.com/?utm_source=cosmicjs.com&utm_medium=referral&utm_campaign=gratitudewall\" rel=\"noopener noreferrer\" target=\"_blank\">Life is Good</a> community shares one simple, unifying mission: to spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add &quot;sticky notes&quot; with their name and what they are grateful for to the gratitude board.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7dbdb6b0-c59a-11e7-a9fd-155dbd0b0a76-Optimism_Tree_default.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Gratitude Wall is adapted from the Cosmic <a href=\"https://cosmicjs.com/apps/sticky-notes\" rel=\"noopener noreferrer\" target=\"_blank\">Sticky Notes App</a>, built on <a href=\"https://cosmicjs.com/knowledge-base/react-cms\" rel=\"noopener noreferrer\" target=\"_blank\">React</a>, Redux and <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a>. The Wall is currently running on Heroku and is i-framed into WordPress on its landing page. The Life is Good team also built a simple moderation application so that their team can easily approve or delete User Generated Content as it flows in. They also built client-side moderation during content entry, which checks against a banned list of words and blocks submission.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen Shot 2017-11-16 at 1.59.39 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a robust scaffolding to accept, store, and moderate User Generated Content and display it in a custom web app in real time. With Cosmic, we were able to develop an MVP in a matter of hours and focus our resources on UX and design versus content management. The Cosmic Support Team was extremely helpful throughout the process. We&rsquo;re excited to leverage these tools again for future projects.&rdquo;</p><p><cite>&mdash; Chris Schwab, Front End Engineer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Life is Good","key":"company","title":"Company","type":"text","children":null},{"value":"Ecommerce | Apparel","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-28T14:55:56.103Z","created_by":"5716b504e9c686d006000073","created":"2017-10-28T14:55:56.103Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-07-25T21:53:35.289Z"},{"_id":"59663607a6a3f55962000e40","slug":"big-fish-launches-marketing-and-tutorial-content-for-games","title":"Big Fish Launches Marketing and Tutorial Content for Games","content":"<p>When <a href=\"http://www.bigfishgames.com\" rel=\"noopener noreferrer\" target=\"_blank\">Big Fish</a> launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch. Big Fish wanted their game studios to have the ability to curate and update content on each of their landing pages. Other CMS systems weren&rsquo;t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b671fa80-ba81-11e7-9419-d7ce2df8354d-Screen Shot 2017-10-26 at 2.12.42 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/bf97f050-ba82-11e7-b96e-3b4c8df8fb98-Screen Shot 2017-10-26 at 2.20.03 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><blockquote><p>&quot;We use Cosmic buckets for each of our mobile game landing pages. While our API and storage usage is low, the number of buckets we need is high, which makes the new Clusters Feature a perfect solution for our company use cases. It allows us to\r\nhave a single consolidated invoice, with an overall API and data-limit, but up to 35 buckets for our use.&quot;</p><p><cite>&mdash; Jessica Chappell, Web Developer&nbsp;</cite></p></blockquote><p>Read <a href=\"http://www.bigfishgames.com/blog\" rel=\"noopener noreferrer\" target=\"_blank\">more</a> about Big Fish and their games.</p>","metafields":[{"value":"Big Fish","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T14:45:27.402Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-11-08T23:15:38.911Z"},{"_id":"59666b26c863d9eb6c0001f5","slug":"brand-new-congress-elects-a-new-cms","title":"Brand New Congress Elects a New CMS","content":"<p>Every democracy requires representation. <a href=\"https://brandnewcongress.org\" rel=\"noopener noreferrer\" target=\"_blank\">Brand New Congress</a> intends to elect a new set of representatives, and is doing so with the help of Cosmic to deliver their content via the cloud.</p><p style=\"text-align: center;\"><br><img src=\"https://cosmicjs.imgix.net/60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png\" style=\"max-width: 500px; width: 100%;\" class=\"fr-fic fr-dib\"></p><p style=\"text-align: center;\"><br></p><blockquote><p>&ldquo;Brand New Congress moved from a traditional CMS to Cosmic as part of a re-implementation of our website. It&rsquo;s been great! First, Cosmic&rsquo;s API-first approach creates a separation between content and implementation, which gave us the flexibility to implement our website in a way that made the most sense for our use case: mostly server side rendered with small React widgets, without worrying about compatibility with existing CMSes. Second, Cosmic&rsquo;s user roles &ndash; developer and editor &ndash; where the developer defines a schema and the editor edits objects within those parameters &ndash; give me (the developer) the confidence that my content editors cannot accidentally\r\nbreak the site or edit the content in some incompatible way.&rdquo;</p><p><cite>&mdash; Ben Paul Ryan Parker, Director of Technology, Brand New Congress</cite></p></blockquote>","metafields":[{"value":"Brand New Congress","key":"company","title":"Company","type":"text","children":null},{"value":"Non-Profit","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Every democracy requires representation. Brand New Congress intends to elect a new set of representatives, and is doing so with the help of Cosmic to deliver their content via the cloud. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png","imgix_url":"https://imgix.cosmicjs.com/60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T18:32:06.453Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null}]},{"children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"react-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"landing-page","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"single-page-sales-funnel","type":"text","required":false}]}],"type":"repeater","title":"App Slugs","key":"app_slugs","id":"TgYM4CSaRw","value":"react-blog","repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}]},{"children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"seo-manager","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"twitter-search","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"google-analytics","type":"text","required":false}]}],"type":"repeater","title":"Extension Slugs","key":"extension_slugs","id":"bRjruxfRIf","value":"seo-manager","repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}]},{"children":null,"type":"html-textarea","title":"Testimonial","key":"testimonial","id":"QYcLji31NN","value":"<p>&quot;Cosmic provided us with a robust scaffolding to accept, store, and moderate User Generated Content and display it in a custom web app in real time. With Cosmic, we were able to develop an MVP in a matter of hours and focus our resources on UX and design versus content management.&rdquo;</p>"},{"children":null,"type":"text","title":"Testimonial Credit","key":"testimonial_credit","id":"nTebS1PeuG","value":"Chris Schwab, Front End Engineer at Life is Good"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created":"2019-07-08T15:02:12.719Z","created_at":"2019-07-08T15:02:12.719Z","modified_at":"2020-08-10T14:05:12.245Z","status":"published","locale":null,"published_at":"2020-08-05T00:44:50.689Z","modified_by":"5357ef811693be2118000001","publish_at":null,"order":4,"unpublish_at":null,"metadata":{"solution_name":"Marketing Campaigns","image":{"url":"https://cdn.cosmicjs.com/63cd02c0-9f54-11e9-ac09-4be8a5631b5e-91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen-Shot-2017-11-16-at-1.59.39-PM.png","imgix_url":"https://imgix.cosmicjs.com/63cd02c0-9f54-11e9-ac09-4be8a5631b5e-91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen-Shot-2017-11-16-at-1.59.39-PM.png"},"case_studies":[{"_id":"59f49a7cee2adb545c0005bc","slug":"life-is-good-shares-gratitude","title":"Life is Good Shares Gratitude","content":"<p>The <a href=\"https://www.lifeisgood.com/?utm_source=cosmicjs.com&utm_medium=referral&utm_campaign=gratitudewall\" rel=\"noopener noreferrer\" target=\"_blank\">Life is Good</a> community shares one simple, unifying mission: to spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add &quot;sticky notes&quot; with their name and what they are grateful for to the gratitude board.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7dbdb6b0-c59a-11e7-a9fd-155dbd0b0a76-Optimism_Tree_default.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Gratitude Wall is adapted from the Cosmic <a href=\"https://cosmicjs.com/apps/sticky-notes\" rel=\"noopener noreferrer\" target=\"_blank\">Sticky Notes App</a>, built on <a href=\"https://cosmicjs.com/knowledge-base/react-cms\" rel=\"noopener noreferrer\" target=\"_blank\">React</a>, Redux and <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a>. The Wall is currently running on Heroku and is i-framed into WordPress on its landing page. The Life is Good team also built a simple moderation application so that their team can easily approve or delete User Generated Content as it flows in. They also built client-side moderation during content entry, which checks against a banned list of words and blocks submission.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen Shot 2017-11-16 at 1.59.39 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a robust scaffolding to accept, store, and moderate User Generated Content and display it in a custom web app in real time. With Cosmic, we were able to develop an MVP in a matter of hours and focus our resources on UX and design versus content management. The Cosmic Support Team was extremely helpful throughout the process. We&rsquo;re excited to leverage these tools again for future projects.&rdquo;</p><p><cite>&mdash; Chris Schwab, Front End Engineer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Life is Good","key":"company","title":"Company","type":"text","children":null},{"value":"Ecommerce | Apparel","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-28T14:55:56.103Z","created_by":"5716b504e9c686d006000073","created":"2017-10-28T14:55:56.103Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-07-25T21:53:35.289Z","metadata":{"company":"Life is Good","industry_type":"Ecommerce | Apparel","teaser":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","logo":{"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}}},{"_id":"59663607a6a3f55962000e40","slug":"big-fish-launches-marketing-and-tutorial-content-for-games","title":"Big Fish Launches Marketing and Tutorial Content for Games","content":"<p>When <a href=\"http://www.bigfishgames.com\" rel=\"noopener noreferrer\" target=\"_blank\">Big Fish</a> launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch. Big Fish wanted their game studios to have the ability to curate and update content on each of their landing pages. Other CMS systems weren&rsquo;t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b671fa80-ba81-11e7-9419-d7ce2df8354d-Screen Shot 2017-10-26 at 2.12.42 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/bf97f050-ba82-11e7-b96e-3b4c8df8fb98-Screen Shot 2017-10-26 at 2.20.03 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><blockquote><p>&quot;We use Cosmic buckets for each of our mobile game landing pages. While our API and storage usage is low, the number of buckets we need is high, which makes the new Clusters Feature a perfect solution for our company use cases. It allows us to\r\nhave a single consolidated invoice, with an overall API and data-limit, but up to 35 buckets for our use.&quot;</p><p><cite>&mdash; Jessica Chappell, Web Developer&nbsp;</cite></p></blockquote><p>Read <a href=\"http://www.bigfishgames.com/blog\" rel=\"noopener noreferrer\" target=\"_blank\">more</a> about Big Fish and their games.</p>","metafields":[{"value":"Big Fish","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T14:45:27.402Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-11-08T23:15:38.911Z","metadata":{"company":"Big Fish","industry_type":"Gaming","teaser":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","logo":{"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}}},{"_id":"59666b26c863d9eb6c0001f5","slug":"brand-new-congress-elects-a-new-cms","title":"Brand New Congress Elects a New CMS","content":"<p>Every democracy requires representation. <a href=\"https://brandnewcongress.org\" rel=\"noopener noreferrer\" target=\"_blank\">Brand New Congress</a> intends to elect a new set of representatives, and is doing so with the help of Cosmic to deliver their content via the cloud.</p><p style=\"text-align: center;\"><br><img src=\"https://cosmicjs.imgix.net/60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png\" style=\"max-width: 500px; width: 100%;\" class=\"fr-fic fr-dib\"></p><p style=\"text-align: center;\"><br></p><blockquote><p>&ldquo;Brand New Congress moved from a traditional CMS to Cosmic as part of a re-implementation of our website. It&rsquo;s been great! First, Cosmic&rsquo;s API-first approach creates a separation between content and implementation, which gave us the flexibility to implement our website in a way that made the most sense for our use case: mostly server side rendered with small React widgets, without worrying about compatibility with existing CMSes. Second, Cosmic&rsquo;s user roles &ndash; developer and editor &ndash; where the developer defines a schema and the editor edits objects within those parameters &ndash; give me (the developer) the confidence that my content editors cannot accidentally\r\nbreak the site or edit the content in some incompatible way.&rdquo;</p><p><cite>&mdash; Ben Paul Ryan Parker, Director of Technology, Brand New Congress</cite></p></blockquote>","metafields":[{"value":"Brand New Congress","key":"company","title":"Company","type":"text","children":null},{"value":"Non-Profit","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Every democracy requires representation. Brand New Congress intends to elect a new set of representatives, and is doing so with the help of Cosmic to deliver their content via the cloud. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png","imgix_url":"https://imgix.cosmicjs.com/60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T18:32:06.453Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"metadata":{"company":"Brand New Congress","industry_type":"Non-Profit","teaser":"Every democracy requires representation. Brand New Congress intends to elect a new set of representatives, and is doing so with the help of Cosmic to deliver their content via the cloud. \n","logo":{"url":"https://cdn.cosmicjs.com/60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png","imgix_url":"https://imgix.cosmicjs.com/60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png"}}}],"app_slugs":[{"slug":"react-blog"},{"slug":"landing-page"},{"slug":"single-page-sales-funnel"}],"extension_slugs":[{"slug":"seo-manager"},{"slug":"twitter-search"},{"slug":"google-analytics"}],"testimonial":"<p>&quot;Cosmic provided us with a robust scaffolding to accept, store, and moderate User Generated Content and display it in a custom web app in real time. With Cosmic, we were able to develop an MVP in a matter of hours and focus our resources on UX and design versus content management.&rdquo;</p>","testimonial_credit":"Chris Schwab, Front End Engineer at Life is Good"}},{"_id":"6369837ab4aff30008703195","order":4,"slug":"choosing-the-right-headless-cms","title":"Choosing the right headless CMS [A universal guide]","content":"<p><img src=\"https://imgix.cosmicjs.com/5679b3a0-6050-11ed-b192-abbbbb9eecea-choosing-the-right-headless-cms.png?w=1200&auto=format\" data-name=\"choosing-the-right-headless-cms.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br>With a variety of <a href=\"https://www.cosmicjs.com/headless-cms\">headless CMS</a> choices out there, how do you know which one to pick? Image hosting, content writing experience, and developer experience are all things to consider during this tedious process.</p><p>In this article, we&rsquo;re going to dive into the many factors to consider when choosing a headless CMS. If you&rsquo;re new to headless CMS, let this be your guide to confidently making the best choice for your project and team needs.</p><h2>The evolution of CMS</h2><p>Founded in 1982, <a href=\"https://en.wikipedia.org/wiki/FileNet\">FileNet</a> was the creator of software to help enterprises manage their content and business processes. Although this software is much different from a modern CMS, it could be coined as the very first CMS <em>ever created</em>.</p><p>About two decades later came the rise of the monolithic CMS. WordPress and Drupal would take a huge slice of the pie in this market, with WordPress being one of the most used CMS in the world. In the year 2022, there are about <a href=\"https://www.manaferra.com/wordpress-statistics/#:~:text=The%20number%20of%20WordPress%20websites,the%20total%20number%20of%20websites\">835 million WordPress sites</a> currently active on the internet.</p><p>With the rising demand for omnichannel content delivery, headless CMS entered the scene with a solution that would allow content to be stored in a single content management system and delivered to several mediums using an API. A headless CMS cuts the\r\ncoupling between the presentation and content layers, allowing you to code your user interface and fetch content directly to your website or application.</p><h2>Content creation experience</h2><p>Organization and editing experience should be important factors when choosing a headless CMS. You have to consider what kind of user experience your content creators, marketing team, or editors should have.</p><ul><li><a href=\"https://docs.cosmicjs.com/api-reference/object-types\">Content Types</a></li><li>Writing experience (<a href=\"https://www.cosmicjs.com/features/rich-text-multimedia\">Rich text</a> and <a href=\"https://www.cosmicjs.com/blog/markdown-metafield-now-available\">markdown</a>)</li><li><a href=\"https://www.cosmicjs.com/features/media-management\">Managing media</a></li></ul><p>A great headless CMS empowers the user (of the CMS), providing them with many features and a pleasant content creation experience. An organized dashboard, limitless content types and content creation capabilities, and versioning/scheduling features are\r\nall things that a great headless CMS is capable of.</p><h3>Media management capabilities</h3><p>Images on the web are <em>heavy</em>. Choosing a CMS with built-in media management and <a href=\"https://www.cosmicjs.com/knowledge-base/image-api-and-cdn\">image optimization</a> is crucial. In the modern web, images make up the <a href=\"https://almanac.httparchive.org/en/2021/page-weight#fig-5\">largest number of requests on a web page</a>.</p><p>Many CMSes come optimized with an <a href=\"https://www.cosmicjs.com/image-cdn\">Image CDN</a> service, so lots of the heavy lifting is done for the developer. If you care about user experience, delivering optimized images will ensure that users around the globe are getting the best user experience when visiting your site.</p><p>When choosing a headless CMS, it&rsquo;s important to consider how media is managed in the dashboard and under the hood. Images, videos, and documents are all things that deserve some optimization out of the box. It would be a bit of a pain to have to\r\naccess your media from another service other than your headless CMS.</p><p>Consider the experience your content creators and editors will endure. They will be the ones constantly uploading and accessing media within the dashboard, and a good headless CMS will provide them with a smooth and understandable process.</p><h2>Developer experience</h2><p>Whether you are a developer or not, a developer will be needed to implement the headless CMS into your codebase. A great headless CMS should provide them with educational <a href=\"https://www.cosmicjs.com/articles\">resources</a>, code examples, and templates\r\nto lower the learning curve.</p><ul><li><a href=\"https://www.cosmicjs.com/features/rest-graphql-apis\">RESTful and GraphQL APIs</a></li><li><a href=\"https://github.com/cosmicjs/cosmicjs-node\">SDKs</a></li><li><a href=\"https://docs.cosmicjs.com/\">Documentation</a> and <a href=\"https://docs.cosmicjs.com/examples/basic-queries\">examples</a></li><li>Integration with web frameworks (like <a href=\"https://www.cosmicjs.com/react-cms\">React</a>)</li><li>Pre-built <a href=\"https://www.cosmicjs.com/apps\">application templates</a></li></ul><p>While the initial time spent integrating a headless CMS into your application or website may be higher than a monolithic CMS, great documentation, how-to guides, SDKs, and pre-coded templates will speed up this process for the developer. Don&rsquo;t hesitate\r\nto explore the website for the headless CMS you are inquiring on. Are there plenty of articles and blog posts relating to headless CMS topics; &ldquo;how-to&rdquo; guides? Is there in-depth documentation? Can you read it from a technical perspective and\r\nunderstand it from a non-technical perspective? The value is not just in the product itself, but also in the ecosystem of resources supporting it.</p><p>The next type of developer consideration is the integration capabilities. Many headless CMSes take on an <a href=\"https://tyk.io/blog/res-what-is-api-first/\">API-first</a> approach, improving the underlying functionality of the CMS. Developers love having options, and having a choice between <a href=\"https://www.cosmicjs.com/features/rest-graphql-apis\">Rest and GraphQL APIs</a> could be a make-or-break factor. Furthermore, having an <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">NPM module</a> is highly beneficial, making it easier to connect your code with your content, fetch data, perform CRUD operations, and handle file uploads. Being able to <code>npm install</code> a package provided by the headless CMS makes it that much easier to connect to the API.</p><p>Community is key. Look for an official Slack or Discord channel, as it will have developers that actually work on the headless CMS itself. They&rsquo;re there to help answer questions, walk you through problems, and consider feature integrations based\r\non feedback. The community will also have developers using the CMS for work, personal projects, and freelance. If developers enjoy using the headless CMS, chances are they&rsquo;re happy to help others when they run into an issue as well. This is a sign\r\nof a healthy, active community that uses the CMS frequently.</p><h3>Architecture and support</h3><p>Ever implement a software product or service into your application, only to get stuck on a particular step of the process or find that a crucial feature is missing? This could be the make-or-break factor of your decision. Having great support from the\r\nheadless CMS provider is important.</p><p>Good support means direct conversation with the engineering team, guidance on the implementation of the headless CMS, and sometimes features built specifically for your company&rsquo;s case.</p><ul><li>Maintenance and scalability</li><li>Security</li><li>Customer support</li><li>Feature updates</li></ul><h3>Composability and content modeling</h3><p>When considering a headless CMS as a content management system, people often consider the composability aspect. A headless CMS simply does not care how you structure your content. It is entirely up to you how you build your landing pages, blog posts,\r\nand menus. A monolithic CMS like WordPress or a website builder like Squarespace often lays out your content structure for you, whereas a headless CMS gives you the individual building blocks themselves.</p><p>Text fields, number inputs, radio switches, markdown editors, JSON blocks&hellip; the list goes on. Having a variety of <a href=\"https://docs.cosmicjs.com/api-reference/metafields\">metafields</a> to choose from equals freedom. Constructing a cohesive experience for your content is an art in itself, and a great headless CMS allows you to be creative in this process.</p><p>When crafting your content model, content relationships are like superpowers. When selecting a headless CMS, take note if it provides the capability to create content relationships. This can streamline content reusability and related content fetching.</p><p>The API should make it possible to access related content easily. When fetching one content type, it should provide any related data without any additional API requests or technical challenges. For example, when fetching a single blog post it should also be possible to provide the related author and category information.</p><h2>Team workflows</h2><p>With any content management system, it&rsquo;s important to pay attention to the collaboration aspect. When you have a team working within a headless CMS, you will often have an array of roles like developers, editors, and administrators. Sometimes, you\r\nmay even need to simply share content externally.</p><p>Different tiers of permissions will be needed for different roles. For example, a manager should get access to several editing properties in the project itself. Creating new groups of content and setting the template for what content will be\r\naccepted within that piece of content. An editor should really just be able to do simple tasks related to editing the actual content within the content. Editing copy and filling in input fields should suffice.</p><p>Some CMS solutions are innovating on content approval workflows, incorporating a Git-like process for branching and merging numerous pieces of content. Changes are made within a CMS and the author of the changes saves them to a <a href=\"https://www.cosmicjs.com/blog/introducing-merge-requests\">merge request</a>.\r\nOther members of the project can view the changes (the before and after), reviewing and iterating as needed. Once approved, the changes are then &lsquo;merged&rsquo; into the production &lsquo;branch&rsquo; of the content.</p><p>Another great feature is preview mode. Preview mode in a headless CMS will allow content updates to be previewed before changes go live. With this feature, you make changes in your headless CMS, save them as a draft, then are able to share a preview link with anyone. Anyone with the link will be able to access draft content. <a href=\"https://www.cosmicjs.com/articles/how-to-use-nextjs-preview-mode-with-the-cosmic-headless-cms\">Using Next.js preview mode with a headless CMS</a>, you can achieve this through <a href=\"https://nextjs.org/learn/basics/api-routes\">Next.js API routes</a>.</p><p>Small teams may not feel the effect of these features, though when it comes to larger teams of ten or even hundreds with access to a single project, they will be felt. These workflow features are crucial for high-performance teams prioritizing content velocity.</p><h2>In conclusion</h2><p>The market of headless CMS is plentiful, and this is a good thing. With many choices comes many things to consider, and with the right direction and information, you should have no problem finding the right headless CMS for your project. After all, one\r\nsize does not fit all, and you should test around a bit and choose the solution you enjoy using the most.</p><p>I hope this guide gave you a better understanding of the foundational features of a headless CMS and what to look for when choosing one.</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"brhtqBKa9h","value":"636beebc3b7d06000971c644","required":true,"object_type":"authors","object":{"_id":"636beebc3b7d06000971c644","slug":"stefan-kudla","title":"Stefan Kudla","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"BgFHSqrFnd","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"trUgJkN1Br","value":"b7993e30-605a-11ed-b192-abbbbb9eecea-avatar4.png","url":"https://cdn.cosmicjs.com/b7993e30-605a-11ed-b192-abbbbb9eecea-avatar4.png","imgix_url":"https://imgix.cosmicjs.com/b7993e30-605a-11ed-b192-abbbbb9eecea-avatar4.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2022-11-09T18:17:32.738Z","created_at":"2022-11-09T18:17:32.738Z","modified_at":"2022-11-09T18:18:15.113Z","status":"published","locale":null,"published_at":"2022-11-09T18:18:15.113Z","modified_by":"6321e6074fd8b200090bb00c","thumbnail":"https://imgix.cosmicjs.com/b7993e30-605a-11ed-b192-abbbbb9eecea-avatar4.png","publish_at":null,"unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"aZHFEnp5ty","value":"<p>Your guide to confidently choosing the best headless CMS for your project and team needs.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"73qBW6dCOS","value":"5679b3a0-6050-11ed-b192-abbbbb9eecea-choosing-the-right-headless-cms.png","url":"https://cdn.cosmicjs.com/5679b3a0-6050-11ed-b192-abbbbb9eecea-choosing-the-right-headless-cms.png","imgix_url":"https://imgix.cosmicjs.com/5679b3a0-6050-11ed-b192-abbbbb9eecea-choosing-the-right-headless-cms.png"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"3recrCSMjt","value":"Your guide to confidently choosing the best headless CMS for your project and team needs."},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"WbffIHTrbO","value":"2022-11-09"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2022-11-07T22:15:22.520Z","created_by":"6321e6074fd8b200090bb00c","modified_at":"2022-11-09T19:33:22.384Z","created":"2022-11-07T22:15:22.520Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/5679b3a0-6050-11ed-b192-abbbbb9eecea-choosing-the-right-headless-cms.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2022-11-09T19:33:22.384Z","metadata":{"author":{"_id":"636beebc3b7d06000971c644","slug":"stefan-kudla","title":"Stefan Kudla","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"BgFHSqrFnd","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"trUgJkN1Br","value":"b7993e30-605a-11ed-b192-abbbbb9eecea-avatar4.png","url":"https://cdn.cosmicjs.com/b7993e30-605a-11ed-b192-abbbbb9eecea-avatar4.png","imgix_url":"https://imgix.cosmicjs.com/b7993e30-605a-11ed-b192-abbbbb9eecea-avatar4.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2022-11-09T18:17:32.738Z","created_at":"2022-11-09T18:17:32.738Z","modified_at":"2022-11-09T18:18:15.113Z","status":"published","locale":null,"published_at":"2022-11-09T18:18:15.113Z","modified_by":"6321e6074fd8b200090bb00c","thumbnail":"https://imgix.cosmicjs.com/b7993e30-605a-11ed-b192-abbbbb9eecea-avatar4.png","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/b7993e30-605a-11ed-b192-abbbbb9eecea-avatar4.png","imgix_url":"https://imgix.cosmicjs.com/b7993e30-605a-11ed-b192-abbbbb9eecea-avatar4.png"}}},"teaser":"<p>Your guide to confidently choosing the best headless CMS for your project and team needs.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/5679b3a0-6050-11ed-b192-abbbbb9eecea-choosing-the-right-headless-cms.png","imgix_url":"https://imgix.cosmicjs.com/5679b3a0-6050-11ed-b192-abbbbb9eecea-choosing-the-right-headless-cms.png"},"seo_meta_description":"Your guide to confidently choosing the best headless CMS for your project and team needs.","published_date":"2022-11-09"}},{"_id":"5ef386ccde201700072ef9d9","slug":"ghost-headless-cms","title":"Ghost Headless CMS","content":"<p><span style=\"color: rgb(88, 96, 105);\">Ghost has been around for some time offering what they describe as a lighter option than WordPress. &nbsp;Their previous motto &quot;just a blogging platform&quot;, has changed to &quot;Node.js open source Headless CMS&quot; recently to join the headless CMS space to offer their previously monolithic CMS as API-first. <span style=\"color: rgb(88, 96, 105);\">Cosmic is an alternative to Ghost that your developers and content creators will love.</span></span></p><p><br></p><h3>Monolithic vs Headless CMS</h3><p><span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\">Ghost</span>, as a monolithic CMS, and other older installed CMS systems like it, comes with a coupled front end application layer that requires additional development and maintenance. <span style=\"color: rgb(88, 96, 105);\">Cosmic is a Headless CMS meaning that the content API and presentation layer are decoupled which gives your team great flexibility.</span></span></p><p><span style=\"color: rgb(88, 96, 105);\">Cosmic provides everything your team of developers and content creators need: powerful and intuitive APIs for developers, and an easy-to-use dashboard for content creators. We&#39;ve removed all complexity and CMS maintenance, so your team can focus on building great products faster, together.</span></p><p><br></p><h3>Isn&#39;t Ghost also Headless?</h3><p><span style=\"color: rgb(88, 96, 105);\">Although <span style=\"color: rgb(88, 96, 105);\">Ghost can be used as&nbsp;</span>a Headless CMS, you still have a lot of work to do to bring it up to the level of an optimized CMS system that&#39;s truly headless. Plus you will need to maintain the CMS itself AND your application, adding more development cost, taking focus away from what really matters: creating great content and user experiences.</span></p>","metafields":[{"children":null,"type":"switch","title":"Include in link list","key":"include_in_link_list","id":"YqgDtBQ4Se","value":true,"options":"yes,no"},{"children":null,"type":"text","title":"Vendor Name","key":"vendor_name","id":"ZUEelPp2C0","value":"Ghost Headless CMS"},{"children":null,"type":"file","title":"Logo","key":"logo","id":"09LdvODI5L","value":"9a36ed70-b57a-11ea-a093-f552856bebad-ghost-headless-cms.svg","url":"https://cdn.cosmicjs.com/9a36ed70-b57a-11ea-a093-f552856bebad-ghost-headless-cms.svg","imgix_url":"https://imgix.cosmicjs.com/9a36ed70-b57a-11ea-a093-f552856bebad-ghost-headless-cms.svg"},{"children":null,"type":"textarea","title":"Tech","key":"tech","id":"BJcvHoveVN","value":"Node.js, Nginx, MySQL."},{"children":null,"type":"textarea","title":"Scalability","key":"scalability","id":"HVFfyQ2kY8","value":"Does not scale easily. Limited by your servers, hosting provider, and budget."},{"children":null,"type":"textarea","title":"Security","key":"security","id":"TtQEoiMU0p","value":"You manage the security yourself. No default data encryption at rest or in transit."},{"children":null,"type":"textarea","title":"Maintenance","key":"maintenance","id":"bWnLlSeR3F","value":"You deploy, host, and maintain everything yourself. Along with your application and content, you need to maintain updates and security for your CMS system."},{"children":null,"type":"textarea","title":"Caching","key":"caching","id":"7V9qW4FXUo","value":"No caching included out of the box."},{"children":null,"type":"textarea","title":"Media CDN","key":"media_cdn","id":"doj24uly1Q","value":"No CDN included out of the box."},{"children":null,"type":"textarea","title":"Image Processing","key":"image_processing","id":"B3etMuNl0y","value":"Manually manage your own image sizes and optimizations."},{"children":null,"type":"textarea","title":"Extendability","key":"extendability","id":"wQEFQq8O5J","value":"Themes and integrations."},{"children":null,"type":"textarea","title":"Front end","key":"front_end","id":"b07QtfdXIY","value":"Front end is coupled with backend CMS. Can be made to be Headless."},{"children":null,"type":"textarea","title":"Number of Projects","key":"number_of_projects","id":"xP07Q7IM11","value":"One login, one website."},{"children":null,"type":"html-textarea","title":"Costs","key":"costs","id":"dXygK3uHf3","value":"<p>You will need to hire developer resources. Average salary of a full-stack developer is <a href=\"https://neuvoo.com/salary/?job=Full+Stack+Developer\" target=\"_blank\">$111,600 per year</a>. You may need to hire 1-3 developers to maintain the CMS.</p>"},{"children":null,"type":"text","title":"Cost Value","key":"cost_value","id":"bbaWQjrFhE","value":"$223,200"},{"children":null,"type":"text","title":"Cost Text","key":"cost_text","id":"chYy9TuvTO","value":"per year"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"cms-competitors","created":"2020-06-24T17:01:00.714Z","created_at":"2020-06-24T17:01:00.714Z","modified_at":"2020-06-28T20:52:20.697Z","status":"published","locale":null,"modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-28T20:52:20.697Z","unpublish_at":null,"order":4,"metadata":{"include_in_link_list":true,"vendor_name":"Ghost Headless CMS","logo":{"url":"https://cdn.cosmicjs.com/9a36ed70-b57a-11ea-a093-f552856bebad-ghost-headless-cms.svg","imgix_url":"https://imgix.cosmicjs.com/9a36ed70-b57a-11ea-a093-f552856bebad-ghost-headless-cms.svg"},"tech":"Node.js, Nginx, MySQL.","scalability":"Does not scale easily. Limited by your servers, hosting provider, and budget.","security":"You manage the security yourself. No default data encryption at rest or in transit.","maintenance":"You deploy, host, and maintain everything yourself. Along with your application and content, you need to maintain updates and security for your CMS system.","caching":"No caching included out of the box.","media_cdn":"No CDN included out of the box.","image_processing":"Manually manage your own image sizes and optimizations.","extendability":"Themes and integrations.","front_end":"Front end is coupled with backend CMS. Can be made to be Headless.","number_of_projects":"One login, one website.","costs":"<p>You will need to hire developer resources. Average salary of a full-stack developer is <a href=\"https://neuvoo.com/salary/?job=Full+Stack+Developer\" target=\"_blank\">$111,600 per year</a>. You may need to hire 1-3 developers to maintain the CMS.</p>","cost_value":"$223,200","cost_text":"per year"}},{"_id":"5fa46192b86f520007f78507","slug":"finnauto","title":"Finn.auto","content":"","metafields":[{"children":null,"type":"file","title":"Logo","key":"logo","id":"MrZGWdliav","value":"a727eac0-1f83-11eb-9856-f5ec37319d23-finn.auto.svg","url":"https://cdn.cosmicjs.com/a727eac0-1f83-11eb-9856-f5ec37319d23-finn.auto.svg","imgix_url":"https://imgix.cosmicjs.com/a727eac0-1f83-11eb-9856-f5ec37319d23-finn.auto.svg"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"D2QVi8BRGw","value":" The Finn.auto team has accelerated their application development and content creation velocity to deliver faster results for their car subscription customers."},{"children":null,"type":"text","title":"Brand color","key":"brand_color","id":"8doq4b3Yz0","value":"#2856C1"},{"children":null,"type":"file","title":"Background Image","key":"background_image","id":"6CtXiuStNM","value":"bf89c150-1f6b-11eb-a5a0-df4a1ce90a71-finn-car.jpg","url":"https://cdn.cosmicjs.com/bf89c150-1f6b-11eb-a5a0-df4a1ce90a71-finn-car.jpg","imgix_url":"https://imgix.cosmicjs.com/bf89c150-1f6b-11eb-a5a0-df4a1ce90a71-finn-car.jpg"},{"children":null,"type":"file","title":"Main image","key":"main_image","id":"NovMP0KK4t","value":"ae697280-1f6b-11eb-a5a0-df4a1ce90a71-finn.jpg","url":"https://cdn.cosmicjs.com/ae697280-1f6b-11eb-a5a0-df4a1ce90a71-finn.jpg","imgix_url":"https://imgix.cosmicjs.com/ae697280-1f6b-11eb-a5a0-df4a1ce90a71-finn.jpg"},{"children":[{"children":null,"type":"html-textarea","title":"Text","key":"text","id":"TI5HcFT8C1","value":"<p><a href=\"https://www.finn.auto/\" rel=\"noopener noreferrer\" target=\"_blank\">Finn.auto</a> is not your typical auto rental company. If you aren&#39;t familiar with their Germany-based service, they&#39;re probably unlike anything you&#39;ve ever heard of before. They don&#39;t call themselves a car rental company, although they do drop a vehicle off at your door. They aren&#39;t really a green-energy company either, although all their vehicles drive climate-neutral. Calling them a subscription service doesn&#39;t exactly do them justice, but it might be most on-the-nose. So what is Finn.auto?</p>"},{"children":null,"type":"file","title":"Image","key":"image","id":"2oMOwzjcoA","value":"1594e2a0-1f6c-11eb-a5a0-df4a1ce90a71-finn-screen.jpeg","url":"https://cdn.cosmicjs.com/1594e2a0-1f6c-11eb-a5a0-df4a1ce90a71-finn-screen.jpeg","imgix_url":"https://imgix.cosmicjs.com/1594e2a0-1f6c-11eb-a5a0-df4a1ce90a71-finn-screen.jpeg"}],"type":"parent","title":"Section 1","key":"section_1","id":"rFME4WMGc4","value":"<p><a href=\"https://www.finn.auto/\" rel=\"noopener noreferrer\" target=\"_blank\">Finn.auto</a> is not your typical auto rental company. If you aren&#39;t familiar with their Germany-based service, they&#39;re probably unlike anything you&#39;ve ever heard of before. They don&#39;t call themselves a car rental company, although they do drop a vehicle off at your door. They aren&#39;t really a green-energy company either, although all their vehicles drive climate-neutral. Calling them a subscription service doesn&#39;t exactly do them justice, but it might be most on-the-nose. So what is Finn.auto?</p>"},{"children":[{"children":null,"type":"html-textarea","title":"Text","key":"text","id":"1lQ37cypdN","value":"<p>Co-Founder Maximilian W&uuml;hr would tell you they&#39;re a car-subscription company; an all-inclusive-service that eliminates every imaginable hassle that comes with acquiring, owning, renting, driving, or maintaining your vehicle. Select a vehicle in a few minutes online, and Finn.auto will take care of everything from registration and insurance, to doorstep drop-off, to the long-term maintenance of your car. Perhaps the only thing they can&#39;t do is refuel for you.</p><p>To get their proof of concept rolling, Finn.auto managed leads with a combination of Webflow, Google Sheets, Airtable, and a handful of other intermediate solutions. Did it work? Better than they&#39;d hoped. Clever setup? No one could doubt that. Still, as more leads began rolling in their pipeline, the founders knew they would need to professionalize their setup.</p>"},{"children":null,"type":"file","title":"Image","key":"image","id":"dJjNKrwhq2","value":"c9bcdb30-1f89-11eb-a576-4393b78b9c1f-finn-car.jpeg","url":"https://cdn.cosmicjs.com/c9bcdb30-1f89-11eb-a576-4393b78b9c1f-finn-car.jpeg","imgix_url":"https://imgix.cosmicjs.com/c9bcdb30-1f89-11eb-a576-4393b78b9c1f-finn-car.jpeg"}],"type":"parent","title":"Section 2","key":"section_2","id":"HPWi9E27Y1","value":"<p>Co-Founder Maximilian W&uuml;hr would tell you they&#39;re a car-subscription company; an all-inclusive-service that eliminates every imaginable hassle that comes with acquiring, owning, renting, driving, or maintaining your vehicle. Select a vehicle in a few minutes online, and Finn.auto will take care of everything from registration and insurance, to doorstep drop-off, to the long-term maintenance of your car. Perhaps the only thing they can&#39;t do is refuel for you.</p><p>To get their proof of concept rolling, Finn.auto managed leads with a combination of Webflow, Google Sheets, Airtable, and a handful of other intermediate solutions. Did it work? Better than they&#39;d hoped. Clever setup? No one could doubt that. Still, as more leads began rolling in their pipeline, the founders knew they would need to professionalize their setup.</p>"},{"children":[{"children":null,"type":"file","title":"Image","key":"image","id":"9cIEMFkXDD","value":"3da33fd0-1f6c-11eb-a5a0-df4a1ce90a71-max-wuhr.jpg","url":"https://cdn.cosmicjs.com/3da33fd0-1f6c-11eb-a5a0-df4a1ce90a71-max-wuhr.jpg","imgix_url":"https://imgix.cosmicjs.com/3da33fd0-1f6c-11eb-a5a0-df4a1ce90a71-max-wuhr.jpg"},{"children":null,"type":"textarea","title":"Text","key":"text","id":"2Nc1ncE2qv","value":"We liked Cosmic because we wanted something as object-oriented as we were at the time. It was easy for a developer with object-orientation and object relationship - way superior to other kinds of CMS. On the other hand, the editing tool is seamless, which we liked for the content-side. It was very feature-rich for both developers and content editing, which was the gap we wanted to bridge. There were very few limitations to objects or anything else.\n\nEvery API Call was cached, and this was something we noticed as the way we would have built it ourselves. We liked that. The thought for developers was apparent. Cosmic is: us never having to ask a developer to change anything on the backend of our website. It separated out the content and structure, let us manage our own front-end how we like it, and now we'll be using it for every piece of content that goes up on the website."},{"children":null,"type":"text","title":"Author","key":"author","id":"drEsJ929v0","value":"Maximilian Wühr, Co-Founder & VP of User-Acquisition"},{"children":null,"type":"textarea","title":"Testimonial Home","key":"testimonial_home","id":"jzgyihl9ikl38jlgdto4","object_type":"undefined","value":"\"Cosmic is easy for developers familiar with object-orientation - way superior to other kinds of CMS.\""}],"type":"parent","title":"Testimonial Section","key":"testimonial_section","id":"DVO2gCo3DQ","value":"We liked Cosmic because we wanted something as object-oriented as we were at the time. It was easy for a developer with object-orientation and object relationship - way superior to other kinds of CMS. On the other hand, the editing tool is seamless, which we liked for the content-side. It was very feature-rich for both developers and content editing, which was the gap we wanted to bridge. There were very few limitations to objects or anything else.\n\nEvery API Call was cached, and this was something we noticed as the way we would have built it ourselves. We liked that. The thought for developers was apparent. Cosmic is: us never having to ask a developer to change anything on the backend of our website. It separated out the content and structure, let us manage our own front-end how we like it, and now we'll be using it for every piece of content that goes up on the website."},{"children":null,"type":"text","title":"Industry","key":"industry","id":"F1kQlP8PwO","value":"Automotive"},{"children":null,"type":"text","title":"Product","key":"product","id":"6UgKkgEJwC","value":"CO2 Neutral Car Subscription"},{"children":null,"type":"switch","title":"Featured on Home","key":"featured_on_home","id":"RB0OJs4IWn","value":true,"options":"yes,no"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"customers","created":"2020-11-05T20:33:22.357Z","created_at":"2020-11-05T20:33:22.357Z","modified_at":"2020-12-18T15:19:35.892Z","status":"published","locale":null,"modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-12-18T15:19:35.892Z","unpublish_at":null,"thumbnail":"https://imgix.cosmicjs.com/bf89c150-1f6b-11eb-a5a0-df4a1ce90a71-finn-car.jpg","order":4,"metadata":{"logo":{"url":"https://cdn.cosmicjs.com/a727eac0-1f83-11eb-9856-f5ec37319d23-finn.auto.svg","imgix_url":"https://imgix.cosmicjs.com/a727eac0-1f83-11eb-9856-f5ec37319d23-finn.auto.svg"},"seo_description":" The Finn.auto team has accelerated their application development and content creation velocity to deliver faster results for their car subscription customers.","brand_color":"#2856C1","background_image":{"url":"https://cdn.cosmicjs.com/bf89c150-1f6b-11eb-a5a0-df4a1ce90a71-finn-car.jpg","imgix_url":"https://imgix.cosmicjs.com/bf89c150-1f6b-11eb-a5a0-df4a1ce90a71-finn-car.jpg"},"main_image":{"url":"https://cdn.cosmicjs.com/ae697280-1f6b-11eb-a5a0-df4a1ce90a71-finn.jpg","imgix_url":"https://imgix.cosmicjs.com/ae697280-1f6b-11eb-a5a0-df4a1ce90a71-finn.jpg"},"section_1":{"text":"<p><a href=\"https://www.finn.auto/\" rel=\"noopener noreferrer\" target=\"_blank\">Finn.auto</a> is not your typical auto rental company. If you aren&#39;t familiar with their Germany-based service, they&#39;re probably unlike anything you&#39;ve ever heard of before. They don&#39;t call themselves a car rental company, although they do drop a vehicle off at your door. They aren&#39;t really a green-energy company either, although all their vehicles drive climate-neutral. Calling them a subscription service doesn&#39;t exactly do them justice, but it might be most on-the-nose. So what is Finn.auto?</p>","image":{"url":"https://cdn.cosmicjs.com/1594e2a0-1f6c-11eb-a5a0-df4a1ce90a71-finn-screen.jpeg","imgix_url":"https://imgix.cosmicjs.com/1594e2a0-1f6c-11eb-a5a0-df4a1ce90a71-finn-screen.jpeg"}},"section_2":{"text":"<p>Co-Founder Maximilian W&uuml;hr would tell you they&#39;re a car-subscription company; an all-inclusive-service that eliminates every imaginable hassle that comes with acquiring, owning, renting, driving, or maintaining your vehicle. Select a vehicle in a few minutes online, and Finn.auto will take care of everything from registration and insurance, to doorstep drop-off, to the long-term maintenance of your car. Perhaps the only thing they can&#39;t do is refuel for you.</p><p>To get their proof of concept rolling, Finn.auto managed leads with a combination of Webflow, Google Sheets, Airtable, and a handful of other intermediate solutions. Did it work? Better than they&#39;d hoped. Clever setup? No one could doubt that. Still, as more leads began rolling in their pipeline, the founders knew they would need to professionalize their setup.</p>","image":{"url":"https://cdn.cosmicjs.com/c9bcdb30-1f89-11eb-a576-4393b78b9c1f-finn-car.jpeg","imgix_url":"https://imgix.cosmicjs.com/c9bcdb30-1f89-11eb-a576-4393b78b9c1f-finn-car.jpeg"}},"testimonial_section":{"image":{"url":"https://cdn.cosmicjs.com/3da33fd0-1f6c-11eb-a5a0-df4a1ce90a71-max-wuhr.jpg","imgix_url":"https://imgix.cosmicjs.com/3da33fd0-1f6c-11eb-a5a0-df4a1ce90a71-max-wuhr.jpg"},"text":"We liked Cosmic because we wanted something as object-oriented as we were at the time. It was easy for a developer with object-orientation and object relationship - way superior to other kinds of CMS. On the other hand, the editing tool is seamless, which we liked for the content-side. It was very feature-rich for both developers and content editing, which was the gap we wanted to bridge. There were very few limitations to objects or anything else.\n\nEvery API Call was cached, and this was something we noticed as the way we would have built it ourselves. We liked that. The thought for developers was apparent. Cosmic is: us never having to ask a developer to change anything on the backend of our website. It separated out the content and structure, let us manage our own front-end how we like it, and now we'll be using it for every piece of content that goes up on the website.","author":"Maximilian Wühr, Co-Founder & VP of User-Acquisition","testimonial_home":"\"Cosmic is easy for developers familiar with object-orientation - way superior to other kinds of CMS.\""},"industry":"Automotive","product":"CO2 Neutral Car Subscription","featured_on_home":true}},{"_id":"5a4bbb1669aed5562c000010","order":4,"slug":"enterprise","title":"Enterprise","content":"","metafields":[{"object_type":"case-studies","value":"59f49a7cee2adb545c0005bc,59663607a6a3f55962000e40,596663e8880d69fb6c000194,5aa7cd8c3078516dd48d6ad2","key":"case_studies","title":"Case Studies","type":"objects","children":null,"objects":[{"_id":"59f49a7cee2adb545c0005bc","slug":"life-is-good-shares-gratitude","title":"Life is Good Shares Gratitude","content":"<p>The <a href=\"https://www.lifeisgood.com/?utm_source=cosmicjs.com&utm_medium=referral&utm_campaign=gratitudewall\" rel=\"noopener noreferrer\" target=\"_blank\">Life is Good</a> community shares one simple, unifying mission: to spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add &quot;sticky notes&quot; with their name and what they are grateful for to the gratitude board.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7dbdb6b0-c59a-11e7-a9fd-155dbd0b0a76-Optimism_Tree_default.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Gratitude Wall is adapted from the Cosmic <a href=\"https://cosmicjs.com/apps/sticky-notes\" rel=\"noopener noreferrer\" target=\"_blank\">Sticky Notes App</a>, built on <a href=\"https://cosmicjs.com/knowledge-base/react-cms\" rel=\"noopener noreferrer\" target=\"_blank\">React</a>, Redux and <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a>. The Wall is currently running on Heroku and is i-framed into WordPress on its landing page. The Life is Good team also built a simple moderation application so that their team can easily approve or delete User Generated Content as it flows in. They also built client-side moderation during content entry, which checks against a banned list of words and blocks submission.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen Shot 2017-11-16 at 1.59.39 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a robust scaffolding to accept, store, and moderate User Generated Content and display it in a custom web app in real time. With Cosmic, we were able to develop an MVP in a matter of hours and focus our resources on UX and design versus content management. The Cosmic Support Team was extremely helpful throughout the process. We&rsquo;re excited to leverage these tools again for future projects.&rdquo;</p><p><cite>&mdash; Chris Schwab, Front End Engineer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Life is Good","key":"company","title":"Company","type":"text","children":null},{"value":"Ecommerce | Apparel","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-28T14:55:56.103Z","created_by":"5716b504e9c686d006000073","created":"2017-10-28T14:55:56.103Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-07-25T21:53:35.289Z"},{"_id":"59663607a6a3f55962000e40","slug":"big-fish-launches-marketing-and-tutorial-content-for-games","title":"Big Fish Launches Marketing and Tutorial Content for Games","content":"<p>When <a href=\"http://www.bigfishgames.com\" rel=\"noopener noreferrer\" target=\"_blank\">Big Fish</a> launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch. Big Fish wanted their game studios to have the ability to curate and update content on each of their landing pages. Other CMS systems weren&rsquo;t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b671fa80-ba81-11e7-9419-d7ce2df8354d-Screen Shot 2017-10-26 at 2.12.42 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/bf97f050-ba82-11e7-b96e-3b4c8df8fb98-Screen Shot 2017-10-26 at 2.20.03 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><blockquote><p>&quot;We use Cosmic buckets for each of our mobile game landing pages. While our API and storage usage is low, the number of buckets we need is high, which makes the new Clusters Feature a perfect solution for our company use cases. It allows us to\r\nhave a single consolidated invoice, with an overall API and data-limit, but up to 35 buckets for our use.&quot;</p><p><cite>&mdash; Jessica Chappell, Web Developer&nbsp;</cite></p></blockquote><p>Read <a href=\"http://www.bigfishgames.com/blog\" rel=\"noopener noreferrer\" target=\"_blank\">more</a> about Big Fish and their games.</p>","metafields":[{"value":"Big Fish","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T14:45:27.402Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-11-08T23:15:38.911Z"},{"_id":"596663e8880d69fb6c000194","slug":"joblift-elevates-their-stack","title":"Joblift Elevates Their Stack ","content":"<p>In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, <a href=\"https://joblift.co.uk\" rel=\"noopener noreferrer\" target=\"_blank\">Joblift</a> seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/16ac66c0-03d7-11e9-a9c3-c1326db90b81-DrzF-2BX0AA0WTE.jpg-large.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Joblift manages localized content to serve Job, Press and Blog feeds to its various markets, including the UK, Netherlands and Germany. Easy user roles and permissions equip their team with the tools they need to seamlessly run a global organization.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic has completely sped up our ability to upload our content easily and efficiently. With Cosmic we now have a smooth process for uploading press releases which reflects the quality content on our website.&rdquo;</p><p><cite>&mdash; Ashleigh Grady, Content Editor and Marketing Manager</cite></p></blockquote>","metafields":[{"value":"Joblift","key":"company","title":"Company","type":"text","children":null},{"value":"Career Services","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T18:01:12.194Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-12-19T21:44:38.361Z"},{"_id":"5aa7cd8c3078516dd48d6ad2","slug":"bookabus-builds-a-localized-transportation-website","title":"Bookabus Builds a Localized Transportation Website","content":"<p><a href=\"https://www.bookabus.eu\" rel=\"noopener noreferrer\" target=\"_blank\">Bookabus</a> is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it&rsquo;s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen Shot 2018-04-17 at 6.48.12 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Bookabus needed a new website to communicate their transport routes, terms and marketing materials. &nbsp;A big requirement was the ability to localize their content into different languages for the different areas they&#39;re servicing, including the UK, Netherlands, Germany, Spain, and Belgium. &nbsp;They chose to build their new transportation website with Cosmic because of the ease of use and powerful localization capabilities.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/be1ed900-4236-11e8-bd9f-93df74f6ae30-Screen Shot 2018-04-17 at 6.59.27 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate dynamic content into our website. The product is a great value for your money. This is especially true given that their customer service is top-notch.&quot;</p><p><cite>&mdash; Harrie Pieters, Web Developer&nbsp;</cite></p></blockquote>","metafields":[{"value":"Bookabus","key":"company","title":"Company","type":"text","children":null},{"value":"Transportation","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Bookabus is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it’s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","imgix_url":"https://imgix.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-13T13:09:32.089Z","created_by":"5716b504e9c686d006000073","created":"2018-03-13T13:09:32.089Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-04-19T21:23:26.384Z"}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"pages","created_at":"2018-01-02T17:02:14.282Z","created_by":"5357ef811693be2118000001","created":"2018-01-02T17:02:14.282Z","status":"published","modified_at":"2018-06-22T22:23:06.421Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-06-22T22:23:06.421Z","metadata":{"case_studies":[{"_id":"59f49a7cee2adb545c0005bc","slug":"life-is-good-shares-gratitude","title":"Life is Good Shares Gratitude","content":"<p>The <a href=\"https://www.lifeisgood.com/?utm_source=cosmicjs.com&utm_medium=referral&utm_campaign=gratitudewall\" rel=\"noopener noreferrer\" target=\"_blank\">Life is Good</a> community shares one simple, unifying mission: to spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add &quot;sticky notes&quot; with their name and what they are grateful for to the gratitude board.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7dbdb6b0-c59a-11e7-a9fd-155dbd0b0a76-Optimism_Tree_default.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Gratitude Wall is adapted from the Cosmic <a href=\"https://cosmicjs.com/apps/sticky-notes\" rel=\"noopener noreferrer\" target=\"_blank\">Sticky Notes App</a>, built on <a href=\"https://cosmicjs.com/knowledge-base/react-cms\" rel=\"noopener noreferrer\" target=\"_blank\">React</a>, Redux and <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a>. The Wall is currently running on Heroku and is i-framed into WordPress on its landing page. The Life is Good team also built a simple moderation application so that their team can easily approve or delete User Generated Content as it flows in. They also built client-side moderation during content entry, which checks against a banned list of words and blocks submission.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen Shot 2017-11-16 at 1.59.39 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a robust scaffolding to accept, store, and moderate User Generated Content and display it in a custom web app in real time. With Cosmic, we were able to develop an MVP in a matter of hours and focus our resources on UX and design versus content management. The Cosmic Support Team was extremely helpful throughout the process. We&rsquo;re excited to leverage these tools again for future projects.&rdquo;</p><p><cite>&mdash; Chris Schwab, Front End Engineer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Life is Good","key":"company","title":"Company","type":"text","children":null},{"value":"Ecommerce | Apparel","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-28T14:55:56.103Z","created_by":"5716b504e9c686d006000073","created":"2017-10-28T14:55:56.103Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-07-25T21:53:35.289Z","metadata":{"company":"Life is Good","industry_type":"Ecommerce | Apparel","teaser":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","logo":{"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}}},{"_id":"59663607a6a3f55962000e40","slug":"big-fish-launches-marketing-and-tutorial-content-for-games","title":"Big Fish Launches Marketing and Tutorial Content for Games","content":"<p>When <a href=\"http://www.bigfishgames.com\" rel=\"noopener noreferrer\" target=\"_blank\">Big Fish</a> launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch. Big Fish wanted their game studios to have the ability to curate and update content on each of their landing pages. Other CMS systems weren&rsquo;t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b671fa80-ba81-11e7-9419-d7ce2df8354d-Screen Shot 2017-10-26 at 2.12.42 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/bf97f050-ba82-11e7-b96e-3b4c8df8fb98-Screen Shot 2017-10-26 at 2.20.03 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><blockquote><p>&quot;We use Cosmic buckets for each of our mobile game landing pages. While our API and storage usage is low, the number of buckets we need is high, which makes the new Clusters Feature a perfect solution for our company use cases. It allows us to\r\nhave a single consolidated invoice, with an overall API and data-limit, but up to 35 buckets for our use.&quot;</p><p><cite>&mdash; Jessica Chappell, Web Developer&nbsp;</cite></p></blockquote><p>Read <a href=\"http://www.bigfishgames.com/blog\" rel=\"noopener noreferrer\" target=\"_blank\">more</a> about Big Fish and their games.</p>","metafields":[{"value":"Big Fish","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T14:45:27.402Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-11-08T23:15:38.911Z","metadata":{"company":"Big Fish","industry_type":"Gaming","teaser":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","logo":{"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}}},{"_id":"596663e8880d69fb6c000194","slug":"joblift-elevates-their-stack","title":"Joblift Elevates Their Stack ","content":"<p>In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, <a href=\"https://joblift.co.uk\" rel=\"noopener noreferrer\" target=\"_blank\">Joblift</a> seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/16ac66c0-03d7-11e9-a9c3-c1326db90b81-DrzF-2BX0AA0WTE.jpg-large.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Joblift manages localized content to serve Job, Press and Blog feeds to its various markets, including the UK, Netherlands and Germany. Easy user roles and permissions equip their team with the tools they need to seamlessly run a global organization.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic has completely sped up our ability to upload our content easily and efficiently. With Cosmic we now have a smooth process for uploading press releases which reflects the quality content on our website.&rdquo;</p><p><cite>&mdash; Ashleigh Grady, Content Editor and Marketing Manager</cite></p></blockquote>","metafields":[{"value":"Joblift","key":"company","title":"Company","type":"text","children":null},{"value":"Career Services","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T18:01:12.194Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-12-19T21:44:38.361Z","metadata":{"company":"Joblift","industry_type":"Career Services","teaser":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","logo":{"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}}},{"_id":"5aa7cd8c3078516dd48d6ad2","slug":"bookabus-builds-a-localized-transportation-website","title":"Bookabus Builds a Localized Transportation Website","content":"<p><a href=\"https://www.bookabus.eu\" rel=\"noopener noreferrer\" target=\"_blank\">Bookabus</a> is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it&rsquo;s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen Shot 2018-04-17 at 6.48.12 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Bookabus needed a new website to communicate their transport routes, terms and marketing materials. &nbsp;A big requirement was the ability to localize their content into different languages for the different areas they&#39;re servicing, including the UK, Netherlands, Germany, Spain, and Belgium. &nbsp;They chose to build their new transportation website with Cosmic because of the ease of use and powerful localization capabilities.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/be1ed900-4236-11e8-bd9f-93df74f6ae30-Screen Shot 2018-04-17 at 6.59.27 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate dynamic content into our website. The product is a great value for your money. This is especially true given that their customer service is top-notch.&quot;</p><p><cite>&mdash; Harrie Pieters, Web Developer&nbsp;</cite></p></blockquote>","metafields":[{"value":"Bookabus","key":"company","title":"Company","type":"text","children":null},{"value":"Transportation","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Bookabus is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it’s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","imgix_url":"https://imgix.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-13T13:09:32.089Z","created_by":"5716b504e9c686d006000073","created":"2018-03-13T13:09:32.089Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-04-19T21:23:26.384Z","metadata":{"company":"Bookabus","industry_type":"Transportation","teaser":"Bookabus is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it’s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events. \n","logo":{"url":"https://cdn.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","imgix_url":"https://imgix.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png"}}}]}},{"_id":"58fbe2f65161d90369000006","order":4,"slug":"angularjs-cms","title":"Angular CMS","content":"<p>Cosmic makes it easy to manage content for your Angular websites and applications.&nbsp;</p><h2>Angular CMS Templates</h2><p>You can use our <a href=\"https://www.cosmicjs.com/apps?q=Angular\">Angular CMS Templates</a>, which includes Angular CMS GitHub code examples.</p><h2>Angular CMS Dashboard</h2><p>Cosmic is a powerful Headless CMS that enables your team to build apps faster. Developers get flexible API tools, and content creators get an intuitive content management dashboard. Get started free.</p>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"2fjpwi1YyE","value":"52f011e0-f3e7-11e8-b494-31af6b9cb765-angular-seeklogo.com.svg","url":"https://cdn.cosmicjs.com/52f011e0-f3e7-11e8-b494-31af6b9cb765-angular-seeklogo.com.svg","imgix_url":"https://imgix.cosmicjs.com/52f011e0-f3e7-11e8-b494-31af6b9cb765-angular-seeklogo.com.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"k3v400xp2T","value":"1a576450-f3e7-11e8-b494-31af6b9cb765-angular.svg","url":"https://cdn.cosmicjs.com/1a576450-f3e7-11e8-b494-31af6b9cb765-angular.svg","imgix_url":"https://imgix.cosmicjs.com/1a576450-f3e7-11e8-b494-31af6b9cb765-angular.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"VcINy2Qzt1","value":"<p>Cosmic is the best CMS for Angular websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"vYxxnbWfQQ","value":"Angular"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"y4b1K4Xqpx","value":"Cosmic is the best CMS for Angular websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"UTPyNsatB8","value":"2051b220-f3e7-11e8-a2f6-9bca35b9aa63-angular.png","url":"https://cdn.cosmicjs.com/2051b220-f3e7-11e8-a2f6-9bca35b9aa63-angular.png","imgix_url":"https://imgix.cosmicjs.com/2051b220-f3e7-11e8-a2f6-9bca35b9aa63-angular.png"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"3Bj2DSyKbZ","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"SbhI3Uaag6","value":"Best Headless CMS for Angular"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"zXMAIvhlqc","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-22T23:10:46.250Z","created_by":"5357ef811693be2118000001","created":"2017-04-22T23:10:46.250Z","status":"published","modified_at":"2020-06-29T16:19:42.749Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-29T16:19:42.749Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/52f011e0-f3e7-11e8-b494-31af6b9cb765-angular-seeklogo.com.svg","imgix_url":"https://imgix.cosmicjs.com/52f011e0-f3e7-11e8-b494-31af6b9cb765-angular-seeklogo.com.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/1a576450-f3e7-11e8-b494-31af6b9cb765-angular.svg","imgix_url":"https://imgix.cosmicjs.com/1a576450-f3e7-11e8-b494-31af6b9cb765-angular.svg"},"blurb":"<p>Cosmic is the best CMS for Angular websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Angular","seo_description":"Cosmic is the best CMS for Angular websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/2051b220-f3e7-11e8-a2f6-9bca35b9aa63-angular.png","imgix_url":"https://imgix.cosmicjs.com/2051b220-f3e7-11e8-a2f6-9bca35b9aa63-angular.png"},"code_example":"","seo_title":"Best Headless CMS for Angular","videos":[]}},{"_id":"5f20ace72314e3000868449c","order":4,"slug":"fastly","title":"Fastly","content":"","metafields":[{"children":null,"type":"text","title":"Link","key":"link","id":"QYbXw6EthR","value":"https://github.com/cosmicjs/purge-function"},{"children":null,"type":"file","title":"Image","key":"image","id":"a61v9GNFQB","value":"7159b100-d125-11ea-95a6-2fa651cba029-fastly.svg","url":"https://cdn.cosmicjs.com/7159b100-d125-11ea-95a6-2fa651cba029-fastly.svg","imgix_url":"https://imgix.cosmicjs.com/7159b100-d125-11ea-95a6-2fa651cba029-fastly.svg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"integrations","created_at":"2020-07-28T22:55:35.085Z","created_by":"5357ef811693be2118000001","modified_at":"2020-07-28T22:55:35.085Z","created":"2020-07-28T22:55:35.085Z","status":"published","published_at":"2020-07-28T22:55:35.085Z","metadata":{"link":"https://github.com/cosmicjs/purge-function","image":{"url":"https://cdn.cosmicjs.com/7159b100-d125-11ea-95a6-2fa651cba029-fastly.svg","imgix_url":"https://imgix.cosmicjs.com/7159b100-d125-11ea-95a6-2fa651cba029-fastly.svg"}}},{"_id":"5afde8d07e53925430f7ccb7","order":4,"slug":"software-engineer","title":"Software Engineer","content":"<p>We&#39;re looking for a talented software engineer with skills in Node.js, MongoDB and API development. &nbsp;You&#39;ll be tasked with developing and maintaining the core application components for Cosmic: The APIs, Web Dashboard, Database and general infrastructure.&nbsp;</p><p>Skills required:</p><ul><li>JavaScript</li><li>Node.js</li><li>API development</li><li>MongoDB</li><li>Git version control</li></ul><p>Bonus points:</p><ul><li>AWS dev ops experience</li><li>Frontend development experience (React / Vue)</li></ul><p>Contact <a href=\"mailto:jobs@cosmicjs.com\">jobs@cosmicjs.com</a> to apply.</p>","metafields":[{"children":null,"type":"textarea","title":"Teaser","key":"teaser","id":"RwJ6g2g8un","value":"We're looking for a talented software engineer with skills in API development, Node.js, MongoDB. "},{"children":null,"type":"text","title":"Font Awesome Icon","key":"font_awesome_icon","id":"H0oYdM7wV7","value":"fa-wrench"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"jobs","created_at":"2018-05-17T20:40:48.128Z","created_by":"5357ef811693be2118000001","created":"2018-05-17T20:40:48.128Z","status":"published","modified_at":"2020-10-02T02:11:12.546Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-05-18T13:20:33.613Z","unpublish_at":null,"metadata":{"teaser":"We're looking for a talented software engineer with skills in API development, Node.js, MongoDB. ","font_awesome_icon":"fa-wrench"}},{"_id":"5ef64e9ef3c07a00071076ee","slug":"sitecore-headless-cms","title":"Sitecore Headless CMS","content":"<p><span style=\"color: rgb(88, 96, 105);\">Sitecore has been around for a long time, since 2001, making it ancient in internet years. It describes itself as a customer experience management system, maintaining full end-to-end control over the backend and presentation layer. <span style=\"color: rgb(88, 96, 105);\">However, as it tries to keep up with new Headless CMS solutions, <span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\">it is showing its age. <span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\">Cosmic is an alternative to Sitecore that your developers and content creators will love.</span></span></span></span></span></span></span></span></span></p><p><br></p><h3>Monolithic vs Headless CMS</h3><p><span style=\"color: rgb(88, 96, 105);\">Sitecore, as a monolithic CMS, and other older installed CMS systems like it, comes with a coupled front end application layer that requires additional development and maintenance. <span style=\"color: rgb(88, 96, 105);\">Cosmic is a Headless CMS meaning that the content API and presentation layer are decoupled which gives your team greater flexibility when it comes to where your content can go.</span></span></p><p><span style=\"color: rgb(88, 96, 105);\">Cosmic provides everything your team of developers and content creators need: powerful and intuitive APIs for developers, and an easy-to-use dashboard for content creators. We&#39;ve removed all complexity and CMS maintenance, so your team can focus on building great products faster, together.</span></p><p><br></p><h3>But can&#39;t Sitecore go Headless?</h3><p><span style=\"color: rgb(88, 96, 105);\">Although you CAN make Sitecore a Headless CMS, you still have a lot of work to do to bring it up to the level of an optimized CMS system that&#39;s truly headless. And along with<span style=\"color: rgb(88, 96, 105);\">&nbsp;your application,</span> you will need to maintain the CMS itself, adding more development costs and <span style=\"color: rgb(88, 96, 105);\">taking away focus from</span> what really matter<span style=\"color: rgb(88, 96, 105);\">s: creating great content and user experiences in your main website or app.</span></span></p><p><br></p><h3>Do they recommend going Headless?</h3><p><span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\">Not really and encourage against it (surprise). From&nbsp;</span></span><a href=\"https://www.sitecore.com/knowledge-center/blog/356/sitecore-as-a-true-headless-cms-4418\" rel=\"noopener noreferrer\" target=\"_blank\">their website</a><span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\">:</span></span></p><blockquote><p><span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\">&quot;Headless is not new; it&rsquo;s just a &ldquo;new&rdquo; buzzword. We have always believed in decoupling presentation from content, but a strictly headless CMS introduces significant risk in that it increases the complexity of your solution for both your developers and your marketers. Sure, headless CMSs certainly free developers to choose whatever front-end user interface technology they&rsquo;d prefer, and that might give you an app with a great user interface. But the downside is that your app&rsquo;s customer experience will also be decoupled. You won&rsquo;t be able to personalize that experience, or respond in real time with relevant content, or test and optimize and manage forms and market in context of user interactions. Is a standout user interface worth it if it&rsquo;s that isolated?&quot;</span></span></p></blockquote>","metafields":[{"children":null,"type":"file","title":"Logo","key":"logo","id":"pEDPPoR2wr","value":"5f3091b0-b7df-11ea-bc3d-59980ac072b1-sitecore-headless-cms.jpg","url":"https://cdn.cosmicjs.com/5f3091b0-b7df-11ea-bc3d-59980ac072b1-sitecore-headless-cms.jpg","imgix_url":"https://imgix.cosmicjs.com/5f3091b0-b7df-11ea-bc3d-59980ac072b1-sitecore-headless-cms.jpg"},{"children":null,"type":"textarea","title":"Tech","key":"tech","id":"Xkx1Q7eNBh","value":"ASP.net, SQL database."},{"children":null,"type":"textarea","title":"Scalability","key":"scalability","id":"TE1yCOHzrU","value":"Does not scale easily. Limited by servers."},{"children":null,"type":"textarea","title":"Security","key":"security","id":"e4wG0Laz98","value":"Sitecore security."},{"children":null,"type":"textarea","title":"Maintenance","key":"maintenance","id":"XT6Fj8JNR4","value":"They deploy, host, and maintain everything for you. Along with your application and content, you need to maintain updates and security for your CMS system."},{"children":null,"type":"textarea","title":"Caching","key":"caching","id":"6MANd15kX1","value":"No caching included out of the box."},{"children":null,"type":"textarea","title":"Media CDN","key":"media_cdn","id":"FuOJGBTnqI","value":"No CDN included out of the box."},{"children":null,"type":"textarea","title":"Image Processing","key":"image_processing","id":"Du8DXHLgFF","value":"Manually manage your own image sizes and optimizations."},{"children":null,"type":"textarea","title":"Extendability","key":"extendability","id":"kc4iF8scz0","value":"Possible. Limited. Complicated."},{"children":null,"type":"textarea","title":"Front end","key":"front_end","id":"79Zh5Ke9df","value":"Front end is coupled with backend CMS. Can be made to be Headless."},{"children":null,"type":"textarea","title":"Number of Projects","key":"number_of_projects","id":"YLSNIIN8ia","value":"One login, one website."},{"children":null,"type":"html-textarea","title":"Costs","key":"costs","id":"y3qZs0RN4Q","value":"<p>You will need to hire developer resources as this system is WAY complicated and outdated. Average salary of a full-stack developer is <a href=\"https://neuvoo.com/salary/?job=Full+Stack+Developer\" target=\"_blank\">$111,600 per year</a>. You may need to hire 1-3 developers to maintain the CMS. Plus the cost of licensing Sitecore can be astronomical.</p>"},{"children":null,"type":"text","title":"Vendor Name","key":"vendor_name","id":"SCjUBMWCgh","value":"Sitecore"},{"children":null,"type":"switch","title":"Include in link list","key":"include_in_link_list","id":"BwE2POFQEr","value":true,"options":"yes,no"},{"children":null,"type":"text","title":"Cost Value","key":"cost_value","id":"kN8qewEDuK","value":"$523,200+"},{"children":null,"type":"text","title":"Cost Text","key":"cost_text","id":"wgkMw3ZGen","value":"per year"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"cms-competitors","created":"2020-06-26T19:38:06.451Z","created_at":"2020-06-26T19:38:06.451Z","modified_at":"2020-06-28T20:53:13.297Z","status":"published","locale":null,"modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-28T20:53:13.297Z","unpublish_at":null,"order":5,"metadata":{"logo":{"url":"https://cdn.cosmicjs.com/5f3091b0-b7df-11ea-bc3d-59980ac072b1-sitecore-headless-cms.jpg","imgix_url":"https://imgix.cosmicjs.com/5f3091b0-b7df-11ea-bc3d-59980ac072b1-sitecore-headless-cms.jpg"},"tech":"ASP.net, SQL database.","scalability":"Does not scale easily. Limited by servers.","security":"Sitecore security.","maintenance":"They deploy, host, and maintain everything for you. Along with your application and content, you need to maintain updates and security for your CMS system.","caching":"No caching included out of the box.","media_cdn":"No CDN included out of the box.","image_processing":"Manually manage your own image sizes and optimizations.","extendability":"Possible. Limited. Complicated.","front_end":"Front end is coupled with backend CMS. Can be made to be Headless.","number_of_projects":"One login, one website.","costs":"<p>You will need to hire developer resources as this system is WAY complicated and outdated. Average salary of a full-stack developer is <a href=\"https://neuvoo.com/salary/?job=Full+Stack+Developer\" target=\"_blank\">$111,600 per year</a>. You may need to hire 1-3 developers to maintain the CMS. Plus the cost of licensing Sitecore can be astronomical.</p>","vendor_name":"Sitecore","include_in_link_list":true,"cost_value":"$523,200+","cost_text":"per year"}},{"_id":"6406c07561ff89000812cd01","order":5,"slug":"new-gatsby-source-plugin","title":"New Gatsby source plugin","content":"<p>We are excited to announce the release of our new <a href=\"https://www.npmjs.com/package/@cosmicjs/gatsby-source-cosmic\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby source plugin</a>. Rebuilt from the ground up, the new plugin makes use\r\nof new features and best practices with Gatsby and the Cosmic API.</p><p><strong>Changes include:</strong></p><ul><li>Plug and play setup. The source plugin is now able to automatically detect Object types to fetch from Cosmic</li><li>Improved Object query configuration<ul><li>You can now configure how the source plugin fetches Objects from Cosmic</li><li>Individual plugin options include:<ul><li>Cosmic API queries</li><li>Individual props to return</li><li>Limit per fetch (useful for large or deeply nested Objects)</li><li>Sort options</li><li>Publishing status</li></ul></li><li>Improved image querying<ul><li>Image Metafields can now be queried like Gatsby images within your Cosmic Objects without the need to download every image during build which will speed up build time</li><li>Fixed issue with not being able to use Gatsby image queries on deeply nested images</li><li>Added support for dominant color and base64image placeholder values</li></ul></li></ul></li><li>Other improvements<ul><li>Added configuration validation via the <code>pluginOptionsSchema</code> API</li><li>Improved logging and error handling</li></ul></li></ul><p><strong>Important notes:</strong></p><ul><li>This new plugin is only compatible with Gatsby v3 and above.</li></ul><p><strong>How to install:</strong></p><p>To update to the new plugin run the following command in your Gatsby app:</p><pre>npm install --save @cosmicjs/gatsby-source-cosmic</pre><p>Go to the <a href=\"https://www.npmjs.com/package/@cosmicjs/gatsby-source-cosmic\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Gatsby source plugin on NPM</a> to learn how to get started.</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"qADwLinqP9","value":"2023-03-07"},{"children":null,"type":"object","title":"Author","key":"author","id":"e8jNrYzye2","value":"5ffa1d1e0046b0000799cb7b","object_type":"authors","object":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"B5wzGS9Fhh","value":"4ddfcd70-bca2-11ed-9c72-1b0394f51b24-gatsby-changelog.png","url":"https://cdn.cosmicjs.com/4ddfcd70-bca2-11ed-9c72-1b0394f51b24-gatsby-changelog.png","imgix_url":"https://imgix.cosmicjs.com/4ddfcd70-bca2-11ed-9c72-1b0394f51b24-gatsby-changelog.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2023-03-07T04:41:25.696Z","created_by":"5357ef811693be2118000001","modified_at":"2023-03-07T18:08:22.756Z","created":"2023-03-07T04:41:25.696Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/4ddfcd70-bca2-11ed-9c72-1b0394f51b24-gatsby-changelog.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2023-03-07T18:08:22.756Z","metadata":{"published_date":"2023-03-07","author":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}}},"featured_image":{"url":"https://cdn.cosmicjs.com/4ddfcd70-bca2-11ed-9c72-1b0394f51b24-gatsby-changelog.png","imgix_url":"https://imgix.cosmicjs.com/4ddfcd70-bca2-11ed-9c72-1b0394f51b24-gatsby-changelog.png"}}},{"_id":"5d235c2772d8f04604eb2045","slug":"headless-cms-for-ecommerce-websites","title":"Headless CMS for Ecommerce Websites","content":"<p>The Cosmic Headless CMS provides flexible content modeling that allows e-commerce teams to manage product inventories, seasonal sales campaigns and product-centric landing pages all from the Cosmic Dashboard. Developers, marketers, data analysts and product managers can all collaborate in Cosmic using unique <a href=\"https://www.cosmicjs.com/headless-cms/user-roles\">user roles and permissions</a>. Teams can <a href=\"https://www.cosmicjs.com/headless-cms/revision-history\">revise</a> published products, <a href=\"https://www.cosmicjs.com/headless-cms/scheduled-publishing\">schedule</a> new product launches and integrate with any cart or payment gateway.<br><br>Whether you&#39;re managing content for products or FAQ&#39;s, your e-commerce team has a robust toolkit for <a href=\"https://www.cosmicjs.com/headless-cms/content-modeling\">content modeling</a> and delivery to all your websites and applications.&nbsp;</p>","metafields":[{"children":null,"type":"text","title":"Solution Name","key":"solution_name","id":"IlsRsBVbSt","value":"Ecommerce Websites"},{"children":null,"type":"file","title":"Image","key":"image","id":"70ycrxA4wI","value":"d03eb2f0-9f54-11e9-ac09-4be8a5631b5e-6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen-Shot-2018-04-17-at-6.48.12-AM.png","url":"https://cdn.cosmicjs.com/d03eb2f0-9f54-11e9-ac09-4be8a5631b5e-6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen-Shot-2018-04-17-at-6.48.12-AM.png","imgix_url":"https://imgix.cosmicjs.com/d03eb2f0-9f54-11e9-ac09-4be8a5631b5e-6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen-Shot-2018-04-17-at-6.48.12-AM.png"},{"children":null,"type":"objects","title":"Case Studies","key":"case_studies","id":"zjNowDqbOt","value":"59f49a7cee2adb545c0005bc,59663607a6a3f55962000e40,5aa7cd8c3078516dd48d6ad2","object_type":"case-studies","objects":[{"_id":"59f49a7cee2adb545c0005bc","slug":"life-is-good-shares-gratitude","title":"Life is Good Shares Gratitude","content":"<p>The <a href=\"https://www.lifeisgood.com/?utm_source=cosmicjs.com&utm_medium=referral&utm_campaign=gratitudewall\" rel=\"noopener noreferrer\" target=\"_blank\">Life is Good</a> community shares one simple, unifying mission: to spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add &quot;sticky notes&quot; with their name and what they are grateful for to the gratitude board.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7dbdb6b0-c59a-11e7-a9fd-155dbd0b0a76-Optimism_Tree_default.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Gratitude Wall is adapted from the Cosmic <a href=\"https://cosmicjs.com/apps/sticky-notes\" rel=\"noopener noreferrer\" target=\"_blank\">Sticky Notes App</a>, built on <a href=\"https://cosmicjs.com/knowledge-base/react-cms\" rel=\"noopener noreferrer\" target=\"_blank\">React</a>, Redux and <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a>. The Wall is currently running on Heroku and is i-framed into WordPress on its landing page. The Life is Good team also built a simple moderation application so that their team can easily approve or delete User Generated Content as it flows in. They also built client-side moderation during content entry, which checks against a banned list of words and blocks submission.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen Shot 2017-11-16 at 1.59.39 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a robust scaffolding to accept, store, and moderate User Generated Content and display it in a custom web app in real time. With Cosmic, we were able to develop an MVP in a matter of hours and focus our resources on UX and design versus content management. The Cosmic Support Team was extremely helpful throughout the process. We&rsquo;re excited to leverage these tools again for future projects.&rdquo;</p><p><cite>&mdash; Chris Schwab, Front End Engineer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Life is Good","key":"company","title":"Company","type":"text","children":null},{"value":"Ecommerce | Apparel","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-28T14:55:56.103Z","created_by":"5716b504e9c686d006000073","created":"2017-10-28T14:55:56.103Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-07-25T21:53:35.289Z"},{"_id":"59663607a6a3f55962000e40","slug":"big-fish-launches-marketing-and-tutorial-content-for-games","title":"Big Fish Launches Marketing and Tutorial Content for Games","content":"<p>When <a href=\"http://www.bigfishgames.com\" rel=\"noopener noreferrer\" target=\"_blank\">Big Fish</a> launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch. Big Fish wanted their game studios to have the ability to curate and update content on each of their landing pages. Other CMS systems weren&rsquo;t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b671fa80-ba81-11e7-9419-d7ce2df8354d-Screen Shot 2017-10-26 at 2.12.42 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/bf97f050-ba82-11e7-b96e-3b4c8df8fb98-Screen Shot 2017-10-26 at 2.20.03 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><blockquote><p>&quot;We use Cosmic buckets for each of our mobile game landing pages. While our API and storage usage is low, the number of buckets we need is high, which makes the new Clusters Feature a perfect solution for our company use cases. It allows us to\r\nhave a single consolidated invoice, with an overall API and data-limit, but up to 35 buckets for our use.&quot;</p><p><cite>&mdash; Jessica Chappell, Web Developer&nbsp;</cite></p></blockquote><p>Read <a href=\"http://www.bigfishgames.com/blog\" rel=\"noopener noreferrer\" target=\"_blank\">more</a> about Big Fish and their games.</p>","metafields":[{"value":"Big Fish","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T14:45:27.402Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-11-08T23:15:38.911Z"},{"_id":"5aa7cd8c3078516dd48d6ad2","slug":"bookabus-builds-a-localized-transportation-website","title":"Bookabus Builds a Localized Transportation Website","content":"<p><a href=\"https://www.bookabus.eu\" rel=\"noopener noreferrer\" target=\"_blank\">Bookabus</a> is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it&rsquo;s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen Shot 2018-04-17 at 6.48.12 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Bookabus needed a new website to communicate their transport routes, terms and marketing materials. &nbsp;A big requirement was the ability to localize their content into different languages for the different areas they&#39;re servicing, including the UK, Netherlands, Germany, Spain, and Belgium. &nbsp;They chose to build their new transportation website with Cosmic because of the ease of use and powerful localization capabilities.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/be1ed900-4236-11e8-bd9f-93df74f6ae30-Screen Shot 2018-04-17 at 6.59.27 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate dynamic content into our website. The product is a great value for your money. This is especially true given that their customer service is top-notch.&quot;</p><p><cite>&mdash; Harrie Pieters, Web Developer&nbsp;</cite></p></blockquote>","metafields":[{"value":"Bookabus","key":"company","title":"Company","type":"text","children":null},{"value":"Transportation","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Bookabus is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it’s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","imgix_url":"https://imgix.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-13T13:09:32.089Z","created_by":"5716b504e9c686d006000073","created":"2018-03-13T13:09:32.089Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-04-19T21:23:26.384Z"}]},{"children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"ecommerce-app","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"gatsby-ecommerce-website","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"ecommerce-personalization","type":"text","required":false}]}],"type":"repeater","title":"App Slugs","key":"app_slugs","id":"pQ4ulCNQEq","value":"ecommerce-app","repeater_fields":"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\""},{"children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"wordpress-importer","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"product-manager","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"amazon-product-search","type":"text","required":false}]}],"type":"repeater","title":"Extension Slugs","key":"extension_slugs","id":"aIe2BhPgjA","value":"wordpress-importer","repeater_fields":"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\""},{"children":null,"type":"html-textarea","title":"Testimonial","key":"testimonial","id":"Y1HahZouaf","value":"<p>&quot;Cosmic allowed us to easily integrate dynamic content into our website. The product is a great value for your money. This is especially true given that their customer service is top-notch.&quot;</p>"},{"children":null,"type":"text","title":"Testimonial Credit","key":"testimonial_credit","id":"ltWKZYKah7","value":"Harrie Pieters, Web Developer at Bookabus"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created":"2019-07-08T15:07:19.015Z","created_at":"2019-07-08T15:07:19.015Z","modified_at":"2020-08-10T14:05:12.245Z","status":"published","locale":null,"published_at":"2020-05-06T05:32:28.737Z","modified_by":"5357ef811693be2118000001","publish_at":null,"order":5,"unpublish_at":null,"metadata":{"solution_name":"Ecommerce Websites","image":{"url":"https://cdn.cosmicjs.com/d03eb2f0-9f54-11e9-ac09-4be8a5631b5e-6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen-Shot-2018-04-17-at-6.48.12-AM.png","imgix_url":"https://imgix.cosmicjs.com/d03eb2f0-9f54-11e9-ac09-4be8a5631b5e-6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen-Shot-2018-04-17-at-6.48.12-AM.png"},"case_studies":[{"_id":"59f49a7cee2adb545c0005bc","slug":"life-is-good-shares-gratitude","title":"Life is Good Shares Gratitude","content":"<p>The <a href=\"https://www.lifeisgood.com/?utm_source=cosmicjs.com&utm_medium=referral&utm_campaign=gratitudewall\" rel=\"noopener noreferrer\" target=\"_blank\">Life is Good</a> community shares one simple, unifying mission: to spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add &quot;sticky notes&quot; with their name and what they are grateful for to the gratitude board.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7dbdb6b0-c59a-11e7-a9fd-155dbd0b0a76-Optimism_Tree_default.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Gratitude Wall is adapted from the Cosmic <a href=\"https://cosmicjs.com/apps/sticky-notes\" rel=\"noopener noreferrer\" target=\"_blank\">Sticky Notes App</a>, built on <a href=\"https://cosmicjs.com/knowledge-base/react-cms\" rel=\"noopener noreferrer\" target=\"_blank\">React</a>, Redux and <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a>. The Wall is currently running on Heroku and is i-framed into WordPress on its landing page. The Life is Good team also built a simple moderation application so that their team can easily approve or delete User Generated Content as it flows in. They also built client-side moderation during content entry, which checks against a banned list of words and blocks submission.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen Shot 2017-11-16 at 1.59.39 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a robust scaffolding to accept, store, and moderate User Generated Content and display it in a custom web app in real time. With Cosmic, we were able to develop an MVP in a matter of hours and focus our resources on UX and design versus content management. The Cosmic Support Team was extremely helpful throughout the process. We&rsquo;re excited to leverage these tools again for future projects.&rdquo;</p><p><cite>&mdash; Chris Schwab, Front End Engineer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Life is Good","key":"company","title":"Company","type":"text","children":null},{"value":"Ecommerce | Apparel","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-28T14:55:56.103Z","created_by":"5716b504e9c686d006000073","created":"2017-10-28T14:55:56.103Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-07-25T21:53:35.289Z","metadata":{"company":"Life is Good","industry_type":"Ecommerce | Apparel","teaser":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","logo":{"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}}},{"_id":"59663607a6a3f55962000e40","slug":"big-fish-launches-marketing-and-tutorial-content-for-games","title":"Big Fish Launches Marketing and Tutorial Content for Games","content":"<p>When <a href=\"http://www.bigfishgames.com\" rel=\"noopener noreferrer\" target=\"_blank\">Big Fish</a> launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch. Big Fish wanted their game studios to have the ability to curate and update content on each of their landing pages. Other CMS systems weren&rsquo;t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b671fa80-ba81-11e7-9419-d7ce2df8354d-Screen Shot 2017-10-26 at 2.12.42 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/bf97f050-ba82-11e7-b96e-3b4c8df8fb98-Screen Shot 2017-10-26 at 2.20.03 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><blockquote><p>&quot;We use Cosmic buckets for each of our mobile game landing pages. While our API and storage usage is low, the number of buckets we need is high, which makes the new Clusters Feature a perfect solution for our company use cases. It allows us to\r\nhave a single consolidated invoice, with an overall API and data-limit, but up to 35 buckets for our use.&quot;</p><p><cite>&mdash; Jessica Chappell, Web Developer&nbsp;</cite></p></blockquote><p>Read <a href=\"http://www.bigfishgames.com/blog\" rel=\"noopener noreferrer\" target=\"_blank\">more</a> about Big Fish and their games.</p>","metafields":[{"value":"Big Fish","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T14:45:27.402Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-11-08T23:15:38.911Z","metadata":{"company":"Big Fish","industry_type":"Gaming","teaser":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","logo":{"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}}},{"_id":"5aa7cd8c3078516dd48d6ad2","slug":"bookabus-builds-a-localized-transportation-website","title":"Bookabus Builds a Localized Transportation Website","content":"<p><a href=\"https://www.bookabus.eu\" rel=\"noopener noreferrer\" target=\"_blank\">Bookabus</a> is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it&rsquo;s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen Shot 2018-04-17 at 6.48.12 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Bookabus needed a new website to communicate their transport routes, terms and marketing materials. &nbsp;A big requirement was the ability to localize their content into different languages for the different areas they&#39;re servicing, including the UK, Netherlands, Germany, Spain, and Belgium. &nbsp;They chose to build their new transportation website with Cosmic because of the ease of use and powerful localization capabilities.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/be1ed900-4236-11e8-bd9f-93df74f6ae30-Screen Shot 2018-04-17 at 6.59.27 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate dynamic content into our website. The product is a great value for your money. This is especially true given that their customer service is top-notch.&quot;</p><p><cite>&mdash; Harrie Pieters, Web Developer&nbsp;</cite></p></blockquote>","metafields":[{"value":"Bookabus","key":"company","title":"Company","type":"text","children":null},{"value":"Transportation","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Bookabus is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it’s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","imgix_url":"https://imgix.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-13T13:09:32.089Z","created_by":"5716b504e9c686d006000073","created":"2018-03-13T13:09:32.089Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-04-19T21:23:26.384Z","metadata":{"company":"Bookabus","industry_type":"Transportation","teaser":"Bookabus is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it’s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events. \n","logo":{"url":"https://cdn.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","imgix_url":"https://imgix.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png"}}}],"app_slugs":[{"slug":"ecommerce-app"},{"slug":"gatsby-ecommerce-website"},{"slug":"ecommerce-personalization"}],"extension_slugs":[{"slug":"wordpress-importer"},{"slug":"product-manager"},{"slug":"amazon-product-search"}],"testimonial":"<p>&quot;Cosmic allowed us to easily integrate dynamic content into our website. The product is a great value for your money. This is especially true given that their customer service is top-notch.&quot;</p>","testimonial_credit":"Harrie Pieters, Web Developer at Bookabus"}},{"_id":"59663607a6a3f55962000e40","slug":"big-fish-launches-marketing-and-tutorial-content-for-games","title":"Big Fish Launches Marketing and Tutorial Content for Games","content":"<p>When <a href=\"http://www.bigfishgames.com\" rel=\"noopener noreferrer\" target=\"_blank\">Big Fish</a> launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch. Big Fish wanted their game studios to have the ability to curate and update content on each of their landing pages. Other CMS systems weren&rsquo;t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b671fa80-ba81-11e7-9419-d7ce2df8354d-Screen Shot 2017-10-26 at 2.12.42 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/bf97f050-ba82-11e7-b96e-3b4c8df8fb98-Screen Shot 2017-10-26 at 2.20.03 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><blockquote><p>&quot;We use Cosmic buckets for each of our mobile game landing pages. While our API and storage usage is low, the number of buckets we need is high, which makes the new Clusters Feature a perfect solution for our company use cases. It allows us to\r\nhave a single consolidated invoice, with an overall API and data-limit, but up to 35 buckets for our use.&quot;</p><p><cite>&mdash; Jessica Chappell, Web Developer&nbsp;</cite></p></blockquote><p>Read <a href=\"http://www.bigfishgames.com/blog\" rel=\"noopener noreferrer\" target=\"_blank\">more</a> about Big Fish and their games.</p>","metafields":[{"value":"Big Fish","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T14:45:27.402Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","order":5,"publish_at":null,"published_at":"2018-11-08T23:15:38.911Z","metadata":{"company":"Big Fish","industry_type":"Gaming","teaser":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","logo":{"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}}},{"_id":"5fa4615dec4b3d0008bbecd6","slug":"movespring","title":"MoveSpring","content":"","metafields":[{"children":null,"type":"file","title":"Logo","key":"logo","id":"cyXKkxlBBJ","value":"f845bad0-4678-11e9-8449-05a08cc194da-movespringlogoblue.svg","url":"https://cdn.cosmicjs.com/f845bad0-4678-11e9-8449-05a08cc194da-movespringlogoblue.svg","imgix_url":"https://imgix.cosmicjs.com/f845bad0-4678-11e9-8449-05a08cc194da-movespringlogoblue.svg"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"1p64OJkIQo","value":"MoveSpring is a fun, easy-to-use activity and steps challenge platform. Step your way to success with quick onboarding, real-time scoring, and flexible plan options."},{"children":null,"type":"text","title":"Brand color","key":"brand_color","id":"w7OGyTyKnH","value":"#4f9cfb"},{"children":null,"type":"file","title":"Background Image","key":"background_image","id":"CFCb7MYuVV","value":"1f12f4a0-1f9b-11eb-a576-4393b78b9c1f-movespring-screens.png","url":"https://cdn.cosmicjs.com/1f12f4a0-1f9b-11eb-a576-4393b78b9c1f-movespring-screens.png","imgix_url":"https://imgix.cosmicjs.com/1f12f4a0-1f9b-11eb-a576-4393b78b9c1f-movespring-screens.png"},{"children":null,"type":"file","title":"Main image","key":"main_image","id":"IYxuiY4yNr","value":"30041d20-1f9b-11eb-a576-4393b78b9c1f-movespring-mobile.jpeg","url":"https://cdn.cosmicjs.com/30041d20-1f9b-11eb-a576-4393b78b9c1f-movespring-mobile.jpeg","imgix_url":"https://imgix.cosmicjs.com/30041d20-1f9b-11eb-a576-4393b78b9c1f-movespring-mobile.jpeg"},{"children":[{"children":null,"type":"html-textarea","title":"Text","key":"text","id":"D3YbDvjRjB","value":"<p dir=\"ltr\"><a href=\"https://movespring.com/\" rel=\"noopener noreferrer\" target=\"_blank\">MoveSpring</a> is a fun, easy-to-use activity and steps challenge platform. Step your way to success with quick onboarding, real-time scoring, and flexible plan options. MoveSpring is used by organizations like Best Buy, Deloitte and the American Cancer Society to make health a priority, and fun, for their employees.&nbsp;</p>"},{"children":null,"type":"file","title":"Image","key":"image","id":"pqwL6WhJtB","value":"e0f465f0-1f9a-11eb-a576-4393b78b9c1f-movespring.png","url":"https://cdn.cosmicjs.com/e0f465f0-1f9a-11eb-a576-4393b78b9c1f-movespring.png","imgix_url":"https://imgix.cosmicjs.com/e0f465f0-1f9a-11eb-a576-4393b78b9c1f-movespring.png"}],"type":"parent","title":"Section 1","key":"section_1","id":"TwBe7O5jzz","value":"<p dir=\"ltr\"><a href=\"https://movespring.com/\" rel=\"noopener noreferrer\" target=\"_blank\">MoveSpring</a> is a fun, easy-to-use activity and steps challenge platform. Step your way to success with quick onboarding, real-time scoring, and flexible plan options. MoveSpring is used by organizations like Best Buy, Deloitte and the American Cancer Society to make health a priority, and fun, for their employees.&nbsp;</p>"},{"children":[{"children":null,"type":"html-textarea","title":"Text","key":"text","id":"r78jSOlzNp","value":"<p>MoveSpring manages multiple content resource sections for its users, broken out by Product, Wellness, Tips and Tricks as well as Technology. The team needed a way to easily add blog and help sections that a non-technical content creator could manage. They were able to quickly model and create their content, integrate the content with their website and add their content creators to start publishing and managing dynamic content.&nbsp;</p>"},{"children":null,"type":"file","title":"Image","key":"image","id":"2CRcEDaXJ2","value":"42b3f020-1f9c-11eb-a576-4393b78b9c1f-team.png","url":"https://cdn.cosmicjs.com/42b3f020-1f9c-11eb-a576-4393b78b9c1f-team.png","imgix_url":"https://imgix.cosmicjs.com/42b3f020-1f9c-11eb-a576-4393b78b9c1f-team.png"}],"type":"parent","title":"Section 2","key":"section_2","id":"JbcAbuX0wu","value":"<p>MoveSpring manages multiple content resource sections for its users, broken out by Product, Wellness, Tips and Tricks as well as Technology. The team needed a way to easily add blog and help sections that a non-technical content creator could manage. They were able to quickly model and create their content, integrate the content with their website and add their content creators to start publishing and managing dynamic content.&nbsp;</p>"},{"children":[{"children":null,"type":"file","title":"Image","key":"image","id":"lxMSbXsSvQ","value":"4dc83350-1f9b-11eb-a576-4393b78b9c1f-John-Contreras.jpeg","url":"https://cdn.cosmicjs.com/4dc83350-1f9b-11eb-a576-4393b78b9c1f-John-Contreras.jpeg","imgix_url":"https://imgix.cosmicjs.com/4dc83350-1f9b-11eb-a576-4393b78b9c1f-John-Contreras.jpeg"},{"children":null,"type":"textarea","title":"Text","key":"text","id":"FlfrjYTon9","value":"We previously used WordPress for our blog content, but found that we really wanted to utilize the same toolset (React / GraphQL) and have the same look and feel as the rest of our site, which can be challenging for a developer not familiar with WordPress. \n\nAdditionally, we have other dynamic content we would like our Customer Success Managers and Sales team to drive without relying on our development team to build and deploy. After discovering Cosmic, our developer was able to get our new blog up and running within days. Cosmic worked exactly how we hoped it would."},{"children":null,"type":"text","title":"Author","key":"author","id":"I1y4yfT7Of","value":"John Contreras, CEO"}],"type":"parent","title":"Testimonial Section","key":"testimonial_section","id":"TOlF3GXLxt","value":"We previously used WordPress for our blog content, but found that we really wanted to utilize the same toolset (React / GraphQL) and have the same look and feel as the rest of our site, which can be challenging for a developer not familiar with WordPress. \n\nAdditionally, we have other dynamic content we would like our Customer Success Managers and Sales team to drive without relying on our development team to build and deploy. After discovering Cosmic, our developer was able to get our new blog up and running within days. Cosmic worked exactly how we hoped it would."},{"children":null,"type":"text","title":"Industry","key":"industry","id":"uWOXKIBnXj","value":"Health and Wellness"},{"children":null,"type":"text","title":"Product","key":"product","id":"5pDXNqBsgc","value":"Mobile App"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"customers","created":"2020-11-05T20:32:29.952Z","created_at":"2020-11-05T20:32:29.952Z","modified_at":"2020-11-05T20:33:41.175Z","status":"published","locale":null,"modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-11-05T20:32:35.995Z","unpublish_at":null,"thumbnail":"https://imgix.cosmicjs.com/30041d20-1f9b-11eb-a576-4393b78b9c1f-movespring-mobile.jpeg","order":5,"metadata":{"logo":{"url":"https://cdn.cosmicjs.com/f845bad0-4678-11e9-8449-05a08cc194da-movespringlogoblue.svg","imgix_url":"https://imgix.cosmicjs.com/f845bad0-4678-11e9-8449-05a08cc194da-movespringlogoblue.svg"},"seo_description":"MoveSpring is a fun, easy-to-use activity and steps challenge platform. Step your way to success with quick onboarding, real-time scoring, and flexible plan options.","brand_color":"#4f9cfb","background_image":{"url":"https://cdn.cosmicjs.com/1f12f4a0-1f9b-11eb-a576-4393b78b9c1f-movespring-screens.png","imgix_url":"https://imgix.cosmicjs.com/1f12f4a0-1f9b-11eb-a576-4393b78b9c1f-movespring-screens.png"},"main_image":{"url":"https://cdn.cosmicjs.com/30041d20-1f9b-11eb-a576-4393b78b9c1f-movespring-mobile.jpeg","imgix_url":"https://imgix.cosmicjs.com/30041d20-1f9b-11eb-a576-4393b78b9c1f-movespring-mobile.jpeg"},"section_1":{"text":"<p dir=\"ltr\"><a href=\"https://movespring.com/\" rel=\"noopener noreferrer\" target=\"_blank\">MoveSpring</a> is a fun, easy-to-use activity and steps challenge platform. Step your way to success with quick onboarding, real-time scoring, and flexible plan options. MoveSpring is used by organizations like Best Buy, Deloitte and the American Cancer Society to make health a priority, and fun, for their employees.&nbsp;</p>","image":{"url":"https://cdn.cosmicjs.com/e0f465f0-1f9a-11eb-a576-4393b78b9c1f-movespring.png","imgix_url":"https://imgix.cosmicjs.com/e0f465f0-1f9a-11eb-a576-4393b78b9c1f-movespring.png"}},"section_2":{"text":"<p>MoveSpring manages multiple content resource sections for its users, broken out by Product, Wellness, Tips and Tricks as well as Technology. The team needed a way to easily add blog and help sections that a non-technical content creator could manage. They were able to quickly model and create their content, integrate the content with their website and add their content creators to start publishing and managing dynamic content.&nbsp;</p>","image":{"url":"https://cdn.cosmicjs.com/42b3f020-1f9c-11eb-a576-4393b78b9c1f-team.png","imgix_url":"https://imgix.cosmicjs.com/42b3f020-1f9c-11eb-a576-4393b78b9c1f-team.png"}},"testimonial_section":{"image":{"url":"https://cdn.cosmicjs.com/4dc83350-1f9b-11eb-a576-4393b78b9c1f-John-Contreras.jpeg","imgix_url":"https://imgix.cosmicjs.com/4dc83350-1f9b-11eb-a576-4393b78b9c1f-John-Contreras.jpeg"},"text":"We previously used WordPress for our blog content, but found that we really wanted to utilize the same toolset (React / GraphQL) and have the same look and feel as the rest of our site, which can be challenging for a developer not familiar with WordPress. \n\nAdditionally, we have other dynamic content we would like our Customer Success Managers and Sales team to drive without relying on our development team to build and deploy. After discovering Cosmic, our developer was able to get our new blog up and running within days. Cosmic worked exactly how we hoped it would.","author":"John Contreras, CEO"},"industry":"Health and Wellness","product":"Mobile App"}},{"_id":"5ca0564b592d422e61a72605","order":5,"slug":"imgix","title":"imgix","content":"","metafields":[{"children":null,"type":"text","title":"Link","key":"link","id":"AZwNXIoMwl","value":"https://cosmicjs.com/extensions/imgix-editor"},{"children":null,"type":"file","title":"Image","key":"image","id":"ollf7eKIZ0","value":"c26408b0-8ed7-11ea-910b-435199f15a39-imgix.jpg","url":"https://cdn.cosmicjs.com/c26408b0-8ed7-11ea-910b-435199f15a39-imgix.jpg","imgix_url":"https://imgix.cosmicjs.com/c26408b0-8ed7-11ea-910b-435199f15a39-imgix.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"integrations","created_at":"2019-03-31T05:55:23.909Z","created_by":"5357ef811693be2118000001","created":"2019-03-31T05:55:23.909Z","status":"published","published_at":"2020-05-05T13:53:13.412Z","modified_at":"2020-05-05T13:53:13.412Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"link":"https://cosmicjs.com/extensions/imgix-editor","image":{"url":"https://cdn.cosmicjs.com/c26408b0-8ed7-11ea-910b-435199f15a39-imgix.jpg","imgix_url":"https://imgix.cosmicjs.com/c26408b0-8ed7-11ea-910b-435199f15a39-imgix.jpg"}}},{"_id":"5b450b580cfaf8031d40578e","order":5,"slug":"gatsby-cms","title":"Gatsby CMS","content":"<h2>Gatsby CMS Templates</h2><p>You can use our <a href=\"https://www.cosmicjs.com/apps?q=Gatsby\">Gatsby CMS Templates</a>, which includes Gatsby CMS GitHub code examples.</p><h2>Gatsby CMS Dashboard</h2><p>Cosmic offers a Headless CMS to enable your team to build apps faster. Developers get powerful API tools, and content creators get an intuitive content management dashboard. Get started free.</p>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"ZaqnFiq062","value":"17c79a80-cf72-11ea-a03b-a9b51dcc4b0e-gatsby-cms.svg","url":"https://cdn.cosmicjs.com/17c79a80-cf72-11ea-a03b-a9b51dcc4b0e-gatsby-cms.svg","imgix_url":"https://imgix.cosmicjs.com/17c79a80-cf72-11ea-a03b-a9b51dcc4b0e-gatsby-cms.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"vK0c1hXNj1","value":"17c79a80-cf72-11ea-a03b-a9b51dcc4b0e-gatsby-cms.svg","url":"https://cdn.cosmicjs.com/17c79a80-cf72-11ea-a03b-a9b51dcc4b0e-gatsby-cms.svg","imgix_url":"https://imgix.cosmicjs.com/17c79a80-cf72-11ea-a03b-a9b51dcc4b0e-gatsby-cms.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"CfHSJxgzY3","value":"<p>Cosmic is the best CMS for Gatsby websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"sVMM82hPRy","value":"Gatsby"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"zCXfE4Gyt9","value":"Cosmic is the best CMS for Gatsby websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"fI5S1u9CR1","value":"00fc1180-fd2c-11eb-aaf9-c7d10ae67fc2-Cosmic-Gatsby-CMS.png","url":"https://cdn.cosmicjs.com/00fc1180-fd2c-11eb-aaf9-c7d10ae67fc2-Cosmic-Gatsby-CMS.png","imgix_url":"https://imgix.cosmicjs.com/00fc1180-fd2c-11eb-aaf9-c7d10ae67fc2-Cosmic-Gatsby-CMS.png"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"xJ8j4o1ktC","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"srVS40iQ4T","value":"Best Headless CMS for Gatsby"},{"children":[{"type":"repeating_item","children":[{"title":"Title","key":"title","value":"Using Cosmic as a Headless CMS with Gatsby","type":"text","required":false},{"title":"Link","key":"link","value":"https://www.youtube.com/embed/Qls5frYlJeI?showinfo=0&wmode=opaque&widget_referrer=https%3A%2F%2Fwww.cosmicjs.com%2Fknowledge-base%2Freact-cms&enablejsapi=1&origin=https%3A%2F%2Fcdn.embedly.com&widgetid=1","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Title","key":"title","value":"Build a Cosmic-powered blog using Gatsby","type":"text","required":false},{"title":"Link","key":"link","value":"https://www.youtube.com/embed/mGcAWs1xRnY?showinfo=0&wmode=opaque&widget_referrer=https%3A%2F%2Fwww.cosmicjs.com%2Fknowledge-base%2Freact-cms&enablejsapi=1&origin=https%3A%2F%2Fcdn.embedly.com&widgetid=1","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Title","key":"title","value":"Webinar: Localization with Cosmic and Gatsby","type":"text","required":false},{"title":"Link","key":"link","value":"https://www.youtube.com/embed/16m3wRFPGAY?showinfo=0&wmode=opaque&widget_referrer=https%3A%2F%2Fwww.cosmicjs.com%2Fknowledge-base%2Freact-cms&enablejsapi=1&origin=https%3A%2F%2Fcdn.embedly.com&widgetid=1","type":"text","required":false}]}],"type":"repeater","title":"Videos","key":"videos","id":"TQNXHqHIy1","value":"Using Cosmic as a Headless CMS with Gatsby","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]},{"children":null,"type":"text","title":"Apps Search Term","key":"apps_search_term","id":"lKUHXkU3KV","value":""},{"children":null,"type":"text","title":"Articles Search Term","key":"articles_search_term","id":"EO80afZlN5","value":""},{"children":null,"type":"text","title":"Page Overview Title","key":"page_overview_title","id":"Ulxp7GzueH","value":""},{"children":null,"type":"html-textarea","title":"Page Overview","key":"page_overview","id":"8JsGitDZdv","value":""},{"children":null,"type":"html-textarea","title":"SEO Content","key":"seo_content","id":"c8JLXEEdLy","value":""},{"children":[],"type":"repeater","title":"Apps","key":"apps","id":"F9KSXqc93G","value":"","repeater_fields":[{"title":"App Slug","key":"app_slug","value":"","type":"text","required":false}]},{"children":[],"type":"repeater","title":"Articles","key":"articles","id":"SHeNrwPsri","value":"","repeater_fields":[{"title":"Article Slug","key":"article_slug","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-22T23:09:01.747Z","created_by":"5357ef811693be2118000001","created":"2018-07-10T19:39:04.763Z","status":"published","modified_at":"2021-08-14T18:18:23.200Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2021-08-14T18:18:23.200Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/17c79a80-cf72-11ea-a03b-a9b51dcc4b0e-gatsby-cms.svg","imgix_url":"https://imgix.cosmicjs.com/17c79a80-cf72-11ea-a03b-a9b51dcc4b0e-gatsby-cms.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/17c79a80-cf72-11ea-a03b-a9b51dcc4b0e-gatsby-cms.svg","imgix_url":"https://imgix.cosmicjs.com/17c79a80-cf72-11ea-a03b-a9b51dcc4b0e-gatsby-cms.svg"},"blurb":"<p>Cosmic is the best CMS for Gatsby websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Gatsby","seo_description":"Cosmic is the best CMS for Gatsby websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/00fc1180-fd2c-11eb-aaf9-c7d10ae67fc2-Cosmic-Gatsby-CMS.png","imgix_url":"https://imgix.cosmicjs.com/00fc1180-fd2c-11eb-aaf9-c7d10ae67fc2-Cosmic-Gatsby-CMS.png"},"code_example":"","seo_title":"Best Headless CMS for Gatsby","videos":[{"title":"Using Cosmic as a Headless CMS with Gatsby","link":"https://www.youtube.com/embed/Qls5frYlJeI?showinfo=0&wmode=opaque&widget_referrer=https%3A%2F%2Fwww.cosmicjs.com%2Fknowledge-base%2Freact-cms&enablejsapi=1&origin=https%3A%2F%2Fcdn.embedly.com&widgetid=1"},{"title":"Build a Cosmic-powered blog using Gatsby","link":"https://www.youtube.com/embed/mGcAWs1xRnY?showinfo=0&wmode=opaque&widget_referrer=https%3A%2F%2Fwww.cosmicjs.com%2Fknowledge-base%2Freact-cms&enablejsapi=1&origin=https%3A%2F%2Fcdn.embedly.com&widgetid=1"},{"title":"Webinar: Localization with Cosmic and Gatsby","link":"https://www.youtube.com/embed/16m3wRFPGAY?showinfo=0&wmode=opaque&widget_referrer=https%3A%2F%2Fwww.cosmicjs.com%2Fknowledge-base%2Freact-cms&enablejsapi=1&origin=https%3A%2F%2Fcdn.embedly.com&widgetid=1"}],"apps_search_term":"","articles_search_term":"","page_overview_title":"","page_overview":"","seo_content":"","apps":[],"articles":[]}},{"_id":"5f185e5ba4ce590007de290b","order":5,"slug":"disha","title":"Disha Sharma","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"IbUug3RuT1","value":"disha"},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"QhOaNP5Nw8","value":"f2c65180-d8cd-11ea-8d02-d3e2c968eb26-disha.png","url":"https://cdn.cosmicjs.com/f2c65180-d8cd-11ea-8d02-d3e2c968eb26-disha.png","imgix_url":"https://imgix.cosmicjs.com/f2c65180-d8cd-11ea-8d02-d3e2c968eb26-disha.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2020-07-22T15:42:19.367Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-14T17:45:18.405Z","created":"2020-07-22T15:42:19.367Z","status":"published","published_at":"2020-08-07T16:49:29.355Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"thumbnail":"https://imgix.cosmicjs.com/f2c65180-d8cd-11ea-8d02-d3e2c968eb26-disha.png","metadata":{"username":"disha","profile_picture":{"url":"https://cdn.cosmicjs.com/f2c65180-d8cd-11ea-8d02-d3e2c968eb26-disha.png","imgix_url":"https://imgix.cosmicjs.com/f2c65180-d8cd-11ea-8d02-d3e2c968eb26-disha.png"}}},{"_id":"59e78bc6757934735d0000e9","slug":"usage-licenses","title":"Usage Licenses","content":"<p>Use of an item (purchased App or Extension) &nbsp;is bound by the license you purchase. A license grants you a non-exclusive and non-transferable right to use and incorporate the item in your personal or commercial projects. There are several licenses available:</p><p><br></p><h3>Single Application License</h3><hr><ol><li>Your use of the item is restricted to a single installation.</li><li>You may use the item in work which you are creating for your own purposes or for your client.</li><li>You must not incorporate the item in a work which is created for redistribution or resale by you or your client.</li><li>The item may not be redistributed or resold.</li><li>If the item contains licensed components, those components must only be used within the item and you must not extract and use them on a stand-alone basis.</li><li>If the item was created using materials which are the subject of a GNU General Public License (GPL), your use of the item is subject to the terms of the GPL in place of the foregoing conditions (to the extent the GPL applies).</li></ol><p><br></p><h3>Multiple Applications License</h3><hr><ol><li>Your use of the item may extend to multiple installations.</li><li>You may use the item in work which you are creating for your own purposes or for your clients.</li><li>You must not incorporate the item in a work which is created for redistribution or resale by you or your clients.</li><li>The item may not be redistributed or resold.</li><li>If the item contains licensed components, those components must only be used within the item and you must not extract and use them on a stand-alone basis.</li><li>If the item was created using materials which are the subject of a GNU General Public License (GPL), your use of the item is subject to the terms of the GPL in place of the foregoing conditions (to the extent the GPL applies).</li></ol><p><br></p><h3>Extended License</h3><hr><p>This license must be purchased if you intend to license, sublicense, redistribute, or resell the final product.</p><ol><li>Your use of the item may extend to multiple installations.</li><li>You may use the item in work which you are creating for your own purposes or for your clients.</li><li>You may license, sublicense, redistribute, or resell the item in the following circumstances:<ol><li>the item is incorporated into a larger work you have created; or</li><li>if you modify the item and resell the end product.</li></ol></li><li>If the item contains licensed components, those components must only be used within the item and you must not extract and use them on a stand-alone basis.</li><li>If the item was created using materials which are the subject of a GNU General Public License (GPL), your use of the item is subject to the terms of the GPL in place of the foregoing conditions (to the extent the GPL applies).</li></ol>","metafields":[],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"pages","created":"2017-10-18T17:13:42.455Z","created_at":"2017-10-18T17:13:42.455Z","modified_at":"2017-10-18T17:13:42.455Z","created_by":"5357ef811693be2118000001","order":5,"metadata":null},{"_id":"636a75e51d16ae000807d31f","order":5,"slug":"global-infrastructure-updates","title":"Global infrastructure updates","content":"<p><img src=\"https://imgix.cosmicjs.com/92d6b810-5f93-11ed-8cf5-3be6a6f9365d-perf.png?w=1200&auto=format\" data-name=\"perf.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\">We are pleased to share that we have expanded our global infrastructure to include coverage\r\nof more regions around the globe to ensure greater service reliability and performance. Regions now include:</p><ol><li>US West (<code>us-west-2</code>)</li><li>US East (<code>us-east-1</code>)</li><li>Ireland (<code>eu-west-1</code>)</li><li>Australia (<code>ap-southeast-2</code>)</li></ol><p>&hellip; more regions coming soon</p><p><br><strong>What does this mean?</strong><br>With this update comes increased resiliency and performance for our global customers.</p><ol><li>Resiliency: If there is ever an outage in a region due to an upstream cloud service provider outage (for example if US West goes down) the DNS will automatically route to the nearest regional deployment (US East).</li><li>Performance boost: Customers should now notice performance improvements from our dashboard and API (between 2x-3x faster) which should make your dashboard workflows and API requests more responsive and faster wherever you are in the world.</li></ol><p><br><strong>Recent issues</strong><br>We recently experienced two service outages due to an upstream issue with one of our cloud service providers. Because of an over-dependence on a single region, our dashboard and API (non-cached requests) were down for up to 30 minutes (though cached API\r\nrequests were still reachable). This is unacceptable.</p><p><br><strong>Our response</strong><br>This is our response to this incident. It fixes this vulnerability to ensure that this issue never happens again as well as brings the performance benefits stated above.</p><p><br>Uptime matters. It matters to our customers and it matters to the Cosmic team. By choosing Cosmic we understand that you are entrusting us with your mission-critical content to be ready when and where you need it. We are committed to constantly improving\r\nour service to continue building your trust with maximum uptime and service reliability. On this solid foundation, we know great things can be built. We are pleased to share this update with you to further help your team build great products together\r\nwith reliable uptime and improved global performance.</p><p>Please let me know if you have any questions. <a href=\"https://www.cosmicjs.com/community\">Join our community on Slack</a> and <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">follow Cosmic on Twitter</a> for the latest updates.</p><p>Tony Spiro<br>Cosmic CEO</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"HJ3S7aWixP","value":"5768b253163172890e00002c","required":true,"object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"VhV6x25JaP","value":"<p>We are pleased to share that we have expanded our global infrastructure to include coverage of more regions around the globe to ensure greater service reliability and performance.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"A84Gug7pez","value":"92d6b810-5f93-11ed-8cf5-3be6a6f9365d-perf.png","url":"https://cdn.cosmicjs.com/92d6b810-5f93-11ed-8cf5-3be6a6f9365d-perf.png","imgix_url":"https://imgix.cosmicjs.com/92d6b810-5f93-11ed-8cf5-3be6a6f9365d-perf.png"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"Ep1iAHXw30","value":"We are pleased to share that we have expanded our global infrastructure to include coverage of more regions around the globe to ensure greater service reliability and performance."},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"gMZvuFzYG1","value":"2022-11-08"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2022-11-08T15:29:41.731Z","created_by":"5357ef811693be2118000001","modified_at":"2022-11-08T19:04:21.211Z","created":"2022-11-08T15:29:41.731Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/92d6b810-5f93-11ed-8cf5-3be6a6f9365d-perf.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2022-11-08T19:04:21.211Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We are pleased to share that we have expanded our global infrastructure to include coverage of more regions around the globe to ensure greater service reliability and performance.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/92d6b810-5f93-11ed-8cf5-3be6a6f9365d-perf.png","imgix_url":"https://imgix.cosmicjs.com/92d6b810-5f93-11ed-8cf5-3be6a6f9365d-perf.png"},"seo_meta_description":"We are pleased to share that we have expanded our global infrastructure to include coverage of more regions around the globe to ensure greater service reliability and performance.","published_date":"2022-11-08"}},{"_id":"5bad2366a6c4790aab95facf","order":6,"slug":"unsplash","title":"Unsplash","content":"","metafields":[{"value":"https://cosmicjs.com/extensions/unsplash-photos","key":"link","title":"Link","type":"text","children":null},{"value":"5e044590-c284-11e8-ba71-bd5fda05f958-2000px-Logo_of_Unsplash.png","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/5e044590-c284-11e8-ba71-bd5fda05f958-2000px-Logo_of_Unsplash.png","imgix_url":"https://imgix.cosmicjs.com/5e044590-c284-11e8-ba71-bd5fda05f958-2000px-Logo_of_Unsplash.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"integrations","created_at":"2018-09-27T18:37:26.120Z","created_by":"5716b504e9c686d006000073","created":"2018-09-27T18:37:26.120Z","status":"published","published_at":"2018-09-27T18:37:26.120Z","metadata":{"link":"https://cosmicjs.com/extensions/unsplash-photos","image":{"url":"https://cdn.cosmicjs.com/5e044590-c284-11e8-ba71-bd5fda05f958-2000px-Logo_of_Unsplash.png","imgix_url":"https://imgix.cosmicjs.com/5e044590-c284-11e8-ba71-bd5fda05f958-2000px-Logo_of_Unsplash.png"}}},{"_id":"5fa4605151ad8700082812ec","slug":"vuetify","title":"Vuetify","content":"","metafields":[{"children":null,"type":"file","title":"Logo","key":"logo","id":"GwQxfUA6Og","value":"fe54f800-1f9d-11eb-9446-a99141d2db14-vuetify.svg","url":"https://cdn.cosmicjs.com/fe54f800-1f9d-11eb-9446-a99141d2db14-vuetify.svg","imgix_url":"https://imgix.cosmicjs.com/fe54f800-1f9d-11eb-9446-a99141d2db14-vuetify.svg"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"difVhIqjAw","value":"Vuetify needed to find an API that matched their appreciation for intuitive design, and integrated all the flexible features they required. After evaluating their options, nothing seemed like the right combination of those values for Vuetify, except for Cosmic."},{"children":null,"type":"text","title":"Brand Color","key":"brand_color","id":"qe2u8dEvrz","value":"#1867c0"},{"children":null,"type":"file","title":"Background Image","key":"background_image","id":"BNLCkGYZEP","value":"b22e6190-1f9e-11eb-9446-a99141d2db14-vuetify-store.png","url":"https://cdn.cosmicjs.com/b22e6190-1f9e-11eb-9446-a99141d2db14-vuetify-store.png","imgix_url":"https://imgix.cosmicjs.com/b22e6190-1f9e-11eb-9446-a99141d2db14-vuetify-store.png"},{"children":null,"type":"text","title":"Industry","key":"industry","id":"elVDK8LTbV","value":"Developer Tools"},{"children":null,"type":"text","title":"Product","key":"product","id":"Icgn6qijcx","value":"Vue.js Component Framework"},{"children":null,"type":"file","title":"Main Image","key":"main_image","id":"TWfMXL3THx","value":"e0ba62d0-1f9d-11eb-9446-a99141d2db14-vuetify.png","url":"https://cdn.cosmicjs.com/e0ba62d0-1f9d-11eb-9446-a99141d2db14-vuetify.png","imgix_url":"https://imgix.cosmicjs.com/e0ba62d0-1f9d-11eb-9446-a99141d2db14-vuetify.png"},{"children":[{"children":null,"type":"file","title":"Image","key":"image","id":"KLR7pg8w08","value":"956ef4b0-1f9f-11eb-9446-a99141d2db14-vuetify-dash-2.png","url":"https://cdn.cosmicjs.com/956ef4b0-1f9f-11eb-9446-a99141d2db14-vuetify-dash-2.png","imgix_url":"https://imgix.cosmicjs.com/956ef4b0-1f9f-11eb-9446-a99141d2db14-vuetify-dash-2.png"},{"children":null,"type":"html-textarea","title":"Text","key":"text","id":"21v6QyDPJQ","value":"<p>Since its founding in 2016, <a href=\"https://vuetifyjs.com/en/\">Vuetify</a> has rapidly grown to become one of the leading component libraries for creating powerful <a href=\"https://vuejs.org/\" rel=\"noopener noreferrer\" target=\"_blank\">Vue</a> applications. Led by founder <a href=\"https://www.cosmicjs.com/blog/developer-spotlight-john-leider-of-vuetify\" rel=\"noopener noreferrer\" target=\"_blank\">John Leider</a>, the Vuetify teams&#39; meticulous focus on creating systems that are intuitive and easy-to-use has allowed them to quickly realize great success in their space.</p><p>But in early 2020, Vuetify had a problem. Their online store was completely integrated into Shopify&#39;s back-end platform, and getting this API to communicate with the front-end of their website was far too slow and required too many queries.</p>"}],"type":"parent","title":"Section 1","key":"section_1","id":"2eitBLDAUi","value":"<p>Since its founding in 2016, <a href=\"https://vuetifyjs.com/en/\">Vuetify</a> has rapidly grown to become one of the leading component libraries for creating powerful <a href=\"https://vuejs.org/\" rel=\"noopener noreferrer\" target=\"_blank\">Vue</a> applications. Led by founder <a href=\"https://www.cosmicjs.com/blog/developer-spotlight-john-leider-of-vuetify\" rel=\"noopener noreferrer\" target=\"_blank\">John Leider</a>, the Vuetify teams' meticulous focus on creating systems that are intuitive and easy-to-use has allowed them to quickly realize great success in their space.</p><p>But in early 2020, Vuetify had a problem. Their online store was completely integrated into Shopify's back-end platform, and getting this API to communicate with the front-end of their website was far too slow and required too many queries.</p>"},{"children":[{"children":null,"type":"file","title":"Image","key":"image","id":"vVsGfUVLwt","value":"a09f9980-1f9e-11eb-9446-a99141d2db14-vuetify-dash-1.png","url":"https://cdn.cosmicjs.com/a09f9980-1f9e-11eb-9446-a99141d2db14-vuetify-dash-1.png","imgix_url":"https://imgix.cosmicjs.com/a09f9980-1f9e-11eb-9446-a99141d2db14-vuetify-dash-1.png"},{"children":null,"type":"html-textarea","title":"Text","key":"text","id":"HbS6OIpYJ0","value":"<p>On top of that, due to Vuetify&#39;s rapid expansion in recent years, they were now managing all different kinds of documents, affiliate links, and sponsors in their original code base. This was quickly becoming sub-optimal. Vuetify needed to find an API that matched their appreciation for intuitive design, and integrated all the flexible features they required. After evaluating their options, nothing seemed like the right combination of those values for Vuetify, except for Cosmic.</p>"}],"type":"parent","title":"Section 2","key":"section_2","id":"8GEkPxSbIy","value":"<p>On top of that, due to Vuetify's rapid expansion in recent years, they were now managing all different kinds of documents, affiliate links, and sponsors in their original code base. This was quickly becoming sub-optimal. Vuetify needed to find an API that matched their appreciation for intuitive design, and integrated all the flexible features they required. After evaluating their options, nothing seemed like the right combination of those values for Vuetify, except for Cosmic.</p>"},{"children":[{"children":null,"type":"file","title":"Image","key":"image","id":"BVPxhRNuRc","value":"ba9266f0-1f9f-11eb-9446-a99141d2db14-john.jpeg","url":"https://cdn.cosmicjs.com/ba9266f0-1f9f-11eb-9446-a99141d2db14-john.jpeg","imgix_url":"https://imgix.cosmicjs.com/ba9266f0-1f9f-11eb-9446-a99141d2db14-john.jpeg"},{"children":null,"type":"text","title":"Author","key":"author","id":"yCtTrUD8pp","value":"John Leider, Chief Executive Officer"},{"children":null,"type":"textarea","title":"Text","key":"text","id":"VuzYKNz7FA","value":"It was literally 10 to 15 minutes from taking the SDK, to getting the data I needed, to consuming it. We cut our server response time down from 300-400 ms to about 50 ms. Instead of needing to query the Shopify API, now we only need to query Cosmic. The baseline just works out-of-the-box, and there's considerable more information and documentation if you need it."},{"children":null,"type":"textarea","title":"Testimonial Home","key":"testimonial_home","id":"exbexpyc0uphm7bue1sd","object_type":"undefined","value":"\"We cut our server response time down from 300-400 ms to about 50 ms. The Baseline just works out of the box.\""}],"type":"parent","title":"Testimonial Section","key":"testimonial_section","id":"PnRAXzdkfg","value":"John Leider, Chief Executive Officer"},{"children":null,"type":"switch","title":"Featured on Home","key":"featured_on_home","id":"uo2l5VWXlB","value":true,"options":"yes,no"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"customers","created":"2020-11-05T20:28:01.225Z","created_at":"2020-11-05T20:28:01.225Z","modified_at":"2020-12-18T15:20:04.477Z","status":"published","locale":null,"modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-12-18T15:20:04.477Z","unpublish_at":null,"thumbnail":"https://imgix.cosmicjs.com/e0ba62d0-1f9d-11eb-9446-a99141d2db14-vuetify.png","order":6,"metadata":{"logo":{"url":"https://cdn.cosmicjs.com/fe54f800-1f9d-11eb-9446-a99141d2db14-vuetify.svg","imgix_url":"https://imgix.cosmicjs.com/fe54f800-1f9d-11eb-9446-a99141d2db14-vuetify.svg"},"seo_description":"Vuetify needed to find an API that matched their appreciation for intuitive design, and integrated all the flexible features they required. After evaluating their options, nothing seemed like the right combination of those values for Vuetify, except for Cosmic.","brand_color":"#1867c0","background_image":{"url":"https://cdn.cosmicjs.com/b22e6190-1f9e-11eb-9446-a99141d2db14-vuetify-store.png","imgix_url":"https://imgix.cosmicjs.com/b22e6190-1f9e-11eb-9446-a99141d2db14-vuetify-store.png"},"industry":"Developer Tools","product":"Vue.js Component Framework","main_image":{"url":"https://cdn.cosmicjs.com/e0ba62d0-1f9d-11eb-9446-a99141d2db14-vuetify.png","imgix_url":"https://imgix.cosmicjs.com/e0ba62d0-1f9d-11eb-9446-a99141d2db14-vuetify.png"},"section_1":{"image":{"url":"https://cdn.cosmicjs.com/956ef4b0-1f9f-11eb-9446-a99141d2db14-vuetify-dash-2.png","imgix_url":"https://imgix.cosmicjs.com/956ef4b0-1f9f-11eb-9446-a99141d2db14-vuetify-dash-2.png"},"text":"<p>Since its founding in 2016, <a href=\"https://vuetifyjs.com/en/\">Vuetify</a> has rapidly grown to become one of the leading component libraries for creating powerful <a href=\"https://vuejs.org/\" rel=\"noopener noreferrer\" target=\"_blank\">Vue</a> applications. Led by founder <a href=\"https://www.cosmicjs.com/blog/developer-spotlight-john-leider-of-vuetify\" rel=\"noopener noreferrer\" target=\"_blank\">John Leider</a>, the Vuetify teams&#39; meticulous focus on creating systems that are intuitive and easy-to-use has allowed them to quickly realize great success in their space.</p><p>But in early 2020, Vuetify had a problem. Their online store was completely integrated into Shopify&#39;s back-end platform, and getting this API to communicate with the front-end of their website was far too slow and required too many queries.</p>"},"section_2":{"image":{"url":"https://cdn.cosmicjs.com/a09f9980-1f9e-11eb-9446-a99141d2db14-vuetify-dash-1.png","imgix_url":"https://imgix.cosmicjs.com/a09f9980-1f9e-11eb-9446-a99141d2db14-vuetify-dash-1.png"},"text":"<p>On top of that, due to Vuetify&#39;s rapid expansion in recent years, they were now managing all different kinds of documents, affiliate links, and sponsors in their original code base. This was quickly becoming sub-optimal. Vuetify needed to find an API that matched their appreciation for intuitive design, and integrated all the flexible features they required. After evaluating their options, nothing seemed like the right combination of those values for Vuetify, except for Cosmic.</p>"},"testimonial_section":{"image":{"url":"https://cdn.cosmicjs.com/ba9266f0-1f9f-11eb-9446-a99141d2db14-john.jpeg","imgix_url":"https://imgix.cosmicjs.com/ba9266f0-1f9f-11eb-9446-a99141d2db14-john.jpeg"},"author":"John Leider, Chief Executive Officer","text":"It was literally 10 to 15 minutes from taking the SDK, to getting the data I needed, to consuming it. We cut our server response time down from 300-400 ms to about 50 ms. Instead of needing to query the Shopify API, now we only need to query Cosmic. The baseline just works out-of-the-box, and there's considerable more information and documentation if you need it.","testimonial_home":"\"We cut our server response time down from 300-400 ms to about 50 ms. The Baseline just works out of the box.\""},"featured_on_home":true}},{"_id":"58fc0b235161d903690003e1","order":6,"slug":"graphql-cms","title":"GraphQL CMS","content":"<p>Cosmic JS provides a GraphQL CMS solution that allows you to build efficient apps that only get what they need from the API. Get a feel for GraphQL by taking a spin through our <a data-target-href=\"https://cosmicjs.com/apps?languages=GraphQL\" href=\"https://cosmicjs.com/apps?languages=GraphQL\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">GraphQL Apps</a> and check out the tutorials below.</p><h3>GraphQL CMS Articles</h3><p><a href=\"https://cosmicjs.com/articles?q=graphql\" rel=\"noopener noreferrer\" target=\"_blank\">Developer Community: GraphQL Articles</a><br><a href=\"https://cosmicjs.com/blog/how-to-build-a-react-website-powered-by-the-cosmic-js-graphql-api\">How to Build a React Website Powered by the Cosmic JS GraphQL API</a></p><h3>GraphQL CMS Resources</h3><p><a data-target-href=\"https://cosmicjs.com/docs/graphql\" href=\"https://cosmicjs.com/docs/graphql-api\" rel=\"noopener noreferrer\" target=\"_blank\">GraphQL API Documentation</a><br><a data-target-href=\"https://cosmicjs.com/apps?languages=GraphQL\" href=\"https://cosmicjs.com/apps?languages=GraphQL\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">GraphQL Apps</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official JavaScript Client&nbsp;</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3 style=' font-family: \"Open Sans\", sans-serif; color: rgb(51, 51, 51); font-size: 24px; text-align: start; background-color: rgb(255, 255, 255);'>Examples</h3><p>Simple AJAX example:<br><iframe width=\"100%\" height=\"650\" src=\"https://jsfiddle.net/3kuy6s9f/embedded/js,html,result/\" allowfullscreen=\"allowfullscreen\" frameborder=\"0\"></iframe></p>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"cRhBFFLtt9","value":"c1df5170-27c8-11e7-9631-b17e7278f329-graphql.svg","url":"https://cdn.cosmicjs.com/c1df5170-27c8-11e7-9631-b17e7278f329-graphql.svg","imgix_url":"https://imgix.cosmicjs.com/c1df5170-27c8-11e7-9631-b17e7278f329-graphql.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"xSWDBgGlIw","value":"c1df5170-27c8-11e7-9631-b17e7278f329-graphql.svg","url":"https://cdn.cosmicjs.com/c1df5170-27c8-11e7-9631-b17e7278f329-graphql.svg","imgix_url":"https://imgix.cosmicjs.com/c1df5170-27c8-11e7-9631-b17e7278f329-graphql.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"BPFTZjeq5N","value":"<p>Cosmic is the best CMS for GraphQL-powered websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers (REST and GraphQL options) &nbsp;and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"xqvD504oxb","value":"GraphQL"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"JJWP1kBZF2","value":"Cosmic is the best CMS for GraphQL-powered websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers (REST and GraphQL options)  and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"oFogxrjQHH","value":"9e3c1eb0-2aca-11e7-ae54-e9a1fc58ec22-graphql.jpg","url":"https://cdn.cosmicjs.com/9e3c1eb0-2aca-11e7-ae54-e9a1fc58ec22-graphql.jpg","imgix_url":"https://imgix.cosmicjs.com/9e3c1eb0-2aca-11e7-ae54-e9a1fc58ec22-graphql.jpg"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"IMqLHIo7vR","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"3W4ufg8lxO","value":"Best Headless CMS for GraphQL"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"frgtgqfrpylludl8pnsi","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-23T02:02:11.194Z","created_by":"5357ef811693be2118000001","created":"2017-04-23T02:02:11.194Z","status":"published","modified_at":"2020-06-27T19:12:19.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-27T19:12:19.885Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/c1df5170-27c8-11e7-9631-b17e7278f329-graphql.svg","imgix_url":"https://imgix.cosmicjs.com/c1df5170-27c8-11e7-9631-b17e7278f329-graphql.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/c1df5170-27c8-11e7-9631-b17e7278f329-graphql.svg","imgix_url":"https://imgix.cosmicjs.com/c1df5170-27c8-11e7-9631-b17e7278f329-graphql.svg"},"blurb":"<p>Cosmic is the best CMS for GraphQL-powered websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers (REST and GraphQL options) &nbsp;and an intuitive admin dashboard for content creators.</p>","headline":"GraphQL","seo_description":"Cosmic is the best CMS for GraphQL-powered websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers (REST and GraphQL options)  and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/9e3c1eb0-2aca-11e7-ae54-e9a1fc58ec22-graphql.jpg","imgix_url":"https://imgix.cosmicjs.com/9e3c1eb0-2aca-11e7-ae54-e9a1fc58ec22-graphql.jpg"},"code_example":"","seo_title":"Best Headless CMS for GraphQL","videos":[]}},{"_id":"5ef64ed6f3c07a00071076ef","slug":"adobe-experience-manager","title":"Adobe Experience Manager","content":"<p><span style=\"color: rgb(88, 96, 105);\">Adobe Experience Manager (AEM) describes itself as a comprehensive content management solution for building websites, mobile apps and forms. They offer a hybrid CMS, offering a decoupled CMS or headless-only CMS. <span style=\"color: rgb(88, 96, 105);\">However, as it tries to keep up with new pure Headless CMS solutions, <span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\">it would rather you not use it as a Headless CMS. <span style=\"color: rgb(88, 96, 105);\">Cosmic is an alternative to <span style=\"color: rgb(88, 96, 105);\">Adobe Experience Manager (AEM)</span> that your developers and content creators will love.</span></span></span></span></span></p><p><br></p><h3>Monolithic vs Headless CMS</h3><p><span style=\"color: rgb(88, 96, 105);\">Adobe Experience Manager (AEM), as a monolithic CMS, and other older installed CMS systems like it, comes with a coupled front end application layer that requires additional development and maintenance. <span style=\"color: rgb(88, 96, 105);\">Cosmic is a Headless CMS meaning that the content API and presentation layer are decoupled which gives your team greater flexibility when it comes to where your content can go.</span></span></p><p><span style=\"color: rgb(88, 96, 105);\">Cosmic provides everything your team of developers and content creators need: powerful and intuitive APIs for developers, and an easy-to-use dashboard for content creators. We&#39;ve removed all complexity and CMS maintenance, so your team can focus on building great products faster, together.</span></p><p><br></p><h3>But can&#39;t Adobe Experience Manager (AEM) go Headless?</h3><p><span style=\"color: rgb(88, 96, 105);\">Although you CAN use <span style=\"color: rgb(88, 96, 105);\">Adobe Experience Manager (AEM)</span> as a Headless CMS, you still have a lot of work to do to bring it up to the level of an optimized CMS system that&#39;s truly headless. And along with<span style=\"color: rgb(88, 96, 105);\">&nbsp;your application,</span> you will need to maintain the CMS itself, adding more development costs and <span style=\"color: rgb(88, 96, 105);\">taking away focus from</span> what really matter<span style=\"color: rgb(88, 96, 105);\">s: creating great content and user experiences in your main website or app.</span></span></p><p><br></p><h3>Do they recommend going Headless?</h3><p><span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\">Not really and encourage against it (surprise). From&nbsp;</span></span><a href=\"https://www.adobe.com/experience-cloud/topics/headless-cms.html\" rel=\"noopener noreferrer\" target=\"_blank\">their website</a><span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\">:</span></span></p><blockquote><p><span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\">&quot;Experience Manager is a hybrid CMS, giving you the flexibility to be used as a decoupled CMS or headless-only CMS. However, Experience Manager is best used with a hybrid approach that supports channel-centric content management and provides headless CMS functionality at the same time.&quot;</span></span></p></blockquote><p><span style=\"color: rgb(88, 96, 105);\">And (falsely) claim that going Headless is a challenge for Enterprise:</span></p><blockquote><p><span style=\"color: rgb(88, 96, 105);\">Speed of execution is the primary drawback. And you can experience issues with asset management, access control and security, workflow management for authoring and publishing, version control, translations, personalization, and more.</span></p></blockquote>","metafields":[{"children":null,"type":"file","title":"Logo","key":"logo","id":"X4WJiFEkYM","value":"9f138fe0-b7e3-11ea-bc3d-59980ac072b1-adobe-experience-manager.png","url":"https://cdn.cosmicjs.com/9f138fe0-b7e3-11ea-bc3d-59980ac072b1-adobe-experience-manager.png","imgix_url":"https://imgix.cosmicjs.com/9f138fe0-b7e3-11ea-bc3d-59980ac072b1-adobe-experience-manager.png"},{"children":null,"type":"textarea","title":"Tech","key":"tech","id":"ybF4wyIh2b","value":"Java, Apache. Database options: MongoDB, Oracle Database, Microsoft SQL Server."},{"children":null,"type":"textarea","title":"Scalability","key":"scalability","id":"MUU1rX5j4E","value":"Does not scale easily. Limited by servers."},{"children":null,"type":"textarea","title":"Security","key":"security","id":"Qd8Bs5Nk1s","value":"You maintain the security yourself."},{"children":null,"type":"textarea","title":"Maintenance","key":"maintenance","id":"I3uDH1hJpD","value":"They deploy, host, and maintain everything for you. Along with your application and content, you need to maintain updates and security for your CMS system."},{"children":null,"type":"textarea","title":"Caching","key":"caching","id":"DjhuHYksnk","value":"No caching included out of the box."},{"children":null,"type":"textarea","title":"Media CDN","key":"media_cdn","id":"81XhI5pdf6","value":"No CDN included out of the box."},{"children":null,"type":"textarea","title":"Image Processing","key":"image_processing","id":"gq576RdZoZ","value":"Manually manage your own image sizes and optimizations."},{"children":null,"type":"textarea","title":"Extendability","key":"extendability","id":"aEg60UwQAE","value":"Possible. Limited. Complicated."},{"children":null,"type":"textarea","title":"Front end","key":"front_end","id":"7MRfSgwkLF","value":"Front end is coupled with backend CMS. Can be made to be Headless."},{"children":null,"type":"textarea","title":"Number of Projects","key":"number_of_projects","id":"ysoDrwp5Se","value":"One login, one website."},{"children":null,"type":"html-textarea","title":"Costs","key":"costs","id":"RAUsuwBToz","value":"<p>You will need to hire developer resources as this system is WAY complicated and outdated. Average salary of a full-stack developer is <a href=\"https://neuvoo.com/salary/?job=Full+Stack+Developer\" target=\"_blank\">$111,600 per year</a>. You may need to hire 1-3 developers to maintain the CMS. Plus the cost of licensing Adobe Experience Manager (AEM) can be astronomical.</p>"},{"children":null,"type":"text","title":"Vendor Name","key":"vendor_name","id":"VrbOFFDLXI","value":"Adobe Experience Manager (AEM)"},{"children":null,"type":"switch","title":"Include in link list","key":"include_in_link_list","id":"rD9dDRk1rI","value":true,"options":"yes,no"},{"children":null,"type":"text","title":"Cost Value","key":"cost_value","id":"7XCqKArD1n","value":"$523,200+"},{"children":null,"type":"text","title":"Cost Text","key":"cost_text","id":"xHDDQiakJo","value":"per year"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"cms-competitors","created":"2020-06-26T19:39:02.878Z","created_at":"2020-06-26T19:39:02.878Z","modified_at":"2020-06-28T20:52:59.047Z","status":"published","locale":null,"modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-28T20:52:59.047Z","unpublish_at":null,"order":6,"metadata":{"logo":{"url":"https://cdn.cosmicjs.com/9f138fe0-b7e3-11ea-bc3d-59980ac072b1-adobe-experience-manager.png","imgix_url":"https://imgix.cosmicjs.com/9f138fe0-b7e3-11ea-bc3d-59980ac072b1-adobe-experience-manager.png"},"tech":"Java, Apache. Database options: MongoDB, Oracle Database, Microsoft SQL Server.","scalability":"Does not scale easily. Limited by servers.","security":"You maintain the security yourself.","maintenance":"They deploy, host, and maintain everything for you. Along with your application and content, you need to maintain updates and security for your CMS system.","caching":"No caching included out of the box.","media_cdn":"No CDN included out of the box.","image_processing":"Manually manage your own image sizes and optimizations.","extendability":"Possible. Limited. Complicated.","front_end":"Front end is coupled with backend CMS. Can be made to be Headless.","number_of_projects":"One login, one website.","costs":"<p>You will need to hire developer resources as this system is WAY complicated and outdated. Average salary of a full-stack developer is <a href=\"https://neuvoo.com/salary/?job=Full+Stack+Developer\" target=\"_blank\">$111,600 per year</a>. You may need to hire 1-3 developers to maintain the CMS. Plus the cost of licensing Adobe Experience Manager (AEM) can be astronomical.</p>","vendor_name":"Adobe Experience Manager (AEM)","include_in_link_list":true,"cost_value":"$523,200+","cost_text":"per year"}},{"_id":"63d81a9ec17b1f000808178d","order":6,"slug":"new-dashboard-private-beta-and-api-v3-release","title":"New dashboard private beta and API v3 release","content":"<p>We are excited to announce the release of the new dashboard in <a href=\"https://beta.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">private beta</a> along with the API v3. This release has been a long time in the making and we are looking forward to helping you upgrade to the new dashboard and API for production use.&nbsp;</p><p>Below is a list of changes that you should be aware of. Sign up for the <a href=\"https://beta.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">new dashboard</a> to get all of the latest features noted below.</p><p><br></p><p><strong>Summary</strong></p><ul><li>🎉 The new dashboard, API, and NPM module are ready for private beta customer upgrade.</li><li>⚠️ Potential breaking change: Object models are now strongly typed and strictly connected to the Object type model.</li><li>⚠️&nbsp;Potential breaking change: Parent Metafields cannot contain other Parent Metafields. Repeaters cannot contain Parent Metafields.</li><li>⚠️&nbsp;Potential breaking change: depth now required for all API requests past the first level.</li><li>✨&nbsp;Feature improvement: API metadata write improvements.</li><li>✨&nbsp;Feature improvement: Media validation by type and size.</li><li>✨ New Feature: Object type folders.</li></ul><p><br></p><p><strong>What&rsquo;s new?</strong></p><ol><li>New Cosmic dashboard now ready for customer upgrades</li><li>New Cosmic API version (v3)</li><li>New Cosmic NPM module (@next v5.0.0)</li></ol><p>We&rsquo;ve rebuilt the dashboard and the API from the ground up. Importing from dashboard v1 to v2 should be smooth as long as your modeling is compatible. Please note the breaking changes which may require updates to your content modeling to upgrade\r\nto the new versions.</p><p><br></p><p><strong>Compatibility checking</strong><br>In the old dashboard, &nbsp;go to &nbsp;<em>Bucket Settings &gt; Import / Export</em> and find the area titled &ldquo;Dashboard v2 compatibility&rdquo; to note any compatibility issues that may occur with the migration. These can be fixed in the old dashboard, or in the new dashboard.</p><p><br></p><p>🔒 <strong>Object Type modeling locked - Potentially breaking</strong></p><p>In the old dashboard, Objects could individually have a different content model than the Object type model. This has proven to be an undesired behavior, especially since we rolled out Singleton Object types which better satisfies the use case for unique\r\nObject models.</p><p>In the new dashboard, Objects are now strongly typed and strictly connected to the Object type model. This includes when making any changes to keys, adding Metafields, deleting Metafields or updating the order of Metafields.</p><p><br></p><p>✅ <strong>Metafield modeling restrictions - Potentially &nbsp;breaking</strong></p><p>** Parents are now only allowed at the first level **</p><p>We have made updates to allowable Metafield modeling which may break some modeling:</p><ol><li>Parent Metafields are now only allowed at the first level. Parent Metafields cannot contain any other Parent Metafields.</li><li>Repeater Metafields cannot contain Parent Metafields.</li></ol><p><br></p><p>📁 <strong>Object type folders - New feature</strong></p><p>Object type folders are now available to help you better organize your Object types. This should be a welcome feature for those of you who are using Cosmic to store and manage a lot of different Object types.</p><p><br></p><p>📍<strong>API updates - Improvements</strong></p><ol><li><p><strong>Depth update</strong><br>In the API v3, if you are using the the high-level <code>metadata</code> set in <code>props</code>, you will now need to include the <code>depth</code> parameter to retrieve nested Object data. For example, if you have Blog Posts that have an Object Metafield in the model connected to Authors, to retrieve the Author Object along with Blog Posts, you will need to set the <code>depth</code> parameter to 1.</p><p><code>depth:0</code> returns the Object id (string)</p><pre class=\"  language-json\"><code class=\"  language-json\"><span class=\"token punctuation\">{</span>  </code>\r\n<code class=\"  language-json\">  <span class=\"token property\">&quot;title&quot;</span><span class=\"token operator\">:</span> <span class=\"token string\">&quot;My Blog Post&quot;</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-json\">  <span class=\"token property\">&quot;slug&quot;</span><span class=\"token operator\">:</span> <span class=\"token string\">&quot;my-blog-post&quot;</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-json\">  <span class=\"token property\">&quot;metadata&quot;</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-json\">    <span class=\"token property\">&quot;author&quot;</span><span class=\"token operator\">:</span> <span class=\"token string\">&quot;asdfasdf12341234&quot;</span></code>\r\n<code class=\"  language-json\">  <span class=\"token punctuation\">}</span></code>\r\n<code class=\"  language-json\"><span class=\"token punctuation\">}</span></code></pre><p><code>depth:1</code> returns the nested Object data (object)</p><pre class=\"  language-json\"><code class=\"  language-json\"><span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-json\">  <span class=\"token property\">&quot;title&quot;</span><span class=\"token operator\">:</span> <span class=\"token string\">&quot;My Blog Post&quot;</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-json\">  <span class=\"token property\">&quot;slug&quot;</span><span class=\"token operator\">:</span> <span class=\"token string\">&quot;my-blog-post&quot;</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-json\">  <span class=\"token property\">&quot;metadata&quot;</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-json\">    <span class=\"token property\">&quot;author&quot;</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-json\">      <span class=\"token property\">&quot;id&quot;</span><span class=\"token operator\">:</span> <span class=\"token string\">&quot;asdfasdf12341234&quot;</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-json\">      <span class=\"token property\">&quot;title&quot;</span><span class=\"token operator\">:</span> <span class=\"token string\">&quot;John Doe&quot;</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-json\">      <span class=\"token property\">&quot;slug&quot;</span><span class=\"token operator\">:</span> <span class=\"token string\">&quot;john-doe&quot;</span></code>\r\n<code class=\"  language-json\">      ...</code>\r\n<code class=\"  language-json\">    <span class=\"token punctuation\">}</span></code>\r\n<code class=\"  language-json\">  <span class=\"token punctuation\">}</span></code>\r\n<code class=\"  language-json\"><span class=\"token punctuation\">}</span></code></pre><p>The default <code>depth</code> value is <code>0</code>. This is only applicable if you have <code>metadata</code> included in <code>props</code> without any further name-spaced declarations. Circular references are prohibited.</p></li><li><p><strong>API Metafield updates</strong></p><p>Objects no longer return <code>metafields</code> from the API, only <code>metadata</code>. You can still get <code>metafields</code> from the Object type from the API.</p><p>Metafield values are now strongly typed, so any Metafields that do not have values set will return as <code>null</code>. For example, if you don&rsquo;t set a value on a Number Metafield, it will now return <code>null</code> instead of empty string.</p></li></ol><p><br></p><p>🪄 <strong>Dashboard - Adding / editing Objects - Improvement</strong></p><p>Adding and editing Object Metadata via the API got a lot better.</p><p><strong>Before</strong> 😫<br>Before, adding Metadata was cumbersome requiring you to explicitly state all Metafield properties and values when making your edit Object API request.<br><img src=\"https://imgix.cosmicjs.com/52a5d0e0-a18e-11ed-9ec3-310349945617-code-example-2.png?w=1600&auto=format\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><strong>Now 🥳</strong><br>Now you only need to include the metadata values. Much simpler and concise.</p><p><img src=\"https://imgix.cosmicjs.com/7ee18410-a18e-11ed-9ec3-310349945617-code-example-5.png?w=1600&auto=format\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>🖼️ <strong>Dashboard - Media Metafield validation - Improvement</strong></p><p>We have added new Media Metafield validations to enable you to restrict Media Metafields to images, audio, video, and document file types. Along with granular file type restrictions, you can also include a maximum file size to help guide your content\r\ncreators to optimize your content creation and Bucket file storage.</p><p>Media previews are also much improved, giving you the ability to preview video, audio, and PDF files.</p><p><img src=\"https://imgix.cosmicjs.com/a36e8c80-a0fb-11ed-8ca1-01171933e447-surfing.png?w=1600&auto=format\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><strong>🆘 Migration Troubleshooting</strong></p><p>There may be issues when you attempt to import from the old dashboard into the new dashboard. Some common issues may be:</p><ol><li>Object and Object type Metafields model issues<ul><li>To make sure that your Bucket is compatible with the new dashboard, in the old dashboard go to <em>Bucket Settings &gt; Import / Export</em> and find the area on this page that says &ldquo;Dashboard v2 compatibility&rdquo; and test your Bucket compatibility. If any issues are reported, they can be fixed in the old dashboard, or in the new dashboard after import.</li><li>Object Metafield models are now strongly typed and strictly tied to their Object type. This should come as a welcome change, but could be an issue if, in the old dashboard, you had single Objects that were composed of a different Metafield model than\r\nthe Object type. To fix this, make sure that your Object type model is accurate for all Objects, and if you do have Objects that need a unique Metafield model, create a Singleton Object type to store this single Object instead.</li></ul></li><li>If importing a Bucket into the new dashboard that previously contained modeling that is not supported, it will be ignored. IE: if you have a Parent inside of a Parent Metafield or any other unsupported Metafield model.</li></ol><p><br></p><p>🏗️ <strong>Product architecture and pricing updates</strong></p><p>The product architecture has been updated to two main usage levels:</p><ol><li>Projects<ul><li>Projects contain Buckets. You can have multiple Buckets in a Project plan.</li><li>Add ons are available at the Project level and shared on all Buckets in the Project.</li><li>Team members are added and managed in the Project. Granular roles and permissions are available.</li><li>Usage reports are available in the Project. Filter by Bucket usage.</li><li>Billing is handled at the Project level. See <em>Project &gt; Billing &gt; Plan</em> for new pricing details.</li></ul></li><li>Workspaces<ul><li>Workspaces contain Projects. You can have multiple Projects and Buckets in a Workspace plan.</li><li>Add ons are available at the Workspace level and shared on all Projects and Buckets in the Workspace.</li><li>Team members are added and managed in the Workspace. Granular roles and permissions are available.</li><li>Usage reports are available in the Workspace. Filter by Project and Bucket usage.</li><li>Billing is handled at the Workspace level. See <em>Workspace &gt; Billing &gt; Plan</em> for new pricing details.</li></ul></li></ol><p><br></p><p>➡️ <strong>Features TBD</strong></p><p>There are a few features that we are still working on, but are planning on including them in a future release:</p><ol><li>Merge Requests<ul><li>Offers git-like workflows for your content. Including visual change review and team member approvals.</li></ul></li><li>Single Sign On<ul><li>Offering teams a way to login using a 3rd party IdP</li></ul></li><li>Workspace subdomain<ul><li>Offering teams their own workspace subdomain.</li></ul></li><li>Mobile dashboard access<ul><li>The new dashboard is currently desktop only.</li></ul></li><li>CLI connected to API v3</li></ol><p><br></p><p>This is a big release for us and we hope you enjoy all of the updates. <a href=\"https://beta.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Sign up for the new dashboard</a> to reserve your spot in line. Follow us <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">on Twitter</a> and join <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">our Slack community</a> to stay up with the latest updates.</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"sKNJERlB9V","value":"2023-01-31"},{"children":null,"type":"object","title":"Author","key":"author","id":"4x2DuJhBHj","value":"5ffa1d1e0046b0000799cb7b","object_type":"authors","object":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"nIdg8gne2L","value":"f6579c30-a0cd-11ed-93ee-cb9a2cd68754-private-beta-og.png","url":"https://cdn.cosmicjs.com/f6579c30-a0cd-11ed-93ee-cb9a2cd68754-private-beta-og.png","imgix_url":"https://imgix.cosmicjs.com/f6579c30-a0cd-11ed-93ee-cb9a2cd68754-private-beta-og.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2023-01-30T19:29:33.876Z","created_by":"5357ef811693be2118000001","modified_at":"2023-02-26T21:22:53.572Z","created":"2023-01-30T19:29:33.876Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/f6579c30-a0cd-11ed-93ee-cb9a2cd68754-private-beta-og.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2023-02-26T21:22:53.572Z","metadata":{"published_date":"2023-01-31","author":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}}},"featured_image":{"url":"https://cdn.cosmicjs.com/f6579c30-a0cd-11ed-93ee-cb9a2cd68754-private-beta-og.png","imgix_url":"https://imgix.cosmicjs.com/f6579c30-a0cd-11ed-93ee-cb9a2cd68754-private-beta-og.png"}}},{"_id":"631fbb3d4f10370009c9a309","order":6,"slug":"new-dashboard-updates-metafields-localization-and-more","title":"New dashboard updates: Metafields, localization, and more","content":"<p>We&#39;re excited to share new dashboard updates and fixes with you. Read below and <a href=\"https://app-v2.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">sign up to get on the waitlist</a> to preview the new dashboard.</p><h3><br>🎨 <strong>Color and emoji Metafields</strong></h3><p>Say hello to a couple of new Metafields, color and emoji.</p><p><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/1f901ce0-3372-11ed-8a37-f1952c73e588-color-emoji.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><p><strong>Color Metafield</strong><br>The color Metafield has been one of our most-requested additions and it&#39;s now available! Select a color using a color picker, or simply add any valid HEX value.</p><p><strong>Emoji Metafield</strong><br>Why not? Select from numerous emojis to create even more expressive content <span class=\"fr-emoticon fr-deletable\">😉</span>&nbsp;</p><p><br></p><h3>🌎 <strong>Improved localization</strong></h3><p>We&#39;ve made some nice quality of life updates to our localization feature. We think you&#39;ll agree that the experience of localizing content in the new dashboard is simple and intuitive.</p><p><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/21085310-3374-11ed-8a37-f1952c73e588-improved-localization.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><p><br></p><h3><strong>📜 Fixed HTML editor toolbar scrolling</strong></h3><p>The fixed HTML editor scrolling toolbar makes it easy to update your content with the available tools wherever you are on the page.</p><p><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/563cbfa0-3377-11ed-8a37-f1952c73e588-fixed-editor-toolbar.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><p><br></p><h3>🐛<strong>&nbsp;Content model editing fix</strong></h3><p>We fixed an issue where the model was not being updated when you navigate from editing a Content Type to the Object page. It&#39;s fixed now!</p><p><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/31848490-3372-11ed-8a37-f1952c73e588-model-update.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><p><a data-ved=\"2ahUKEwj73tjz4Iz4AhUsoY4IHRjCDPkQFnoECAMQAQ\" href=\"https://emojipedia.org/laptop/\" ping=\"/url?sa=t&source=web&rct=j&url=https://emojipedia.org/laptop/&ved=2ahUKEwj73tjz4Iz4AhUsoY4IHRjCDPkQFnoECAMQAQ\"></a></p><h3><br></h3><h3>🖥️ <strong>Try it out</strong></h3><p>We are on a mission to build the best content management solution in the world. There&#39;s more work to do, so if you haven&#39;t joined, please <a href=\"https://app-v2.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">sign up to get on the waitlist</a> to try it out during this alpha development phase, and help us by providing your feedback.</p><p>We&#39;re excited to be closing in on the beta release, the majority of the work ahead is mainly preparing for migration. We will be to sure to let you know soon what steps will be needed (if any) to prepare your projects for the new dashboard.</p><p>Follow us <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">on Twitter</a>, subscribe <a href=\"https://www.youtube.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">on YouTube</a>, and join our team <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">on Slack</a> to stay in touch with the latest Cosmic news and feature updates.<br><br>Sincerely,<br>Cosmic Team</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"4PVN74VYyw","value":"5ffa1d1e0046b0000799cb7b","required":true,"object_type":"authors","object":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"0gLuTf03lo","value":"<p>We&#39;ve released some new features for the new dashboard that we are excited to share with you.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"pq9VCU72en","value":"a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png","url":"https://cdn.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png","imgix_url":"https://imgix.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"IvKlvbxvRZ","value":"We've released some new features for the new dashboard that we are excited to share with you."},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"b3NrFBXrhQ","value":"2022-09-13"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2022-09-12T23:05:33.197Z","created_by":"5357ef811693be2118000001","modified_at":"2022-09-13T17:23:27.384Z","created":"2022-09-12T23:05:33.197Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2022-09-13T17:23:27.384Z","metadata":{"author":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}}},"teaser":"<p>We&#39;ve released some new features for the new dashboard that we are excited to share with you.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png","imgix_url":"https://imgix.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png"},"seo_meta_description":"We've released some new features for the new dashboard that we are excited to share with you.","published_date":"2022-09-13"}},{"_id":"581a5d0ae107c5410e002931","order":6,"slug":"service-level-agreement","title":"Service Level Agreement","content":"<h2 style=\"box-sizing: inherit; font-family: \" open=\"\" sans\",=\"\" sans-serif;=\"\" color:=\"\" rgb(0,=\"\" 0,=\"\" 0);=\"\" margin-top:=\"\" 0px;=\"\" margin-bottom:=\"\" 0.5em;\"=\"\">Service Level Agreement and Uptime Guarantee</h2><p style=\"box-sizing: inherit; line-height: 1.2; margin-top: 0px; margin-bottom: 0.5em;\">Version 1.0 - May 2016</p><p style=\"box-sizing: inherit; margin-bottom: 1.75em;\">This Cosmic JS Service Level Agreement (<span style=\"box-sizing: inherit;\">“SLA”</span>) between Cosmic JS, Inc. (<span style=\"box-sizing: inherit;\">“Cosmic JS”</span>,&nbsp;<span style=\"box-sizing: inherit;\">“us”</span>&nbsp;or&nbsp;<span style=\"box-sizing: inherit;\">“we”</span>) and users of the Cosmic JS Services (<span style=\"box-sizing: inherit;\">“you”</span>) governs the use of the Cosmic JS API and Web Hosting Services under the provisions of the&nbsp;<a href=\"https://www.cosmicjs.com/terms\" style=\"box-sizing: inherit; cursor: pointer; transition-duration: 0.2s; transition-timing-function: ease-in-out; transition-property: color;\">Cosmic JS Terms of Service</a>&nbsp;(the&nbsp;<span style=\"box-sizing: inherit;\">“Terms”</span>).</p><p style=\"box-sizing: inherit; margin-bottom: 1.75em;\">Unless otherwise provided herein, this SLA is subject to the provisions of the Terms. Capitalized words and phrases have the meaning specified in the Terms. We reserve the right to change the terms of this SLA in accordance with the Terms.</p><h3 style=\"box-sizing: inherit; line-height: 1.2; margin: 0px 0px 30px;\">1. Service Commitment: 99.95% Uptime</h3><p style=\"box-sizing: inherit; margin-bottom: 1.75em;\">Cosmic JS will use commercially reasonable efforts to make the Cosmic JS API and Web Hosting Services available with a Monthly Uptime Percentage of at least 99.95% during any monthly billing cycle (the&nbsp;<span style=\"box-sizing: inherit;\">“Service Commitment”</span>). Subject to the Cosmic JS SLA Exclusions, if we do not meet the Service Commitment, you will be eligible to receive a Service Credit.</p><p style=\"box-sizing: inherit; margin-bottom: 1.75em;\">A Monthly Uptime Percentage of 99.95% means that we guarantee you will experience no more than 21.56 min/month of Unavailability.</p><h3 style=\"box-sizing: inherit; line-height: 1.2; margin: 0px 0px 30px;\">2. Definitions</h3><p style=\"box-sizing: inherit; margin-bottom: 1.75em;\"><span style=\"box-sizing: inherit;\">“Cosmic JS API and Web Hosting Services”</span>&nbsp;mean your data, files and hosted apps and running on Cosmic JS.</p><p style=\"box-sizing: inherit; margin-bottom: 1.75em;\"><span style=\"box-sizing: inherit;\">“Maintenance”</span>&nbsp;means scheduled Unavailability of the API and Web Hosting Services, as announced by us prior to the API and Web Hosting Services becoming Unavailable.</p><p style=\"box-sizing: inherit; margin-bottom: 1.75em;\"><span style=\"box-sizing: inherit;\">“Monthly Uptime Percentage”</span>&nbsp;is calculated by subtracting from 100% the percentage of minutes during the month in which the Cosmic JS API and Web Hosting Services were Unavailable. Monthly Uptime Percentage measurements exclude downtime resulting directly or indirectly from any Cosmic JS SLA Exclusion.</p><p style=\"box-sizing: inherit; margin-bottom: 1.75em;\"><span style=\"box-sizing: inherit;\">“Service Credit”</span>&nbsp;means a credit denominated in US dollars, calculated as set forth below, that we may credit back to an eligible account.</p><p style=\"box-sizing: inherit; margin-bottom: 1.75em;\"><span style=\"box-sizing: inherit;\">“Unavailable”</span>&nbsp;and&nbsp;<span style=\"box-sizing: inherit;\">“Unavailability”</span>&nbsp;mean:<br style=\"box-sizing: inherit;\">- For apps, when all of your apps have no external connectivity - For the API, when the Cosmic JS API has no connectivity, as confirmed by our monitoring.</p><h3 style=\"box-sizing: inherit; line-height: 1.2; margin: 0px 0px 30px;\">3. Service Commitments and Service Credits</h3><p style=\"box-sizing: inherit; margin-bottom: 1.75em;\">Service Credits are calculated as a percentage of the total charges paid by you (excluding one-time payments, e.g. for training, etc.) for the monthly billing cycle in which the Unavailability occurred in accordance with the schedule below:</p><ul style=\"box-sizing: inherit; margin-right: 0px; margin-bottom: 2em; margin-left: 0px; padding: 0px 0px 0px 2.5em;\"><li style=\"box-sizing: inherit; margin-bottom: 1em;\">For Monthly Uptime Percentage less than 99.95% but equal to or greater than 99.0%, you will be eligible for a 10% Service Credit.</li><li style=\"box-sizing: inherit; margin-bottom: 0px;\">For Monthly Uptime Percentage less than 99.0%, you will be eligible for a 30% Service Credit.</li></ul><p style=\"box-sizing: inherit; margin-bottom: 1.75em;\">We will apply any Service Credits only against future payments for the Services otherwise due from you. At our discretion, we may issue the Service Credit to the credit card you used to pay for the billing cycle in which the Unavailability occurred. Service Credits will not entitle you to any refund or other payment from Cosmic JS. A Service Credit will be applicable and issued only if the credit amount for the applicable monthly billing cycle is greater than one dollar ($1 USD). Service Credits may not be transferred or applied to any other account.</p><h3 style=\"box-sizing: inherit; line-height: 1.2; margin: 0px 0px 30px;\">4. Sole Remedy</h3><p style=\"box-sizing: inherit; margin-bottom: 1.75em;\">Unless otherwise provided in the Terms, your sole and exclusive remedy for any unavailability, non-performance, or other failure by us to provide the Cosmic JS API and Web Hosting Services is the receipt of a Service Credit (if eligible) in accordance with the terms of this SLA.</p><h3 style=\"box-sizing: inherit; line-height: 1.2; margin: 0px 0px 30px;\">5. Credit Request and Payment Procedures</h3><p style=\"box-sizing: inherit; margin-bottom: 1.75em;\">To receive a Service Credit, you must submit a claim by emailing support@cosmicjs.com. To be eligible, the credit request must be received by us by the end of the second billing cycle after which the incident occurred and must include:</p><ul style=\"box-sizing: inherit; margin-right: 0px; margin-bottom: 2em; margin-left: 0px; padding: 0px 0px 0px 2.5em;\"><li style=\"box-sizing: inherit; margin-bottom: 1em;\">the words “SLA Credit Request” in the subject line;</li><li style=\"box-sizing: inherit; margin-bottom: 1em;\">the dates and times of each Unavailability incident that you are claiming;</li><li style=\"box-sizing: inherit; margin-bottom: 1em;\">the account handle(s); and</li><li style=\"box-sizing: inherit; margin-bottom: 0px;\">logs that document the errors and corroborate your claimed outage (any confidential or sensitive information in these logs should be removed or replaced with asterisks).</li></ul><p style=\"box-sizing: inherit; margin-bottom: 1.75em;\">If the Monthly Uptime Percentage of such request is confirmed by us and is less than the Service Commitment, then we will issue the Service Credit to you within one billing cycle following the month in which your request is confirmed by us. Your failure to provide the request and other information as required above will disqualify you from receiving a Service Credit.</p><h3 style=\"box-sizing: inherit; line-height: 1.2; margin: 0px 0px 30px;\">6. Cosmic JS SLA Exclusions</h3><p style=\"box-sizing: inherit; margin-bottom: 1.75em;\">The Service Commitment does not apply to any unavailability, suspension or termination of the Cosmic JS API and Web Hosting Services, or any other Cosmic JS API and Web Hosting Service performance issues:<br style=\"box-sizing: inherit;\">1. That result from a suspension or Remedial Action, as described in the Terms; <br>2. Caused by factors outside of our reasonable control, including any force majeure event, Internet access, or problems beyond the demarcation point of the Cosmic JS network;<br style=\"box-sizing: inherit;\">3. That result from any actions or inactions of you or any third party;<br style=\"box-sizing: inherit;\">4. That result from the equipment, software or other technology of you or any third party (other than third party equipment within our direct control);<br style=\"box-sizing: inherit;\">5. That result from failures of Cosmic JS API and Web Hosting Services not attributable to Unavailability; or<br style=\"box-sizing: inherit;\">6. That result from any Maintenance.</p><p style=\"box-sizing: inherit; margin-bottom: 1.75em;\">If availability is impacted by factors other than those used in our Monthly Uptime Percentage calculation, then we may issue a Service Credit considering such factors at our discretion.</p>","metafields":[],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"pages","created_at":"2016-11-02T21:39:22.890Z","created_by":"5357ef811693be2118000001","created":"2016-11-02T21:39:22.890Z","status":"published","modified_at":"2016-11-02T22:13:56.265Z","modified_by":"5357ef811693be2118000001","metadata":null},{"_id":"5b4753096d4f364510bf1290","order":6,"slug":"hypometer-technologies-fantasy-insider-and-stats-insider","title":"Hypometer Technologies: Fantasy Insider and Stats Insider","content":"<p><a href=\"http://www.thehypometer.com\" rel=\"noopener noreferrer\" target=\"_blank\">Hypometer Technologies</a> is revolutionizing the Australian sporting experience by making predictive analytics accessible to the masses. Their next generation sports media platforms are the form guide for every big game, and the go-to sites for trusted predictive analytics.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>Historically the team managed content via WordPress, but as they scaled their content WordPress started to bottleneck them. They pivoted to working with the WordPress API, which resulted in slow load times as WordPress would call all assets and return unnecessary data in the API call.&nbsp;</p><p>Recently the tech team was searching for a solution to manage dynamic content for their blogs, <a href=\"https://www.fantasyinsider.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">Fantasy Insider</a> and <a href=\"https://www.statsinsider.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">Stats Insider</a>. They wanted to remain decoupled from their application&#39;s codebase when managing content, so they started researching headless CMS systems. They chose Cosmic due to the simplicity of API integration and the content editing tools that would empower their marketers and writers.&nbsp;</p><p>In addition, Cosmic allowed the Hypometer team to write scripts to migrate existing WordPress post content over to Cosmic for editing and publishing.&nbsp;</p><p><br></p><h3>Fantasy Insider</h3><p><strong>Built On:</strong> Python | Angular | Cosmic</p><p><a href=\"https://www.fantasyinsider.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">Fantasy Insider</a> is the market leader for daily fantasy sports information in Australia, with over half of the active market visiting the site for content or predictive tools each week.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/3403b360-8c20-11e8-897c-ffeb4b6a74c8-cruncher_tool_heromockup.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><h3><br></h3><h3><br></h3><h3>Stats Insider</h3><p><strong>Built On:</strong> Python | Angular | Cosmic</p><p>Launched in early 2018, <a href=\"https://www.statsinsider.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">Stats Insider</a> is Australia&#39;s first advanced sports analytics and predictive data platform for sports fans, punters and fantasy sports players.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/47f104e0-8c20-11e8-99fd-2526f825b178-si_fb_coverphoto_ornge_nrl-soccer.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>Stats Insider will be providing information and predictions for US sports from August. Stay up to date with them on <a href=\"http://twitter.com/statsinsider\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>. &nbsp;<a href=\"http://twitter.com/statsinsider\"></a></p><p><br></p><blockquote><p>&quot;The headless CMS we chose had to tick a lot of boxes. At the end of the day, though, it needed to be easy for our external writers to use. We recorded a quick screencast video internally showing how to set up a piece of content, sent that out to our team, and I haven&rsquo;t had a question from any of our writers since. We&rsquo;ve just started to use Cosmic for other things like an activity status bar on Stats Insider which frees up more time for our developers and makes our workflow more flexible.&rdquo;</p><p><cite>&mdash; Katie Prowd, Co-Founder of Fantasy Insider</cite></p></blockquote>","metafields":[{"value":"Hypometer Technologies","key":"company","title":"Company","type":"text","children":null},{"value":"Fantasy Sports","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Hypometer Technologies is revolutionizing the Australian sporting experience by making predictive analytics accessible to the masses. Their next generation sports media platforms are the form guide for every big game, and the go-to sites for trusted predictive analytics.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png","imgix_url":"https://imgix.cosmicjs.com/1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-12T13:09:29.236Z","created_by":"5716b504e9c686d006000073","created":"2018-07-12T13:09:29.236Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-07-20T13:31:54.633Z","metadata":{"company":"Hypometer Technologies","industry_type":"Fantasy Sports","teaser":"Hypometer Technologies is revolutionizing the Australian sporting experience by making predictive analytics accessible to the masses. Their next generation sports media platforms are the form guide for every big game, and the go-to sites for trusted predictive analytics.\n","logo":{"url":"https://cdn.cosmicjs.com/1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png","imgix_url":"https://imgix.cosmicjs.com/1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png"}}},{"_id":"5d235c7c72d8f04604eb204b","slug":"headless-cms-for-emerging-tech","title":"Headless CMS for Emerging Tech","content":"<p>Teams using the Cosmic Headless CMS are able to model and create content for delivery to all of their websites and apps, including emerging tech like VR and AR, wearables, and more. Manage video, <a href=\"https://www.cosmicjs.com/headless-cms/rich-text-multimedia\">rich text</a> and notifications from the comfort of your Cosmic Bucket Dashboard for a variety of devices. Content is available for reuse once published in the Cosmic Headless CMS, saving teams time and money.<br><br>Features like <a href=\"https://www.cosmicjs.com/headless-cms/webhooks\">Webhooks</a>, <a href=\"https://www.cosmicjs.com/headless-cms/scheduled-publishing\">Scheduled Publishing</a> and the Cosmic suite of <a href=\"https://www.cosmicjs.com/headless-cms/rest-graphql-apis\">APIs</a> make integrating with any internet-connected application easy and seamless.</p>","metafields":[{"children":null,"type":"text","title":"Solution Name","key":"solution_name","id":"4PY7Ii24rW","value":"Emerging Tech"},{"children":null,"type":"file","title":"Image","key":"image","id":"5RSs8cH4D1","value":"52263510-9dc3-11e9-a5b4-e5df9f8049d3-f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-109999224655216202658486799915322872806436o.jpg","url":"https://cdn.cosmicjs.com/52263510-9dc3-11e9-a5b4-e5df9f8049d3-f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-109999224655216202658486799915322872806436o.jpg","imgix_url":"https://imgix.cosmicjs.com/52263510-9dc3-11e9-a5b4-e5df9f8049d3-f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-109999224655216202658486799915322872806436o.jpg"},{"children":null,"type":"objects","title":"Case Studies","key":"case_studies","id":"oklU2lXQye","value":"59663607a6a3f55962000e40,5ade6e0e2b218820ec24bff1,5a72248572c6845e0d90b5d5","object_type":"case-studies","objects":[{"_id":"59663607a6a3f55962000e40","slug":"big-fish-launches-marketing-and-tutorial-content-for-games","title":"Big Fish Launches Marketing and Tutorial Content for Games","content":"<p>When <a href=\"http://www.bigfishgames.com\" rel=\"noopener noreferrer\" target=\"_blank\">Big Fish</a> launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch. Big Fish wanted their game studios to have the ability to curate and update content on each of their landing pages. Other CMS systems weren&rsquo;t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b671fa80-ba81-11e7-9419-d7ce2df8354d-Screen Shot 2017-10-26 at 2.12.42 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/bf97f050-ba82-11e7-b96e-3b4c8df8fb98-Screen Shot 2017-10-26 at 2.20.03 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><blockquote><p>&quot;We use Cosmic buckets for each of our mobile game landing pages. While our API and storage usage is low, the number of buckets we need is high, which makes the new Clusters Feature a perfect solution for our company use cases. It allows us to\r\nhave a single consolidated invoice, with an overall API and data-limit, but up to 35 buckets for our use.&quot;</p><p><cite>&mdash; Jessica Chappell, Web Developer&nbsp;</cite></p></blockquote><p>Read <a href=\"http://www.bigfishgames.com/blog\" rel=\"noopener noreferrer\" target=\"_blank\">more</a> about Big Fish and their games.</p>","metafields":[{"value":"Big Fish","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T14:45:27.402Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-11-08T23:15:38.911Z"},{"_id":"5ade6e0e2b218820ec24bff1","slug":"medical-realities-delivers-vr-surgical-content","title":"Medical Realities Delivers VR Surgical Content","content":"<p>The <a href=\"https://www.medicalrealities.com\" rel=\"noopener noreferrer\" target=\"_blank\">Medical Realties</a> Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/5dc112a0-5aa8-11e8-a7f7-e17cbb39f395-ice_screenshot_20180518-092612.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Medical Realities team needed a way for educators (non-technical editors) to manage content that could be served to VR headsets for consumption by trainees, so they chose Cosmic to manage and deliver their content from the cloud through an API.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-10999922_465521620265848_6799915322872806436_o.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily spin up content models that would allow our non-technical editors to manage the most sophisticated medical VR content out there. Our developers were equipped with robust Docs and Example Apps to get them started and were able to use the bleeding-edge frameworks necessary to run Virtual Reality.&quot;</p><p><cite>&mdash; Joe Marritt, Lead Web Developer&nbsp;</cite></p></blockquote>","metafields":[{"value":"Medical Realities","key":"company","title":"Company","type":"text","children":null},{"value":"Healthcare and Virtual Reality ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"The Medical Realties Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","imgix_url":"https://imgix.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-04-23T23:36:46.885Z","created_by":"5716b504e9c686d006000073","created":"2018-04-23T23:36:46.885Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-05-18T17:07:50.800Z"},{"_id":"5a72248572c6845e0d90b5d5","slug":"unleashed-xr-augmented-mixed-and-virtual-realities","title":"Unleashed XR: Augmented, Mixed and Virtual Realities","content":"<p><a href=\"http://www.unleashed-xr.com/\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/913ee1b0-06fd-11e8-a43c-e17c6c324439-ezgif-5-2f720a171b.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></a></p><p><br></p><p>The <a href=\"http://www.unleashed-xr.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Unleashed XR</a> team designs and develops augmented reality, mixed reality and virtual reality solutions for a range of clients across industries. XR (extended reality) is the term referring to the full spectrum from reality to complete virtual environments. Through a structured design thinking process, Unleashed XR designs and develops applications that meet the unique needs of their clients. Unleashed XR is driven by ensuring their services have a tangible positive impact on their clients, making activities, processes and experiences superior, more efficient, cheaper and safer. <br><br>Unleashed XR needed a new blog that allowed developers, editors and contributors to collaborate in the cloud, so they chose Cosmic. They plan on re-vamping the website of their sister business, <a href=\"http://www.unleashed-vr.com/\">Unleashed VR</a>, using Cosmic&#39;s powerful tools in the near future.</p><blockquote><p>&quot;We just launched our new website which utilizes the power of Cosmic. Cosmic was a huge help in the setup of our blog, particularly the Media management, which Cosmic proved invaluable for in respect to optimizing videos and images. Additionally we were able to use Cosmic to stream our videos straight to a Unity Mobile application that we are working on as well. This was great in optimizing the speed of the app, and we&#39;re looking forward to integrating Cosmic in as many ways as possible.&quot;</p><p><cite>&mdash; Tyler Smith, Lead Software Developer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Unleashed XR","key":"company","title":"Company","type":"text","children":null},{"value":"Virtual Reality Software","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"The Unleashed XR team designs and develops augmented reality, mixed reality and virtual reality solutions for a range of clients across industries. Unleashed XR needed a new blog that allowed developers, editors and contributors to collaborate in the cloud, so they chose Cosmic.","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"a9fd29f0-0702-11e8-a43c-e17c6c324439-Logo&Name_PurpleUnleashedXR.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/a9fd29f0-0702-11e8-a43c-e17c6c324439-Logo&Name_PurpleUnleashedXR.png","imgix_url":"https://imgix.cosmicjs.com/a9fd29f0-0702-11e8-a43c-e17c6c324439-Logo&Name_PurpleUnleashedXR.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-01-31T20:18:13.948Z","created_by":"5716b504e9c686d006000073","created":"2018-01-31T20:18:13.948Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null}]},{"children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"vue-rpg-game","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"cosmic-messenger","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"vue-garage-sale","type":"text","required":false}]}],"type":"repeater","title":"App Slugs","key":"app_slugs","id":"w89uw0EXLa","value":"vue-rpg-game","repeater_fields":"\"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\"\""},{"children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"wordpress-importer","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"mux-videos","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"imgix-editor","type":"text","required":false}]}],"type":"repeater","title":"Extension Slugs","key":"extension_slugs","id":"goy5SJqroE","value":"wordpress-importer","repeater_fields":"\"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\"\""},{"children":null,"type":"html-textarea","title":"Testimonial","key":"testimonial","id":"8sEONWPVzB","value":"<p>&quot;Cosmic allowed us to easily spin up content models that would allow our non-technical editors to manage the most sophisticated medical VR content out there. Our developers were equipped with robust Docs and Example Apps to get them started and were able to use the bleeding-edge frameworks necessary to run Virtual Reality.&quot;</p>"},{"children":null,"type":"text","title":"Testimonial Credit","key":"testimonial_credit","id":"L4MNfBlGeH","value":"Joe Marritt, Lead Web Developer at Medical Realities"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created":"2019-07-08T15:08:44.006Z","created_at":"2019-07-08T15:08:44.006Z","modified_at":"2020-08-10T14:05:12.245Z","status":"published","locale":null,"published_at":"2020-05-06T05:32:59.830Z","modified_by":"5357ef811693be2118000001","publish_at":null,"order":6,"unpublish_at":null,"metadata":{"solution_name":"Emerging Tech","image":{"url":"https://cdn.cosmicjs.com/52263510-9dc3-11e9-a5b4-e5df9f8049d3-f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-109999224655216202658486799915322872806436o.jpg","imgix_url":"https://imgix.cosmicjs.com/52263510-9dc3-11e9-a5b4-e5df9f8049d3-f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-109999224655216202658486799915322872806436o.jpg"},"case_studies":[{"_id":"59663607a6a3f55962000e40","slug":"big-fish-launches-marketing-and-tutorial-content-for-games","title":"Big Fish Launches Marketing and Tutorial Content for Games","content":"<p>When <a href=\"http://www.bigfishgames.com\" rel=\"noopener noreferrer\" target=\"_blank\">Big Fish</a> launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch. Big Fish wanted their game studios to have the ability to curate and update content on each of their landing pages. Other CMS systems weren&rsquo;t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b671fa80-ba81-11e7-9419-d7ce2df8354d-Screen Shot 2017-10-26 at 2.12.42 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/bf97f050-ba82-11e7-b96e-3b4c8df8fb98-Screen Shot 2017-10-26 at 2.20.03 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><blockquote><p>&quot;We use Cosmic buckets for each of our mobile game landing pages. While our API and storage usage is low, the number of buckets we need is high, which makes the new Clusters Feature a perfect solution for our company use cases. It allows us to\r\nhave a single consolidated invoice, with an overall API and data-limit, but up to 35 buckets for our use.&quot;</p><p><cite>&mdash; Jessica Chappell, Web Developer&nbsp;</cite></p></blockquote><p>Read <a href=\"http://www.bigfishgames.com/blog\" rel=\"noopener noreferrer\" target=\"_blank\">more</a> about Big Fish and their games.</p>","metafields":[{"value":"Big Fish","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T14:45:27.402Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-11-08T23:15:38.911Z","metadata":{"company":"Big Fish","industry_type":"Gaming","teaser":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","logo":{"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}}},{"_id":"5ade6e0e2b218820ec24bff1","slug":"medical-realities-delivers-vr-surgical-content","title":"Medical Realities Delivers VR Surgical Content","content":"<p>The <a href=\"https://www.medicalrealities.com\" rel=\"noopener noreferrer\" target=\"_blank\">Medical Realties</a> Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/5dc112a0-5aa8-11e8-a7f7-e17cbb39f395-ice_screenshot_20180518-092612.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Medical Realities team needed a way for educators (non-technical editors) to manage content that could be served to VR headsets for consumption by trainees, so they chose Cosmic to manage and deliver their content from the cloud through an API.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-10999922_465521620265848_6799915322872806436_o.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily spin up content models that would allow our non-technical editors to manage the most sophisticated medical VR content out there. Our developers were equipped with robust Docs and Example Apps to get them started and were able to use the bleeding-edge frameworks necessary to run Virtual Reality.&quot;</p><p><cite>&mdash; Joe Marritt, Lead Web Developer&nbsp;</cite></p></blockquote>","metafields":[{"value":"Medical Realities","key":"company","title":"Company","type":"text","children":null},{"value":"Healthcare and Virtual Reality ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"The Medical Realties Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","imgix_url":"https://imgix.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-04-23T23:36:46.885Z","created_by":"5716b504e9c686d006000073","created":"2018-04-23T23:36:46.885Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-05-18T17:07:50.800Z","metadata":{"company":"Medical Realities","industry_type":"Healthcare and Virtual Reality ","teaser":"The Medical Realties Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application. \n","logo":{"url":"https://cdn.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","imgix_url":"https://imgix.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png"}}},{"_id":"5a72248572c6845e0d90b5d5","slug":"unleashed-xr-augmented-mixed-and-virtual-realities","title":"Unleashed XR: Augmented, Mixed and Virtual Realities","content":"<p><a href=\"http://www.unleashed-xr.com/\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/913ee1b0-06fd-11e8-a43c-e17c6c324439-ezgif-5-2f720a171b.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></a></p><p><br></p><p>The <a href=\"http://www.unleashed-xr.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Unleashed XR</a> team designs and develops augmented reality, mixed reality and virtual reality solutions for a range of clients across industries. XR (extended reality) is the term referring to the full spectrum from reality to complete virtual environments. Through a structured design thinking process, Unleashed XR designs and develops applications that meet the unique needs of their clients. Unleashed XR is driven by ensuring their services have a tangible positive impact on their clients, making activities, processes and experiences superior, more efficient, cheaper and safer. <br><br>Unleashed XR needed a new blog that allowed developers, editors and contributors to collaborate in the cloud, so they chose Cosmic. They plan on re-vamping the website of their sister business, <a href=\"http://www.unleashed-vr.com/\">Unleashed VR</a>, using Cosmic&#39;s powerful tools in the near future.</p><blockquote><p>&quot;We just launched our new website which utilizes the power of Cosmic. Cosmic was a huge help in the setup of our blog, particularly the Media management, which Cosmic proved invaluable for in respect to optimizing videos and images. Additionally we were able to use Cosmic to stream our videos straight to a Unity Mobile application that we are working on as well. This was great in optimizing the speed of the app, and we&#39;re looking forward to integrating Cosmic in as many ways as possible.&quot;</p><p><cite>&mdash; Tyler Smith, Lead Software Developer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Unleashed XR","key":"company","title":"Company","type":"text","children":null},{"value":"Virtual Reality Software","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"The Unleashed XR team designs and develops augmented reality, mixed reality and virtual reality solutions for a range of clients across industries. Unleashed XR needed a new blog that allowed developers, editors and contributors to collaborate in the cloud, so they chose Cosmic.","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"a9fd29f0-0702-11e8-a43c-e17c6c324439-Logo&Name_PurpleUnleashedXR.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/a9fd29f0-0702-11e8-a43c-e17c6c324439-Logo&Name_PurpleUnleashedXR.png","imgix_url":"https://imgix.cosmicjs.com/a9fd29f0-0702-11e8-a43c-e17c6c324439-Logo&Name_PurpleUnleashedXR.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-01-31T20:18:13.948Z","created_by":"5716b504e9c686d006000073","created":"2018-01-31T20:18:13.948Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"company":"Unleashed XR","industry_type":"Virtual Reality Software","teaser":"The Unleashed XR team designs and develops augmented reality, mixed reality and virtual reality solutions for a range of clients across industries. Unleashed XR needed a new blog that allowed developers, editors and contributors to collaborate in the cloud, so they chose Cosmic.","logo":{"url":"https://cdn.cosmicjs.com/a9fd29f0-0702-11e8-a43c-e17c6c324439-Logo&Name_PurpleUnleashedXR.png","imgix_url":"https://imgix.cosmicjs.com/a9fd29f0-0702-11e8-a43c-e17c6c324439-Logo&Name_PurpleUnleashedXR.png"}}}],"app_slugs":[{"slug":"vue-rpg-game"},{"slug":"cosmic-messenger"},{"slug":"vue-garage-sale"}],"extension_slugs":[{"slug":"wordpress-importer"},{"slug":"mux-videos"},{"slug":"imgix-editor"}],"testimonial":"<p>&quot;Cosmic allowed us to easily spin up content models that would allow our non-technical editors to manage the most sophisticated medical VR content out there. Our developers were equipped with robust Docs and Example Apps to get them started and were able to use the bleeding-edge frameworks necessary to run Virtual Reality.&quot;</p>","testimonial_credit":"Joe Marritt, Lead Web Developer at Medical Realities"}},{"_id":"59aea3f20ba82c9e770006b1","order":6,"slug":"flynn-buckingham","title":"Flynn Buckingham","content":"","metafields":[{"value":"93257c90-923c-11e7-a292-7fa737c9dc7c-flynn.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/93257c90-923c-11e7-a292-7fa737c9dc7c-flynn.jpeg","imgix_url":"https://imgix.cosmicjs.com/93257c90-923c-11e7-a292-7fa737c9dc7c-flynn.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-09-05T13:17:38.764Z","created_by":"5357ef811693be2118000001","created":"2017-09-05T13:17:38.764Z","status":"published","modified_at":"2020-09-14T17:45:23.837Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/93257c90-923c-11e7-a292-7fa737c9dc7c-flynn.jpeg","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/93257c90-923c-11e7-a292-7fa737c9dc7c-flynn.jpeg","imgix_url":"https://imgix.cosmicjs.com/93257c90-923c-11e7-a292-7fa737c9dc7c-flynn.jpeg"}}},{"_id":"5ea1b8ac6bc68d0007e51bd6","slug":"dustin-brink","title":"Dustin Brink","content":"","metafields":[{"children":null,"type":"textarea","title":"Testimonial","key":"testimonial","id":"su6HFdBUcP","value":"Leveraging the Cosmic GraphQL API allows for easy updates to our news and blog, while keeping payloads small and fast. Integration with Cosmic could not be easier thanks to their great support. We look forward to developing more features on the platform."},{"children":null,"type":"text","title":"Author Name","key":"author_name","id":"h2gbsWcDC1","value":"Dustin Brink"},{"children":null,"type":"text","title":"Business","key":"business","id":"SAfD60o1Gx","value":"Derive Systems"},{"children":null,"type":"file","title":"Author Image","key":"author_image","id":"xbqBERycTY","value":"f43752d0-856c-11ea-856b-416510aa3c93-dustin.jpeg","url":"https://cdn.cosmicjs.com/f43752d0-856c-11ea-856b-416510aa3c93-dustin.jpeg","imgix_url":"https://imgix.cosmicjs.com/f43752d0-856c-11ea-856b-416510aa3c93-dustin.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"testimonials","created":"2020-04-23T15:47:56.500Z","created_at":"2020-04-23T15:47:56.500Z","modified_at":"2020-10-28T16:16:19.526Z","status":"published","locale":null,"created_by":"56d66b2f903a79b904000001","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-10-28T16:16:19.526Z","unpublish_at":null,"order":6,"thumbnail":"https://imgix.cosmicjs.com/f43752d0-856c-11ea-856b-416510aa3c93-dustin.jpeg","metadata":{"testimonial":"Leveraging the Cosmic GraphQL API allows for easy updates to our news and blog, while keeping payloads small and fast. Integration with Cosmic could not be easier thanks to their great support. We look forward to developing more features on the platform.","author_name":"Dustin Brink","business":"Derive Systems","author_image":{"url":"https://cdn.cosmicjs.com/f43752d0-856c-11ea-856b-416510aa3c93-dustin.jpeg","imgix_url":"https://imgix.cosmicjs.com/f43752d0-856c-11ea-856b-416510aa3c93-dustin.jpeg"}}},{"_id":"596663e8880d69fb6c000194","slug":"joblift-elevates-their-stack","title":"Joblift Elevates Their Stack ","content":"<p>In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, <a href=\"https://joblift.co.uk\" rel=\"noopener noreferrer\" target=\"_blank\">Joblift</a> seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/16ac66c0-03d7-11e9-a9c3-c1326db90b81-DrzF-2BX0AA0WTE.jpg-large.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Joblift manages localized content to serve Job, Press and Blog feeds to its various markets, including the UK, Netherlands and Germany. Easy user roles and permissions equip their team with the tools they need to seamlessly run a global organization.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic has completely sped up our ability to upload our content easily and efficiently. With Cosmic we now have a smooth process for uploading press releases which reflects the quality content on our website.&rdquo;</p><p><cite>&mdash; Ashleigh Grady, Content Editor and Marketing Manager</cite></p></blockquote>","metafields":[{"value":"Joblift","key":"company","title":"Company","type":"text","children":null},{"value":"Career Services","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T18:01:12.194Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","order":7,"publish_at":null,"published_at":"2018-12-19T21:44:38.361Z","metadata":{"company":"Joblift","industry_type":"Career Services","teaser":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","logo":{"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}}},{"_id":"63053a0095c44c0009bee31a","order":7,"slug":"npm-module-updates-v4-2","title":"NPM module updates - v4.2.*","content":"<p>We are excited to roll out new updates to the <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic NPM module</a> (v4.2.*). This update adds new chain-style methods (Note: there are no breaking changes). Review the updates below.</p><h3>Getting Started</h3><p>Get started by installing the latest module version <code>npm install cosmicjs@latest</code> then import the package into your app.</p><div class=\"fr-embedly   \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/0981b1071c0e460e65ef5d0573fe9fb3' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/0981b1071c0e460e65ef5d0573fe9fb3\" class=\"embedly-card\"></a></div><p>Then set your Bucket slug and read key. These can be found in <em>Your Bucket &gt; Settings &gt; API Access</em> after <a href=\"https://app.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">logging in</a> to your Cosmic dashboard.</p><div class=\"fr-embedly   \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/0822dc167019b36af44a4b76080302b6' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/0822dc167019b36af44a4b76080302b6\" class=\"embedly-card\"></a></div><p>Now use the new chain methods to find, add, edit, and delete Objects and Media in your Bucket.</p><div class=\"fr-embedly   \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/74a96b2971453f1052c5fe17948dfd1d' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/74a96b2971453f1052c5fe17948dfd1d\" class=\"embedly-card\"></a></div><h3>Changes</h3><ul><li>Updated the NPM module to v4.2.*</li><li>Chain methods are now available</li><li>Breaking changes: none</li></ul><h3>What&#39;s new</h3><ol><li>Added chain methods for Objects:</li></ol><ul><li><code>bucket.objects.find</code></li><li><code>bucket.objects.findOne</code></li><li><code>bucket.objects.insertOne</code></li><li><code>bucket.objects.updateOne</code></li><li><code>bucket.objects.deleteOne</code></li></ul><ol start=\"2\"><li>Added chain methods for Media:</li></ol><ul><li><code>bucket.media.find</code></li><li><code>bucket.media.findOne</code></li><li><code>bucket.media.insertOne</code></li><li><code>bucket.media.deleteOne</code></li></ul><h3>Old methods</h3><p>For the old npm-v4.1.19 methods, see the <a href=\"https://cosmic-docs-qmeqawlpd-cosmicjs.vercel.app/\" target=\"_blank\">docs version for npm-v4.1.19</a>. These methods include:</p><ol><li>Objects</li></ol><ul><li><code>bucket.getObjects</code></li><li><code>bucket.getObject</code></li><li><code>bucket.addObject</code></li><li><code>bucket.editObject</code></li><li><code>bucket.deleteObject</code></li></ul><ol start=\"2\"><li>Media</li></ol><ul><li><code>bucket.getMedia</code></li><li><code>bucket.getSingleMedia</code></li><li><code>bucket.addMedia</code></li><li><code>bucket.deleteMedia</code></li></ul><p><br></p><p>We hope you enjoy these new methods for using the <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic NPM module</a>. Review all of the methods now available in <a href=\"https://docs.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">the Cosmic docs</a>. To stay up with the latest updates to Cosmic, <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a>, <a href=\"https://www.youtube.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">subscribe on YouTube</a>, <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">join us on Slack</a>.</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"SUwTZIVeBJ","value":"2022-08-24"},{"children":null,"type":"object","title":"Author","key":"author","id":"9TWCUCrtpF","value":"5ffa1d1e0046b0000799cb7b","object_type":"authors","object":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"bAkIa79Xli","value":"","url":null,"imgix_url":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2022-08-23T20:35:12.730Z","created_by":"5357ef811693be2118000001","modified_at":"2022-08-24T21:55:43.040Z","created":"2022-08-23T20:35:12.730Z","status":"published","thumbnail":"","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2022-08-24T21:55:43.040Z","metadata":{"published_date":"2022-08-24","author":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}}},"featured_image":{"url":null,"imgix_url":null}}},{"_id":"5ef64eba9b657600076de6fc","slug":"craft-cms","title":"Craft CMS","content":"<p><span style=\"color: rgb(88, 96, 105);\">Craft CMS was created by the digital agency Pixel &amp; Tonic in 2011 and describes itself as a flexible, user-friendly CMS for creating custom digital experiences on the web and beyond. <span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\">Cosmic is an alternative to Craft CMS that your developers and content creators will love.</span></span></span></span></span></span></p><p><br></p><h3>Monolithic vs Headless CMS</h3><p><span style=\"color: rgb(88, 96, 105);\">Craft CMS</span><span style=\"color: rgb(88, 96, 105);\">, as a monolithic CMS, and other older installed CMS systems like it, comes with a coupled front end application layer that requires additional development and maintenance. <span style=\"color: rgb(88, 96, 105);\">Cosmic is a Headless CMS meaning that the content API and presentation layer are decoupled which gives your team greater flexibility when it comes to where your content can go.</span></span></p><p><span style=\"color: rgb(88, 96, 105);\">Cosmic provides everything your team of developers and content creators need: powerful and intuitive APIs for developers, and an easy-to-use dashboard for content creators. We&#39;ve removed all complexity and CMS maintenance, so your team can focus on building great products faster, together.</span></p><p><br></p><h3>But can&#39;t Craft CMS go Headless?</h3><p><span style=\"color: rgb(88, 96, 105);\">Although you CAN make <span style=\"color: rgb(88, 96, 105);\">Craft CMS</span> a Headless CMS, you still have a lot of work to do to bring it up to the level of an optimized CMS system that&#39;s truly headless. And along with<span style=\"color: rgb(88, 96, 105);\">&nbsp;your application,</span> you will need to maintain the CMS itself, adding more development costs and <span style=\"color: rgb(88, 96, 105);\">taking away focus from</span> what really matter<span style=\"color: rgb(88, 96, 105);\">s: creating great content and user experiences in your main website or app.</span></span></p>","metafields":[{"children":null,"type":"file","title":"Logo","key":"logo","id":"hpoQy8sJ8D","value":"1ba90340-b7e0-11ea-bc3d-59980ac072b1-craft-cms.jpg","url":"https://cdn.cosmicjs.com/1ba90340-b7e0-11ea-bc3d-59980ac072b1-craft-cms.jpg","imgix_url":"https://imgix.cosmicjs.com/1ba90340-b7e0-11ea-bc3d-59980ac072b1-craft-cms.jpg"},{"children":null,"type":"textarea","title":"Tech","key":"tech","id":"D2RXiAFMaO","value":"LAMP: Linux, Apache, PHP. MySQL / Postgres database."},{"children":null,"type":"textarea","title":"Scalability","key":"scalability","id":"eOsvg0S3W9","value":"Does not scale easily. Limited by your servers, hosting provider, and budget."},{"children":null,"type":"textarea","title":"Security","key":"security","id":"hwNtF8rjrK","value":"You manage the security yourself. No default data encryption at rest or in transit."},{"children":null,"type":"textarea","title":"Maintenance","key":"maintenance","id":"hGXiZdeMIZ","value":"You deploy, host, and maintain everything yourself. Along with your application and content, you need to maintain updates and security for your CMS system."},{"children":null,"type":"textarea","title":"Caching","key":"caching","id":"7JTzQY1A24","value":"No caching included out of the box."},{"children":null,"type":"textarea","title":"Media CDN","key":"media_cdn","id":"7ieFBQUOVw","value":"No CDN included out of the box."},{"children":null,"type":"textarea","title":"Image Processing","key":"image_processing","id":"8VKaZD70z6","value":"Manually manage your own image sizes and optimizations."},{"children":null,"type":"textarea","title":"Extendability","key":"extendability","id":"UWahqMvyV9","value":"Templates and plugins."},{"children":null,"type":"textarea","title":"Front end","key":"front_end","id":"6h93MixcDw","value":"Front end is coupled with backend CMS. Can be made to be Headless."},{"children":null,"type":"textarea","title":"Number of Projects","key":"number_of_projects","id":"BMYwtRcixT","value":"One login, one website."},{"children":null,"type":"html-textarea","title":"Costs","key":"costs","id":"GkXboOx9y3","value":"<p>You will need to hire developer resources. Average salary of a full-stack developer is <a href=\"https://neuvoo.com/salary/?job=Full+Stack+Developer\" target=\"_blank\">$111,600 per year</a>. You may need to hire 1-3 developers to maintain the CMS.</p>"},{"children":null,"type":"text","title":"Vendor Name","key":"vendor_name","id":"HVkyM3w8Sk","value":"Craft CMS"},{"children":null,"type":"switch","title":"Include in link list","key":"include_in_link_list","id":"iU6ZVrvM3u","value":true,"options":"yes,no"},{"children":null,"type":"text","title":"Cost Value","key":"cost_value","id":"EHanTcLdHS","value":"$223,200"},{"children":null,"type":"text","title":"Cost Text","key":"cost_text","id":"xX5JD9o4JD","value":"per year"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"cms-competitors","created":"2020-06-26T19:38:34.993Z","created_at":"2020-06-26T19:38:34.993Z","modified_at":"2020-06-28T20:53:31.333Z","status":"published","locale":null,"modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-28T20:53:31.333Z","unpublish_at":null,"order":7,"metadata":{"logo":{"url":"https://cdn.cosmicjs.com/1ba90340-b7e0-11ea-bc3d-59980ac072b1-craft-cms.jpg","imgix_url":"https://imgix.cosmicjs.com/1ba90340-b7e0-11ea-bc3d-59980ac072b1-craft-cms.jpg"},"tech":"LAMP: Linux, Apache, PHP. MySQL / Postgres database.","scalability":"Does not scale easily. Limited by your servers, hosting provider, and budget.","security":"You manage the security yourself. No default data encryption at rest or in transit.","maintenance":"You deploy, host, and maintain everything yourself. Along with your application and content, you need to maintain updates and security for your CMS system.","caching":"No caching included out of the box.","media_cdn":"No CDN included out of the box.","image_processing":"Manually manage your own image sizes and optimizations.","extendability":"Templates and plugins.","front_end":"Front end is coupled with backend CMS. Can be made to be Headless.","number_of_projects":"One login, one website.","costs":"<p>You will need to hire developer resources. Average salary of a full-stack developer is <a href=\"https://neuvoo.com/salary/?job=Full+Stack+Developer\" target=\"_blank\">$111,600 per year</a>. You may need to hire 1-3 developers to maintain the CMS.</p>","vendor_name":"Craft CMS","include_in_link_list":true,"cost_value":"$223,200","cost_text":"per year"}},{"_id":"599b30c44f629e3a5900010f","order":7,"slug":"jazib-sawar","title":"Jazib Sawar","content":"","metafields":[{"value":"d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","id":"MoCJXLYqwC","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","imgix_url":"https://imgix.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg"},{"value":"jazibsawar","id":"","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-08-21T19:13:08.011Z","created_by":"5357ef811693be2118000001","created":"2017-08-21T19:13:08.011Z","status":"published","modified_at":"2020-09-15T15:41:11.076Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-12-09T16:06:31.900Z","thumbnail":"https://imgix.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","imgix_url":"https://imgix.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg"},"username":"jazibsawar"}},{"_id":"5bad1c960d6e7903879ee272","slug":"analytics","title":"Analytics","content":"","metafields":[{"value":"https://cosmicjs.com/extensions/google-analytics","key":"link","title":"Link","type":"text","children":false,"has_length_edit":true,"parent":false},{"value":"3631e850-c276-11e8-8edd-1f302b73a4c6-g.png","key":"image","title":"Image","type":"file","children":false,"has_length_edit":false,"parent":false,"url":"https://cdn.cosmicjs.com/3631e850-c276-11e8-8edd-1f302b73a4c6-g.png","imgix_url":"https://imgix.cosmicjs.com/3631e850-c276-11e8-8edd-1f302b73a4c6-g.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"integrations","created":"2018-09-27T18:08:22.748Z","created_at":"2018-09-27T18:08:22.748Z","modified_at":"2018-09-27T18:08:22.748Z","status":"published","locale":null,"published_at":"2018-09-27T18:08:22.748Z","created_by":"5357ef811693be2118000001","order":7,"metadata":{"link":"https://cosmicjs.com/extensions/google-analytics","image":{"url":"https://cdn.cosmicjs.com/3631e850-c276-11e8-8edd-1f302b73a4c6-g.png","imgix_url":"https://imgix.cosmicjs.com/3631e850-c276-11e8-8edd-1f302b73a4c6-g.png"}}},{"_id":"5f383668e247dd0008fb2705","order":7,"slug":"mongodb-cms","title":"MongoDB CMS","content":"","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"ygpI9IbxYR","value":"24198fd0-f4ac-11ec-a2eb-c1653f3f9199-mongodb-cms.png","url":"https://cdn.cosmicjs.com/24198fd0-f4ac-11ec-a2eb-c1653f3f9199-mongodb-cms.png","imgix_url":"https://imgix.cosmicjs.com/24198fd0-f4ac-11ec-a2eb-c1653f3f9199-mongodb-cms.png"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"7gaZzZBPz2","value":"6b606d80-df2f-11ea-a072-f38fe2ab3178-mongodb-cms.svg","url":"https://cdn.cosmicjs.com/6b606d80-df2f-11ea-a072-f38fe2ab3178-mongodb-cms.svg","imgix_url":"https://imgix.cosmicjs.com/6b606d80-df2f-11ea-a072-f38fe2ab3178-mongodb-cms.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"r9V0TqrsDi","value":"<p>Cosmic is the best CMS for MongoDB websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"un8Gfkyd6N","value":"MongoDB"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"GI17CWLolM","value":"Cosmic is the best CMS for MongoDB websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"5aADDkQoy2","value":"24198fd0-f4ac-11ec-a2eb-c1653f3f9199-mongodb-cms.png","url":"https://cdn.cosmicjs.com/24198fd0-f4ac-11ec-a2eb-c1653f3f9199-mongodb-cms.png","imgix_url":"https://imgix.cosmicjs.com/24198fd0-f4ac-11ec-a2eb-c1653f3f9199-mongodb-cms.png"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"xl1RKNzb8i","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"Y6RzhqNdQl","value":"Best MongoDB Headless CMS"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"P641AUWFzQ","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]},{"children":null,"type":"text","title":"Apps Search Term","key":"apps_search_term","id":"kUi5NkTI0e","value":"react"},{"children":null,"type":"text","title":"Articles Search Term","key":"articles_search_term","id":"2yfyZkRdcz","value":"react"},{"children":null,"type":"html-textarea","title":"Page Overview","key":"page_overview","id":"tLU8Rx9bIO","value":""},{"children":null,"type":"html-textarea","title":"SEO Content","key":"seo_content","id":"iVObuSI72E","value":""},{"children":null,"type":"text","title":"Page Overview Title","key":"page_overview_title","id":"gj036836gx4c73fpdjzb","value":""},{"children":[],"type":"repeater","title":"Apps","key":"apps","id":"dkpxmwigd1z8x4ants9f","value":"","repeater_fields":[{"title":"App Slug","key":"app_slug","value":"","type":"text","required":false}]},{"children":[],"type":"repeater","title":"Articles","key":"articles","id":"dwil4bqojngnkej4v85k","value":"","repeater_fields":[{"title":"Article Slug","key":"article_slug","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2020-08-15T19:24:24.407Z","created_by":"5357ef811693be2118000001","created":"2020-08-15T19:24:24.407Z","status":"published","modified_at":"2022-06-25T17:28:37.050Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2022-06-25T17:28:37.050Z","metadata":{"image":{"url":"https://cdn.cosmicjs.com/24198fd0-f4ac-11ec-a2eb-c1653f3f9199-mongodb-cms.png","imgix_url":"https://imgix.cosmicjs.com/24198fd0-f4ac-11ec-a2eb-c1653f3f9199-mongodb-cms.png"},"thumbnail":{"url":"https://cdn.cosmicjs.com/6b606d80-df2f-11ea-a072-f38fe2ab3178-mongodb-cms.svg","imgix_url":"https://imgix.cosmicjs.com/6b606d80-df2f-11ea-a072-f38fe2ab3178-mongodb-cms.svg"},"blurb":"<p>Cosmic is the best CMS for MongoDB websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"MongoDB","seo_description":"Cosmic is the best CMS for MongoDB websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/24198fd0-f4ac-11ec-a2eb-c1653f3f9199-mongodb-cms.png","imgix_url":"https://imgix.cosmicjs.com/24198fd0-f4ac-11ec-a2eb-c1653f3f9199-mongodb-cms.png"},"code_example":"","seo_title":"Best MongoDB Headless CMS","videos":[],"apps_search_term":"react","articles_search_term":"react","page_overview":"","seo_content":"","page_overview_title":"","apps":[],"articles":[]}},{"_id":"5d235b9872d8f04604eb2040","slug":"headless-cms-for-modern-stack-websites","title":"Headless CMS for Modern Stack Websites","content":"<p>The Cosmic Headless CMS powers content for your modern stack websites with speed and flexibility out-of-the-box. Your team is free to use their favorite modern tools to power content for websites, mobile apps, static websites and more. Create structured <a href=\"https://www.cosmicjs.com/headless-cms/content-modeling\">content models</a> to reuse across all your websites and applications. API tools and resources are available to help you start building with the latest static site generators, workflows and <a href=\"https://www.cosmicjs.com/integrations\">integrations</a>.</p><p>Use tools like React, Vue, GraphQL, Gatsby and Serverless technologies to build performant apps whose content is editable via the Cosmic <a href=\"https://www.cosmicjs.com/headless-cms/web-dashboard\">web-based Dashboard</a>.&nbsp;</p>","metafields":[{"children":null,"type":"text","title":"Solution Name","key":"solution_name","id":"2zJ2KZg9t6","value":"Modern Stack Websites"},{"children":null,"type":"file","title":"Image","key":"image","id":"811Ib0t852","value":"abe9e700-9dc2-11e9-a5b4-e5df9f8049d3-tripwire.png","url":"https://cdn.cosmicjs.com/abe9e700-9dc2-11e9-a5b4-e5df9f8049d3-tripwire.png","imgix_url":"https://imgix.cosmicjs.com/abe9e700-9dc2-11e9-a5b4-e5df9f8049d3-tripwire.png"},{"children":null,"type":"objects","title":"Case Studies","key":"case_studies","id":"LDRGacRwH6","value":"5b4753096d4f364510bf1290,5bd206599dca8d10e941b69b,5a73423ee520776813591ee2","object_type":"case-studies","objects":[{"_id":"5b4753096d4f364510bf1290","slug":"hypometer-technologies-fantasy-insider-and-stats-insider","title":"Hypometer Technologies: Fantasy Insider and Stats Insider","content":"<p><a href=\"http://www.thehypometer.com\" rel=\"noopener noreferrer\" target=\"_blank\">Hypometer Technologies</a> is revolutionizing the Australian sporting experience by making predictive analytics accessible to the masses. Their next generation sports media platforms are the form guide for every big game, and the go-to sites for trusted predictive analytics.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>Historically the team managed content via WordPress, but as they scaled their content WordPress started to bottleneck them. They pivoted to working with the WordPress API, which resulted in slow load times as WordPress would call all assets and return unnecessary data in the API call.&nbsp;</p><p>Recently the tech team was searching for a solution to manage dynamic content for their blogs, <a href=\"https://www.fantasyinsider.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">Fantasy Insider</a> and <a href=\"https://www.statsinsider.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">Stats Insider</a>. They wanted to remain decoupled from their application&#39;s codebase when managing content, so they started researching headless CMS systems. They chose Cosmic due to the simplicity of API integration and the content editing tools that would empower their marketers and writers.&nbsp;</p><p>In addition, Cosmic allowed the Hypometer team to write scripts to migrate existing WordPress post content over to Cosmic for editing and publishing.&nbsp;</p><p><br></p><h3>Fantasy Insider</h3><p><strong>Built On:</strong> Python | Angular | Cosmic</p><p><a href=\"https://www.fantasyinsider.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">Fantasy Insider</a> is the market leader for daily fantasy sports information in Australia, with over half of the active market visiting the site for content or predictive tools each week.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/3403b360-8c20-11e8-897c-ffeb4b6a74c8-cruncher_tool_heromockup.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><h3><br></h3><h3><br></h3><h3>Stats Insider</h3><p><strong>Built On:</strong> Python | Angular | Cosmic</p><p>Launched in early 2018, <a href=\"https://www.statsinsider.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">Stats Insider</a> is Australia&#39;s first advanced sports analytics and predictive data platform for sports fans, punters and fantasy sports players.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/47f104e0-8c20-11e8-99fd-2526f825b178-si_fb_coverphoto_ornge_nrl-soccer.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>Stats Insider will be providing information and predictions for US sports from August. Stay up to date with them on <a href=\"http://twitter.com/statsinsider\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>. &nbsp;<a href=\"http://twitter.com/statsinsider\"></a></p><p><br></p><blockquote><p>&quot;The headless CMS we chose had to tick a lot of boxes. At the end of the day, though, it needed to be easy for our external writers to use. We recorded a quick screencast video internally showing how to set up a piece of content, sent that out to our team, and I haven&rsquo;t had a question from any of our writers since. We&rsquo;ve just started to use Cosmic for other things like an activity status bar on Stats Insider which frees up more time for our developers and makes our workflow more flexible.&rdquo;</p><p><cite>&mdash; Katie Prowd, Co-Founder of Fantasy Insider</cite></p></blockquote>","metafields":[{"value":"Hypometer Technologies","key":"company","title":"Company","type":"text","children":null},{"value":"Fantasy Sports","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Hypometer Technologies is revolutionizing the Australian sporting experience by making predictive analytics accessible to the masses. Their next generation sports media platforms are the form guide for every big game, and the go-to sites for trusted predictive analytics.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png","imgix_url":"https://imgix.cosmicjs.com/1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-12T13:09:29.236Z","created_by":"5716b504e9c686d006000073","created":"2018-07-12T13:09:29.236Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-07-20T13:31:54.633Z"},{"_id":"5bd206599dca8d10e941b69b","slug":"derive-systems-runs-on-cosmic-js","title":"Derive Systems runs on Cosmic","content":"<p dir=\"ltr\"><a href=\"https://derivesystems.com\" rel=\"noopener noreferrer\" target=\"_blank\">Derive Systems</a>  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. </p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/3d484f50-d881-11e8-a05d-ade53a62d98b-Derive Systems.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">The team at Derive Systems was in search of a headless CMS that would give their developers flexibility out-of-the-box while enabling their content managers to manage content in a familiar and modern CMS Dashboard. They chose Cosmic due to its easy content modeling tools for their Blog, Press, About and Team Sections. Derive now runs a Next.js, React and Express framework that utilizes the Cosmic GraphQL API to deliver its content.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/ea968040-d882-11e8-8793-13fe540ddec9-Derive Systems GIF.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&ldquo;Leveraging the Cosmic GraphQL API allows for easy updates to our news and blog, while keeping payloads small and fast. Integration with Cosmic could not be easier thanks to their great support. We look forward to developing more features on the platform.&rdquo;</p><br><p><cite>&mdash; Dustin Brink, Front End Developer at Derive Systems&nbsp;</cite></p></blockquote>","metafields":[{"value":"Derive Systems","key":"company","title":"Company","type":"text","children":null},{"value":"Automotive","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Derive Systems  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","imgix_url":"https://imgix.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-25T18:07:21.426Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-11-15T14:51:19.007Z"},{"_id":"5a73423ee520776813591ee2","slug":"rocket-radio-builds-a-podcast-streaming-website","title":"Rocket Radio Builds a Podcast-Streaming Website","content":"<p dir=\"ltr\"><a href=\"http://www.rocketradio.com\" rel=\"noopener noreferrer\" target=\"_blank\">Rocket Radio</a> is a San Francisco Bay Area Music Network that creates podcasts featuring music and interviews with established and rising stars in the music industry. With shows covering all music genres, they needed a new website that allowed for numerous content editors and developers representing a blended team. See how Rocket Radio &nbsp;built their new podcast website using <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a>, <a href=\"https://cosmicjs.com/knowledge-base/react-cms\" rel=\"noopener noreferrer\" target=\"_blank\">React.js</a>, Redux and Cosmic.</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://cosmic-s3.imgix.net/15880780-270b-11e8-9dc5-e74ed0ce0965-29177246_412275625864297_3165994124966057316_n.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Rocket Radio tech team built out a single page application with Node, React and Redux using <a href=\"https://cosmicjs.com/apps\" rel=\"noopener noreferrer\" target=\"_blank\">Example Apps</a> from the <a href=\"https://cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a>. The team was able to leverage the Cosmic API to build out core components from Authentication to a news gallery to podcast listening features.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/67c166a0-27d7-11e8-97d1-3747ad2387c0-rocketradio_casestudy.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;From Docs to Example Apps and Service, it was all there. Cosmic provided a huge boost in cutting development time all while helping our team meet its goals. I would certainly recommend Cosmic to anyone seeking to build out a website using some of the latest technology while looking to stay ahead of the game.&quot;</p><p><cite>&mdash; Gus A., Senior Software Engineer&nbsp;</cite></p></blockquote><p><br></p><div class=\"fr-embedly \" data-original-embed=\"<a href='https://twitter.com/RocketRadio_/status/1035254459251580928' class='embedly-card'></a>\"><a href=\"https://twitter.com/RocketRadio_/status/1035254459251580928\" class=\"embedly-card\"></a></div>","metafields":[{"value":"Rocket Radio","key":"company","title":"Company","type":"text","children":null},{"value":"Music and Entertainment","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Rocket Radio is a San Francisco Bay Area Music Network that creates podcasts featuring music and interviews with established and rising stars in the music industry. With shows covering all music genres, they needed a new website that allowed for numerous content editors and developers representing a blended team. See how Rocket Radio  built their new podcast website using Node.js React.js, Redux and Cosmic.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"acbb5cf0-076d-11e8-a43c-e17c6c324439-IMG_0380.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/acbb5cf0-076d-11e8-a43c-e17c6c324439-IMG_0380.jpg","imgix_url":"https://imgix.cosmicjs.com/acbb5cf0-076d-11e8-a43c-e17c6c324439-IMG_0380.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-02-01T16:37:18.070Z","created_by":"5716b504e9c686d006000073","created":"2018-02-01T16:37:18.070Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-08-30T20:32:56.765Z"}]},{"children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"gatsby-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"jamstack-fitness-website","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"cross-platform-blog","type":"text","required":false}]}],"type":"repeater","title":"App Slugs","key":"app_slugs","id":"SGakjep877","value":"gatsby-blog","repeater_fields":"\"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\"\""},{"children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"wordpress-importer","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"algolia-search","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"imgix-editor","type":"text","required":false}]}],"type":"repeater","title":"Extension Slugs","key":"extension_slugs","id":"UHkyhMIBJU","value":"wordpress-importer","repeater_fields":"\"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\"\""},{"children":null,"type":"html-textarea","title":"Testimonial","key":"testimonial","id":"K8ywqylljB","value":"<p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team has been enjoying the ease of use with the new system.&quot;</p>"},{"children":null,"type":"text","title":"Testimonial Credit","key":"testimonial_credit","id":"zpiXc4OE0h","value":"Owen Liversidge, Lead Developer at Tripwire Interactive"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created":"2019-07-08T15:04:56.206Z","created_at":"2019-07-08T15:04:56.206Z","modified_at":"2020-08-10T14:05:12.245Z","status":"published","locale":null,"published_at":"2020-05-06T05:33:29.829Z","modified_by":"5357ef811693be2118000001","publish_at":null,"order":7,"unpublish_at":null,"metadata":{"solution_name":"Modern Stack Websites","image":{"url":"https://cdn.cosmicjs.com/abe9e700-9dc2-11e9-a5b4-e5df9f8049d3-tripwire.png","imgix_url":"https://imgix.cosmicjs.com/abe9e700-9dc2-11e9-a5b4-e5df9f8049d3-tripwire.png"},"case_studies":[{"_id":"5b4753096d4f364510bf1290","slug":"hypometer-technologies-fantasy-insider-and-stats-insider","title":"Hypometer Technologies: Fantasy Insider and Stats Insider","content":"<p><a href=\"http://www.thehypometer.com\" rel=\"noopener noreferrer\" target=\"_blank\">Hypometer Technologies</a> is revolutionizing the Australian sporting experience by making predictive analytics accessible to the masses. Their next generation sports media platforms are the form guide for every big game, and the go-to sites for trusted predictive analytics.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>Historically the team managed content via WordPress, but as they scaled their content WordPress started to bottleneck them. They pivoted to working with the WordPress API, which resulted in slow load times as WordPress would call all assets and return unnecessary data in the API call.&nbsp;</p><p>Recently the tech team was searching for a solution to manage dynamic content for their blogs, <a href=\"https://www.fantasyinsider.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">Fantasy Insider</a> and <a href=\"https://www.statsinsider.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">Stats Insider</a>. They wanted to remain decoupled from their application&#39;s codebase when managing content, so they started researching headless CMS systems. They chose Cosmic due to the simplicity of API integration and the content editing tools that would empower their marketers and writers.&nbsp;</p><p>In addition, Cosmic allowed the Hypometer team to write scripts to migrate existing WordPress post content over to Cosmic for editing and publishing.&nbsp;</p><p><br></p><h3>Fantasy Insider</h3><p><strong>Built On:</strong> Python | Angular | Cosmic</p><p><a href=\"https://www.fantasyinsider.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">Fantasy Insider</a> is the market leader for daily fantasy sports information in Australia, with over half of the active market visiting the site for content or predictive tools each week.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/3403b360-8c20-11e8-897c-ffeb4b6a74c8-cruncher_tool_heromockup.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><h3><br></h3><h3><br></h3><h3>Stats Insider</h3><p><strong>Built On:</strong> Python | Angular | Cosmic</p><p>Launched in early 2018, <a href=\"https://www.statsinsider.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">Stats Insider</a> is Australia&#39;s first advanced sports analytics and predictive data platform for sports fans, punters and fantasy sports players.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/47f104e0-8c20-11e8-99fd-2526f825b178-si_fb_coverphoto_ornge_nrl-soccer.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>Stats Insider will be providing information and predictions for US sports from August. Stay up to date with them on <a href=\"http://twitter.com/statsinsider\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>. &nbsp;<a href=\"http://twitter.com/statsinsider\"></a></p><p><br></p><blockquote><p>&quot;The headless CMS we chose had to tick a lot of boxes. At the end of the day, though, it needed to be easy for our external writers to use. We recorded a quick screencast video internally showing how to set up a piece of content, sent that out to our team, and I haven&rsquo;t had a question from any of our writers since. We&rsquo;ve just started to use Cosmic for other things like an activity status bar on Stats Insider which frees up more time for our developers and makes our workflow more flexible.&rdquo;</p><p><cite>&mdash; Katie Prowd, Co-Founder of Fantasy Insider</cite></p></blockquote>","metafields":[{"value":"Hypometer Technologies","key":"company","title":"Company","type":"text","children":null},{"value":"Fantasy Sports","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Hypometer Technologies is revolutionizing the Australian sporting experience by making predictive analytics accessible to the masses. Their next generation sports media platforms are the form guide for every big game, and the go-to sites for trusted predictive analytics.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png","imgix_url":"https://imgix.cosmicjs.com/1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-12T13:09:29.236Z","created_by":"5716b504e9c686d006000073","created":"2018-07-12T13:09:29.236Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-07-20T13:31:54.633Z","metadata":{"company":"Hypometer Technologies","industry_type":"Fantasy Sports","teaser":"Hypometer Technologies is revolutionizing the Australian sporting experience by making predictive analytics accessible to the masses. Their next generation sports media platforms are the form guide for every big game, and the go-to sites for trusted predictive analytics.\n","logo":{"url":"https://cdn.cosmicjs.com/1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png","imgix_url":"https://imgix.cosmicjs.com/1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png"}}},{"_id":"5bd206599dca8d10e941b69b","slug":"derive-systems-runs-on-cosmic-js","title":"Derive Systems runs on Cosmic","content":"<p dir=\"ltr\"><a href=\"https://derivesystems.com\" rel=\"noopener noreferrer\" target=\"_blank\">Derive Systems</a>  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. </p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/3d484f50-d881-11e8-a05d-ade53a62d98b-Derive Systems.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">The team at Derive Systems was in search of a headless CMS that would give their developers flexibility out-of-the-box while enabling their content managers to manage content in a familiar and modern CMS Dashboard. They chose Cosmic due to its easy content modeling tools for their Blog, Press, About and Team Sections. Derive now runs a Next.js, React and Express framework that utilizes the Cosmic GraphQL API to deliver its content.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/ea968040-d882-11e8-8793-13fe540ddec9-Derive Systems GIF.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&ldquo;Leveraging the Cosmic GraphQL API allows for easy updates to our news and blog, while keeping payloads small and fast. Integration with Cosmic could not be easier thanks to their great support. We look forward to developing more features on the platform.&rdquo;</p><br><p><cite>&mdash; Dustin Brink, Front End Developer at Derive Systems&nbsp;</cite></p></blockquote>","metafields":[{"value":"Derive Systems","key":"company","title":"Company","type":"text","children":null},{"value":"Automotive","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Derive Systems  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","imgix_url":"https://imgix.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-25T18:07:21.426Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-11-15T14:51:19.007Z","metadata":{"company":"Derive Systems","industry_type":"Automotive","teaser":"Derive Systems  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. \n","logo":{"url":"https://cdn.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","imgix_url":"https://imgix.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg"}}},{"_id":"5a73423ee520776813591ee2","slug":"rocket-radio-builds-a-podcast-streaming-website","title":"Rocket Radio Builds a Podcast-Streaming Website","content":"<p dir=\"ltr\"><a href=\"http://www.rocketradio.com\" rel=\"noopener noreferrer\" target=\"_blank\">Rocket Radio</a> is a San Francisco Bay Area Music Network that creates podcasts featuring music and interviews with established and rising stars in the music industry. With shows covering all music genres, they needed a new website that allowed for numerous content editors and developers representing a blended team. See how Rocket Radio &nbsp;built their new podcast website using <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a>, <a href=\"https://cosmicjs.com/knowledge-base/react-cms\" rel=\"noopener noreferrer\" target=\"_blank\">React.js</a>, Redux and Cosmic.</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://cosmic-s3.imgix.net/15880780-270b-11e8-9dc5-e74ed0ce0965-29177246_412275625864297_3165994124966057316_n.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Rocket Radio tech team built out a single page application with Node, React and Redux using <a href=\"https://cosmicjs.com/apps\" rel=\"noopener noreferrer\" target=\"_blank\">Example Apps</a> from the <a href=\"https://cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a>. The team was able to leverage the Cosmic API to build out core components from Authentication to a news gallery to podcast listening features.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/67c166a0-27d7-11e8-97d1-3747ad2387c0-rocketradio_casestudy.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;From Docs to Example Apps and Service, it was all there. Cosmic provided a huge boost in cutting development time all while helping our team meet its goals. I would certainly recommend Cosmic to anyone seeking to build out a website using some of the latest technology while looking to stay ahead of the game.&quot;</p><p><cite>&mdash; Gus A., Senior Software Engineer&nbsp;</cite></p></blockquote><p><br></p><div class=\"fr-embedly \" data-original-embed=\"<a href='https://twitter.com/RocketRadio_/status/1035254459251580928' class='embedly-card'></a>\"><a href=\"https://twitter.com/RocketRadio_/status/1035254459251580928\" class=\"embedly-card\"></a></div>","metafields":[{"value":"Rocket Radio","key":"company","title":"Company","type":"text","children":null},{"value":"Music and Entertainment","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Rocket Radio is a San Francisco Bay Area Music Network that creates podcasts featuring music and interviews with established and rising stars in the music industry. With shows covering all music genres, they needed a new website that allowed for numerous content editors and developers representing a blended team. See how Rocket Radio  built their new podcast website using Node.js React.js, Redux and Cosmic.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"acbb5cf0-076d-11e8-a43c-e17c6c324439-IMG_0380.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/acbb5cf0-076d-11e8-a43c-e17c6c324439-IMG_0380.jpg","imgix_url":"https://imgix.cosmicjs.com/acbb5cf0-076d-11e8-a43c-e17c6c324439-IMG_0380.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-02-01T16:37:18.070Z","created_by":"5716b504e9c686d006000073","created":"2018-02-01T16:37:18.070Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-08-30T20:32:56.765Z","metadata":{"company":"Rocket Radio","industry_type":"Music and Entertainment","teaser":"Rocket Radio is a San Francisco Bay Area Music Network that creates podcasts featuring music and interviews with established and rising stars in the music industry. With shows covering all music genres, they needed a new website that allowed for numerous content editors and developers representing a blended team. See how Rocket Radio  built their new podcast website using Node.js React.js, Redux and Cosmic.\n","logo":{"url":"https://cdn.cosmicjs.com/acbb5cf0-076d-11e8-a43c-e17c6c324439-IMG_0380.jpg","imgix_url":"https://imgix.cosmicjs.com/acbb5cf0-076d-11e8-a43c-e17c6c324439-IMG_0380.jpg"}}}],"app_slugs":[{"slug":"gatsby-blog"},{"slug":"jamstack-fitness-website"},{"slug":"cross-platform-blog"}],"extension_slugs":[{"slug":"wordpress-importer"},{"slug":"algolia-search"},{"slug":"imgix-editor"}],"testimonial":"<p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team has been enjoying the ease of use with the new system.&quot;</p>","testimonial_credit":"Owen Liversidge, Lead Developer at Tripwire Interactive"}},{"_id":"62f268ed9c03fd0009e2c574","order":7,"slug":"new-dashboard-updates-content-type-model-improvements-global-nav-updates-and-more","title":"New dashboard updates: content type model improvements, global nav updates, and more","content":"<p>We&#39;re excited to share a big release for the new dashboard. Read below and <a href=\"https://app-v2.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">sign up to get on the waitlist</a> to preview the new dashboard.</p><h3>🛠️<strong>&nbsp;Content type updates</strong></h3><p>Content modeling is at the heart of the Cosmic content management experience. And with this latest release, content modeling got even better. Now whenever you update your content model in your content type settings, ALL of the existing Objects in the type will be\r\nupdated.</p><p><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/4d8c5b20-17ef-11ed-a6f1-796d8d81420f-content-model.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><p>Prior to this update, updating the model on all of your existing Objects was manual and cumbersome, now it&#39;s automatic! We think you&#39;ll enjoy this improvement when working with ongoing updates to your content model.</p><h3><br><strong>🧭 Global nav updates</strong></h3><p>The navigation has been dramatically improved with this release. You&#39;ll notice that everything is centered and easy to get to. This is a small update that makes a big difference to improve your navigation efficiency.</p><p><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/d170b300-17ef-11ed-a6f1-796d8d81420f-global-nav.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><p><br></p><h3>🤝<strong>&nbsp;Roles and permissions</strong></h3><p>We&#39;ve made a big update to how roles and permissions are done. You can now set roles at the Project level (If you have a Workspace, it&#39;s done at the Workspace level). This will enable teams to more efficiently add team members for collaboration.</p><p><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/4c32c920-17f0-11ed-a6f1-796d8d81420f-roles-permissions.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><h3><br></h3><p><a data-ved=\"2ahUKEwj73tjz4Iz4AhUsoY4IHRjCDPkQFnoECAMQAQ\" href=\"https://emojipedia.org/laptop/\" ping=\"/url?sa=t&source=web&rct=j&url=https://emojipedia.org/laptop/&ved=2ahUKEwj73tjz4Iz4AhUsoY4IHRjCDPkQFnoECAMQAQ\"></a></p><h3>🖥️ <strong>Try it out</strong></h3><p>Note: If you have already been testing the new dashboard in the private alpha release, and had previously added content, you will notice that your content has been removed. This is because we made lots of content model updates. You can still log in with your alpha testing account.</p><p>We are on a mission to build the best content management solution in the world and there&#39;s more work to do! If you haven&#39;t joined, <a href=\"https://app-v2.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">sign up to get on the waitlist</a> to try it out during this alpha development phase, and help us by providing your feedback.</p><p>A lot of folks have asked us when this will be ready for wider release and the answer is VERY SOON. We&#39;re excited to be closing in on the beta release. Follow us <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">on Twitter</a>, subscribe <a href=\"https://www.youtube.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">on YouTube</a>, and join our team <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">on Slack</a> to stay in touch with the latest Cosmic news and feature updates.<br><br>Sincerely,<br>Cosmic Team</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"oDhPZkjFJS","value":"5ffa1d1e0046b0000799cb7b","required":true,"object_type":"authors","object":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"koOJyZaSJB","value":"<p>We&#39;ve released some new features for the new dashboard that we are excited to share with you.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"Z0SUn9W5IW","value":"a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png","url":"https://cdn.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png","imgix_url":"https://imgix.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"qSL91WdiHz","value":"We've released some new features for the new dashboard that we are excited to share with you."},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"seaH6CLq0M","value":"2022-08-09"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2022-08-09T14:02:21.760Z","created_by":"5357ef811693be2118000001","modified_at":"2022-08-09T19:33:54.893Z","created":"2022-08-09T14:02:21.760Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2022-08-09T19:33:54.893Z","metadata":{"author":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}}},"teaser":"<p>We&#39;ve released some new features for the new dashboard that we are excited to share with you.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png","imgix_url":"https://imgix.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png"},"seo_meta_description":"We've released some new features for the new dashboard that we are excited to share with you.","published_date":"2022-08-09"}},{"_id":"59528e59833ff0503d000e98","order":8,"slug":"matt-cain","title":"Matt Cain","content":"","metafields":[{"value":"9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg","imgix_url":"https://imgix.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-06-27T16:56:57.686Z","created_by":"5357ef811693be2118000001","created":"2017-06-27T16:56:57.686Z","status":"published","modified_at":"2023-01-20T22:01:28.380Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg","imgix_url":"https://imgix.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg"}}},{"_id":"5bad1c34f394147a6754be77","slug":"zapier","title":"Zapier","content":"","metafields":[{"children":null,"type":"text","title":"Link","key":"link","id":"29kCcYJz4U","value":"https://zapier.com/platform/public-invite/5784/d94417b158f78245932516dc472dbfbe/"},{"children":null,"type":"file","title":"Image","key":"image","id":"rs10eNLtPC","value":"33960010-8ed8-11ea-910b-435199f15a39-zapier.jpg","url":"https://cdn.cosmicjs.com/33960010-8ed8-11ea-910b-435199f15a39-zapier.jpg","imgix_url":"https://imgix.cosmicjs.com/33960010-8ed8-11ea-910b-435199f15a39-zapier.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"integrations","created":"2018-09-27T18:06:44.885Z","created_at":"2018-09-27T18:06:44.885Z","modified_at":"2020-05-05T13:56:23.379Z","status":"published","locale":null,"published_at":"2020-05-05T13:56:23.379Z","created_by":"5357ef811693be2118000001","modified_by":"5357ef811693be2118000001","publish_at":null,"order":8,"unpublish_at":null,"metadata":{"link":"https://zapier.com/platform/public-invite/5784/d94417b158f78245932516dc472dbfbe/","image":{"url":"https://cdn.cosmicjs.com/33960010-8ed8-11ea-910b-435199f15a39-zapier.jpg","imgix_url":"https://imgix.cosmicjs.com/33960010-8ed8-11ea-910b-435199f15a39-zapier.jpg"}}},{"_id":"5f1a32d2c56a150007c78944","order":8,"slug":"ecommerce-cms","title":"Ecommerce CMS","content":"","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"ud4EBv55MP","value":"84df39f0-cd49-11ea-a03b-a9b51dcc4b0e-171-shopping-cart.svg","url":"https://cdn.cosmicjs.com/84df39f0-cd49-11ea-a03b-a9b51dcc4b0e-171-shopping-cart.svg","imgix_url":"https://imgix.cosmicjs.com/84df39f0-cd49-11ea-a03b-a9b51dcc4b0e-171-shopping-cart.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"DVexaXi6cX","value":"84df39f0-cd49-11ea-a03b-a9b51dcc4b0e-171-shopping-cart.svg","url":"https://cdn.cosmicjs.com/84df39f0-cd49-11ea-a03b-a9b51dcc4b0e-171-shopping-cart.svg","imgix_url":"https://imgix.cosmicjs.com/84df39f0-cd49-11ea-a03b-a9b51dcc4b0e-171-shopping-cart.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"Z4AcrWh4gn","value":"<p>Cosmic is the best CMS for Ecommerce websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"xngL2db52p","value":"Ecommerce"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"VKTyIhPf8a","value":"Cosmic is the best CMS for Ecommerce websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"2y5awK3EvS","value":"aefb8f90-cd49-11ea-a03b-a9b51dcc4b0e-ecommerce-cms.png","url":"https://cdn.cosmicjs.com/aefb8f90-cd49-11ea-a03b-a9b51dcc4b0e-ecommerce-cms.png","imgix_url":"https://imgix.cosmicjs.com/aefb8f90-cd49-11ea-a03b-a9b51dcc4b0e-ecommerce-cms.png"},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"81PJe0z8TQ","value":"Best Headless CMS for Ecommerce"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"LX6WC65zeD","value":""},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"XHtcjFTjVc","value":"Using Cosmic as a Headless CMS with Gatsby","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2020-07-24T01:01:06.368Z","created_by":"5357ef811693be2118000001","created":"2020-07-24T01:01:06.368Z","status":"published","modified_at":"2020-07-24T01:05:59.460Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2020-07-24T01:05:59.460Z","metadata":{"image":{"url":"https://cdn.cosmicjs.com/84df39f0-cd49-11ea-a03b-a9b51dcc4b0e-171-shopping-cart.svg","imgix_url":"https://imgix.cosmicjs.com/84df39f0-cd49-11ea-a03b-a9b51dcc4b0e-171-shopping-cart.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/84df39f0-cd49-11ea-a03b-a9b51dcc4b0e-171-shopping-cart.svg","imgix_url":"https://imgix.cosmicjs.com/84df39f0-cd49-11ea-a03b-a9b51dcc4b0e-171-shopping-cart.svg"},"blurb":"<p>Cosmic is the best CMS for Ecommerce websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Ecommerce","seo_description":"Cosmic is the best CMS for Ecommerce websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/aefb8f90-cd49-11ea-a03b-a9b51dcc4b0e-ecommerce-cms.png","imgix_url":"https://imgix.cosmicjs.com/aefb8f90-cd49-11ea-a03b-a9b51dcc4b0e-ecommerce-cms.png"},"seo_title":"Best Headless CMS for Ecommerce","code_example":"","videos":[]}},{"_id":"5ef386e238f28e0008b99777","slug":"contentful-headless-cms","title":"Contentful Headless CMS","content":"<p><span style=\"color: rgb(88, 96, 105);\">Contentful is a Headless CMS that positions itself as a content management platform to create, manage and publish content on any digital channel. <span style=\"color: rgb(88, 96, 105);\">Cosmic is an alternative to Contentful that your developers and content creators will love.</span></span></p><h3><br>Developers and Creators</h3><p><span style=\"color: rgb(88, 96, 105);\">Contentful, like Cosmic, offers both a REST and GraphQL API (but Enterprise only!). Check out the&nbsp;</span><a href=\"https://docs.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic API docs<span style=\"color: rgb(88, 96, 105);\">&nbsp;</span></a><span style=\"color: rgb(88, 96, 105);\">and the&nbsp;</span><a href=\"https://www.contentful.com/developers/docs/\" rel=\"noopener noreferrer\" target=\"_blank\">Contentful API docs</a>\r\n<span style=\"color: rgb(88, 96, 105);\">to see the difference in approach.</span></p><p><span style=\"color: rgb(88, 96, 105);\">Cosmic provides everything your team of developers and content creators need: powerful and intuitive APIs for developers, and an easy-to-use dashboard for content creators. <span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\">We&#39;ve removed all complexity and CMS maintenance, so your team can focus on building great products faster, together.</span></span></span></p><h3><br>Limitations</h3><p><span style=\"color: rgb(88, 96, 105);\">With <span style=\"color: rgb(88, 96, 105);\">Contentful</span>, you will see that they put some pretty hard limits on content item count, localization, user roles, and more.</span></p>","metafields":[{"children":null,"type":"switch","title":"Include in link list","key":"include_in_link_list","id":"szxvIclbIj","value":true,"options":"yes,no"},{"children":null,"type":"text","title":"Vendor Name","key":"vendor_name","id":"yAFvvyQnSW","value":"Contentful Headless CMS"},{"children":null,"type":"file","title":"Logo","key":"logo","id":"8DCfdgUhpC","value":"5d0764c0-b59d-11ea-b8bd-530a54ec910b-contentful-headless-cms.png","url":"https://cdn.cosmicjs.com/5d0764c0-b59d-11ea-b8bd-530a54ec910b-contentful-headless-cms.png","imgix_url":"https://imgix.cosmicjs.com/5d0764c0-b59d-11ea-b8bd-530a54ec910b-contentful-headless-cms.png"},{"children":null,"type":"textarea","title":"Tech","key":"tech","id":"PQ5iGZ3X5j","value":"Technology not indicated."},{"children":null,"type":"textarea","title":"Scalability","key":"scalability","id":"kQb8WuTLYX","value":"Managed scalability."},{"children":null,"type":"textarea","title":"Security","key":"security","id":"JOv74bXjJz","value":"They manage your dashboard."},{"children":null,"type":"textarea","title":"Maintenance","key":"maintenance","id":"aDTAvzfvbq","value":"They manage your CMS."},{"children":null,"type":"textarea","title":"Caching","key":"caching","id":"fZff7k21vx","value":"Caching included on the API."},{"children":null,"type":"textarea","title":"Media CDN","key":"media_cdn","id":"P6qGrBHKEx","value":"CDN included."},{"children":null,"type":"textarea","title":"Image Processing","key":"image_processing","id":"cMqRxSineo","value":"Image sizes and optimization capabilities."},{"children":null,"type":"textarea","title":"Extendability","key":"extendability","id":"Vj7I5uQKDF","value":"UI extensions and apps."},{"children":null,"type":"textarea","title":"Front end","key":"front_end","id":"I5f614UlTa","value":"Front end is decoupled from the backend CMS."},{"children":null,"type":"textarea","title":"Number of Projects","key":"number_of_projects","id":"UvNuiMlunv","value":"One login, multiple projects."},{"children":null,"type":"html-textarea","title":"Costs","key":"costs","id":"fSqIQfKvVO","value":"<p>Watch out for a large price cliff to climb from an entry plan to anything larger. You&#39;ll be at an Enterprise level taking out a second mortgage on your house before you know it.</p>"},{"children":null,"type":"text","title":"Cost Value","key":"cost_value","id":"j0PBxUIFjp","value":"HIGH"},{"children":null,"type":"text","title":"Cost Text","key":"cost_text","id":"wByEEvzM66","value":""}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"cms-competitors","created":"2020-06-24T17:01:22.393Z","created_at":"2020-06-24T17:01:22.393Z","modified_at":"2020-06-28T20:52:08.415Z","status":"published","locale":null,"modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-28T20:52:08.415Z","unpublish_at":null,"order":8,"metadata":{"include_in_link_list":true,"vendor_name":"Contentful Headless CMS","logo":{"url":"https://cdn.cosmicjs.com/5d0764c0-b59d-11ea-b8bd-530a54ec910b-contentful-headless-cms.png","imgix_url":"https://imgix.cosmicjs.com/5d0764c0-b59d-11ea-b8bd-530a54ec910b-contentful-headless-cms.png"},"tech":"Technology not indicated.","scalability":"Managed scalability.","security":"They manage your dashboard.","maintenance":"They manage your CMS.","caching":"Caching included on the API.","media_cdn":"CDN included.","image_processing":"Image sizes and optimization capabilities.","extendability":"UI extensions and apps.","front_end":"Front end is decoupled from the backend CMS.","number_of_projects":"One login, multiple projects.","costs":"<p>Watch out for a large price cliff to climb from an entry plan to anything larger. You&#39;ll be at an Enterprise level taking out a second mortgage on your house before you know it.</p>","cost_value":"HIGH","cost_text":""}},{"_id":"62e85ac12335bc000989af15","order":8,"slug":"introducing-build-time-a-new-podcast-by-cosmic","title":"Introducing Build Time: a new podcast by Cosmic","content":"<p><a href=\"https://youtu.be/Q-m09YsyBC0\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://imgix.cosmicjs.com/d6c91900-11f0-11ed-b476-13ceb56f12f2-banner.png\" data-name=\"banner.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></a></p><p>We are excited to announce our new podcast: Build Time, now available on your favorite podcast platforms.</p><p style=\"text-align: center;\"><a href=\"https://youtu.be/Q-m09YsyBC0\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://cdn.cosmicjs.com/655f6540-11ef-11ed-b476-13ceb56f12f2-ytlogorgblight.png\" style=\"width: 300px;\" class=\"fr-fic fr-dib\"></a></p><p style=\"text-align: center;\"><a href=\"https://youtu.be/Q-m09YsyBC0\" rel=\"noopener noreferrer\" target=\"_blank\">Watch on YouTube</a><br><br></p><p style=\"text-align: center;\"><a href=\"https://open.spotify.com/show/2KKUCT7VbhJD6yzwGWZbfr\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://cdn.cosmicjs.com/b490d540-11ef-11ed-b476-13ceb56f12f2-SpotifyLogoCMYKGreen.png\" style=\"width: 300px;\" class=\"fr-fic fr-dib\"></a>\r\n<a href=\"https://open.spotify.com/show/2KKUCT7VbhJD6yzwGWZbfr\" rel=\"noopener noreferrer\" target=\"_blank\"></a><br><a href=\"https://open.spotify.com/show/2KKUCT7VbhJD6yzwGWZbfr\" rel=\"noopener noreferrer\" target=\"_blank\">Listen on Spotify</a><br><br><a href=\"https://podcasts.apple.com/us/podcast/build-time/id1637206506\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://cdn.cosmicjs.com/d349f9d0-11ef-11ed-b476-13ceb56f12f2-USUKApplePodcastsListenBadgeRGB.svg\" style=\"width: 300px;\" class=\"fr-fic fr-dib\"></a><br><a href=\"https://podcasts.apple.com/us/podcast/build-time/id1637206506\" rel=\"noopener noreferrer\" target=\"_blank\">Listen on Apple Podcasts</a></p><p><br></p><p><strong>Why did we start a podcast?</strong><br>Our mission at Cosmic is to provide the best content management service in the world. And we believe educational content is critical to helping you get the most out of Cosmic.</p><p>By offering a podcast, we are giving you another way to learn how to build great content-powered products using Cosmic and other applicable tools and services.</p><p>Our goal is for listeners to learn more about features offered by Cosmic and provide insights into techniques, libraries, frameworks, and collaboration tools in the content management and app development space.<br><br><strong>Episode #1</strong><br>Our first episode discusses the article <a href=\"https://www.cosmicjs.com/articles/how-to-use-nextjs-image-with-a-headless-cms\" rel=\"noopener noreferrer\" target=\"_blank\">How to use Next.js Image with a headless CMS</a>. We show you how to use the Next.js Image component to optimize the delivery of your Cosmic-hosted images. We also discuss general best practices and techniques to optimize images for page speed and website user experiences.<br><br><strong>Show ideas</strong><br>We are committed to helping our customers build great products using the best technology. And since we are also passionate about building great products, Build Time will serve as a way for us to stay up-to-date with the best techniques to build modern\r\nproducts and share our experience with you.</p><p>We are happy to consider your ideas for Cosmic features you would like us to highlight as well as any other topics you would like to see featured in the show. For episode ideas and any guest requests, please reach out to us on <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Slack</a> , <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, or <a href=\"mailto:support@cosmicjs.com\">email us</a>.<br><br>Happy listening!<br>Cosmic Education Team</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"rioE7jq830","value":"5ffa1d1e0046b0000799cb7b","required":true,"object_type":"authors","object":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"kXo4utf6vw","value":"<p>We are excited to announce our new podcast: Build Time, now available on your favorite content platforms.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"Gz3D5i60Do","value":"d6c91900-11f0-11ed-b476-13ceb56f12f2-banner.png","url":"https://cdn.cosmicjs.com/d6c91900-11f0-11ed-b476-13ceb56f12f2-banner.png","imgix_url":"https://imgix.cosmicjs.com/d6c91900-11f0-11ed-b476-13ceb56f12f2-banner.png"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"CKkh7hoDr3","value":"We are excited to announce our new podcast: Build Time, now available on your favorite content platforms."},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"vrwaWbDMqi","value":"2022-08-02"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2022-08-01T22:59:13.309Z","created_by":"5357ef811693be2118000001","modified_at":"2022-08-02T14:16:12.596Z","created":"2022-08-01T22:59:13.309Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/d6c91900-11f0-11ed-b476-13ceb56f12f2-banner.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2022-08-02T14:16:12.596Z","metadata":{"author":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}}},"teaser":"<p>We are excited to announce our new podcast: Build Time, now available on your favorite content platforms.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/d6c91900-11f0-11ed-b476-13ceb56f12f2-banner.png","imgix_url":"https://imgix.cosmicjs.com/d6c91900-11f0-11ed-b476-13ceb56f12f2-banner.png"},"seo_meta_description":"We are excited to announce our new podcast: Build Time, now available on your favorite content platforms.","published_date":"2022-08-02"}},{"_id":"5d235b4f957da74a7c43256e","slug":"headless-cms-for-native-apps","title":"Headless CMS for Native Apps","content":"<p>When you create content in the Cosmic Headless CMS, you&#39;re able to deliver it to all your websites and native apps. Create once and deliver everywhere. Content creators are given a <a href=\"https://www.cosmicjs.com/headless-cms\">web-based Dashboard</a> to create content that iOS and Android apps can consume just like their website. This ensures messaging-consistency and the ability to reach all of your users, regardless of their device.<br><br>Cosmic allows you to <a href=\"https://www.cosmicjs.com/headless-cms/content-modeling\">manage content</a> from a single Dashboard that powers all of your content-powered applications. &nbsp;</p>","metafields":[{"children":null,"type":"text","title":"Solution Name","key":"solution_name","id":"gst5u08S95","value":"Native Apps"},{"children":null,"type":"file","title":"Image","key":"image","id":"8M7SMbufZJ","value":"633ad600-9dc1-11e9-a5b4-e5df9f8049d3-Plato.png","url":"https://cdn.cosmicjs.com/633ad600-9dc1-11e9-a5b4-e5df9f8049d3-Plato.png","imgix_url":"https://imgix.cosmicjs.com/633ad600-9dc1-11e9-a5b4-e5df9f8049d3-Plato.png"},{"children":null,"type":"objects","title":"Case Studies","key":"case_studies","id":"Rg9SiJ8pJN","value":"5ade6e0e2b218820ec24bff1,5bd889bf80b80325461575c5,5bea030f3ca4d02ee5b4abbd","object_type":"case-studies","objects":[{"_id":"5ade6e0e2b218820ec24bff1","slug":"medical-realities-delivers-vr-surgical-content","title":"Medical Realities Delivers VR Surgical Content","content":"<p>The <a href=\"https://www.medicalrealities.com\" rel=\"noopener noreferrer\" target=\"_blank\">Medical Realties</a> Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/5dc112a0-5aa8-11e8-a7f7-e17cbb39f395-ice_screenshot_20180518-092612.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Medical Realities team needed a way for educators (non-technical editors) to manage content that could be served to VR headsets for consumption by trainees, so they chose Cosmic to manage and deliver their content from the cloud through an API.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-10999922_465521620265848_6799915322872806436_o.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily spin up content models that would allow our non-technical editors to manage the most sophisticated medical VR content out there. Our developers were equipped with robust Docs and Example Apps to get them started and were able to use the bleeding-edge frameworks necessary to run Virtual Reality.&quot;</p><p><cite>&mdash; Joe Marritt, Lead Web Developer&nbsp;</cite></p></blockquote>","metafields":[{"value":"Medical Realities","key":"company","title":"Company","type":"text","children":null},{"value":"Healthcare and Virtual Reality ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"The Medical Realties Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","imgix_url":"https://imgix.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-04-23T23:36:46.885Z","created_by":"5716b504e9c686d006000073","created":"2018-04-23T23:36:46.885Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-05-18T17:07:50.800Z"},{"_id":"5bd889bf80b80325461575c5","slug":"plato-delivers-mobile-news-feed-content-with-cosmic-js","title":"Plato Delivers Mobile News Feed Content with Cosmic","content":"<p dir=\"ltr\">Plato&#39;s mission is to bring people together through meaningful &amp; social games. <a href=\"http://www.platoapp.com\" rel=\"noopener noreferrer\" target=\"_blank\">Plato</a> combines chat &amp; games seamlessly, as the first messenger built from the ground up to support full multiplayer games. With a team comprised of Yahoo and gaming veterans plus backing from WhatsApp, Plato is available now on iOS &amp; Android.<br><br></p><p><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b09c33a0-dc63-11e8-a63d-c7054455c7d9-ice_screenshot_20181030-114842.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">Plato had a home-built CMS that, between operational costs and the engineering salaries to maintain it, was costing far too much. The team decided to replace their internal system with Cosmic to allow their developers to build new content models when they need to while empowering editors to manage content without bottlenecking the development team.&nbsp;</p><p dir=\"ltr\">Plato&#39;s new tech stack is Golang based and hosted on AWS. Plato&#39;s mobile clients, written in Swift and Kotlin, access their news feed content, which is ATOM Syndication Format. The application uses the Cosmic REST API to pull articles and package them into an ATOM-compliant feed.&nbsp;</p><p dir=\"ltr\"><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/42e9ed20-dc63-11e8-9019-332e53831a9a-14963156_1599170143430300_6292826317590698217_n.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;It is refreshing to use an API-first CMS, rather than trying to integrate with a complex, monolithic system and adapt it to our specific use case.&rdquo;</p><p><cite>&mdash; Jesse Macnish, Chief Technology Officer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Plato","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Plato's mission is to bring people together through meaningful & social games. Plato combines chat & games seamlessly, as the first messenger built from the ground up to support full multiplayer games. With a team comprised of Yahoo and gaming veterans plus backing from WhatsApp, Plato is available now on iOS & Android.\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-30T16:41:35.346Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-01-08T23:23:29.527Z"},{"_id":"5bea030f3ca4d02ee5b4abbd","slug":"killing-floor-2-launches-twisted-christmas-seasons-beatings","title":"Killing Floor 2 Launches Twisted Christmas: Season's Beatings","content":"<p dir=\"ltr\"><a href=\"http://www.tripwireinteractive.com\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a> recently launched its corporate website on Cosmic and can now easily manage microsite content for each game via a dedicated studio manager as its content creator. Killing Floor 2 is one of the studio&#39;s most popular games and incorporates seasonal promotions associated with its product release schedule.&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/6c590e60-e6cd-11e8-a2b5-d3e39a574612-ice_screenshot_20181112-133358.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><a href=\"http://twistedchristmas2018.killingfloor2.com\" rel=\"noopener noreferrer\" target=\"_blank\">Twisted Christmas</a>, a seasonal campaign designed to promote Killing Floor 2, has an &quot;Advent Calendar&quot; that debuts a new piece of content everyday leading up to Killing Floor 2&#39;s release. The team at Tripwire Interactive was able to build their application and create their marketing landing page easily using Cosmic. Using the Scheduled Publishing feature, they created all of the content for the countdown and set each Object to publish at its respective date. Now they&#39;re free to work on other projects knowing their content is publishing on schedule. <a href=\"https://cosmicjs.com/case-studies/tripwire-interactive-builds-a-react-corporate-website\" rel=\"noopener noreferrer\" target=\"_blank\">Read more</a> about how Tripwire Interactive builds apps faster using Cosmic.</p><p dir=\"ltr\"><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team\r\nhas been enjoying the ease of use with the new system.&quot;</p><p><cite>&mdash; Owen Liversidge, Lead Developer</cite></p></blockquote><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/5a608800-e6cd-11e8-97d3-11ffe223301f-ezgif-4-10b62f50c536.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"Killing Floor 2","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Twisted Christmas, a seasonal campaign designed to promote Killing Floor 2, has an \"Advent Calendar\" that debuts a new piece of content everyday leading up to Killing Floor 2's release. The team at Tripwire Interactive was able to build their application and create their marketing landing page easily using Cosmic. Using the Scheduled Publishing feature, they created all of the content for the countdown and set each Object to publish at its respective date. Now they're free to work on other projects knowing their content is publishing on schedule. Read more about how Tripwire Interactive builds apps faster using Cosmic.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"89f06f40-e6cd-11e8-93f0-a94cde6f34a7-KF2_Logo.5b251745.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/89f06f40-e6cd-11e8-93f0-a94cde6f34a7-KF2_Logo.5b251745.png","imgix_url":"https://imgix.cosmicjs.com/89f06f40-e6cd-11e8-93f0-a94cde6f34a7-KF2_Logo.5b251745.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-11-12T22:47:43.586Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-11-13T14:43:47.754Z"}]},{"children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"cross-platform-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"react-native-twitter-clone","type":"text","required":false}]}],"type":"repeater","title":"App Slugs","key":"app_slugs","id":"W7yjsqRxnn","value":"cross-platform-blog","repeater_fields":"\"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\"\""},{"children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"imgix-editor","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"export-to-csv","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"mux-videos","type":"text","required":false}]}],"type":"repeater","title":"Extension Slugs","key":"extension_slugs","id":"H83sPIFr6X","value":"imgix-editor","repeater_fields":"\"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\"\""},{"children":null,"type":"html-textarea","title":"Testimonial","key":"testimonial","id":"JZvZibYtnF","value":"<p>&quot;It is refreshing to use an API-first CMS, rather than trying to integrate with a complex, monolithic system and adapt it to our specific use case.&rdquo;</p>"},{"children":null,"type":"text","title":"Testimonial Credit","key":"testimonial_credit","id":"NHFqLiTjlz","value":"Jesse Macnish, Chief Technology Officer at Plato Chat"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created":"2019-07-08T15:03:43.051Z","created_at":"2019-07-08T15:03:43.051Z","modified_at":"2020-08-10T14:05:12.245Z","status":"published","locale":null,"published_at":"2020-05-06T05:37:13.727Z","modified_by":"5357ef811693be2118000001","publish_at":null,"order":8,"unpublish_at":null,"metadata":{"solution_name":"Native Apps","image":{"url":"https://cdn.cosmicjs.com/633ad600-9dc1-11e9-a5b4-e5df9f8049d3-Plato.png","imgix_url":"https://imgix.cosmicjs.com/633ad600-9dc1-11e9-a5b4-e5df9f8049d3-Plato.png"},"case_studies":[{"_id":"5ade6e0e2b218820ec24bff1","slug":"medical-realities-delivers-vr-surgical-content","title":"Medical Realities Delivers VR Surgical Content","content":"<p>The <a href=\"https://www.medicalrealities.com\" rel=\"noopener noreferrer\" target=\"_blank\">Medical Realties</a> Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/5dc112a0-5aa8-11e8-a7f7-e17cbb39f395-ice_screenshot_20180518-092612.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Medical Realities team needed a way for educators (non-technical editors) to manage content that could be served to VR headsets for consumption by trainees, so they chose Cosmic to manage and deliver their content from the cloud through an API.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-10999922_465521620265848_6799915322872806436_o.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily spin up content models that would allow our non-technical editors to manage the most sophisticated medical VR content out there. Our developers were equipped with robust Docs and Example Apps to get them started and were able to use the bleeding-edge frameworks necessary to run Virtual Reality.&quot;</p><p><cite>&mdash; Joe Marritt, Lead Web Developer&nbsp;</cite></p></blockquote>","metafields":[{"value":"Medical Realities","key":"company","title":"Company","type":"text","children":null},{"value":"Healthcare and Virtual Reality ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"The Medical Realties Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","imgix_url":"https://imgix.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-04-23T23:36:46.885Z","created_by":"5716b504e9c686d006000073","created":"2018-04-23T23:36:46.885Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-05-18T17:07:50.800Z","metadata":{"company":"Medical Realities","industry_type":"Healthcare and Virtual Reality ","teaser":"The Medical Realties Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application. \n","logo":{"url":"https://cdn.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","imgix_url":"https://imgix.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png"}}},{"_id":"5bd889bf80b80325461575c5","slug":"plato-delivers-mobile-news-feed-content-with-cosmic-js","title":"Plato Delivers Mobile News Feed Content with Cosmic","content":"<p dir=\"ltr\">Plato&#39;s mission is to bring people together through meaningful &amp; social games. <a href=\"http://www.platoapp.com\" rel=\"noopener noreferrer\" target=\"_blank\">Plato</a> combines chat &amp; games seamlessly, as the first messenger built from the ground up to support full multiplayer games. With a team comprised of Yahoo and gaming veterans plus backing from WhatsApp, Plato is available now on iOS &amp; Android.<br><br></p><p><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b09c33a0-dc63-11e8-a63d-c7054455c7d9-ice_screenshot_20181030-114842.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">Plato had a home-built CMS that, between operational costs and the engineering salaries to maintain it, was costing far too much. The team decided to replace their internal system with Cosmic to allow their developers to build new content models when they need to while empowering editors to manage content without bottlenecking the development team.&nbsp;</p><p dir=\"ltr\">Plato&#39;s new tech stack is Golang based and hosted on AWS. Plato&#39;s mobile clients, written in Swift and Kotlin, access their news feed content, which is ATOM Syndication Format. The application uses the Cosmic REST API to pull articles and package them into an ATOM-compliant feed.&nbsp;</p><p dir=\"ltr\"><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/42e9ed20-dc63-11e8-9019-332e53831a9a-14963156_1599170143430300_6292826317590698217_n.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;It is refreshing to use an API-first CMS, rather than trying to integrate with a complex, monolithic system and adapt it to our specific use case.&rdquo;</p><p><cite>&mdash; Jesse Macnish, Chief Technology Officer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Plato","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Plato's mission is to bring people together through meaningful & social games. Plato combines chat & games seamlessly, as the first messenger built from the ground up to support full multiplayer games. With a team comprised of Yahoo and gaming veterans plus backing from WhatsApp, Plato is available now on iOS & Android.\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-30T16:41:35.346Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-01-08T23:23:29.527Z","metadata":{"company":"Plato","industry_type":"Gaming ","teaser":"Plato's mission is to bring people together through meaningful & social games. Plato combines chat & games seamlessly, as the first messenger built from the ground up to support full multiplayer games. With a team comprised of Yahoo and gaming veterans plus backing from WhatsApp, Plato is available now on iOS & Android.\n\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg"}}},{"_id":"5bea030f3ca4d02ee5b4abbd","slug":"killing-floor-2-launches-twisted-christmas-seasons-beatings","title":"Killing Floor 2 Launches Twisted Christmas: Season's Beatings","content":"<p dir=\"ltr\"><a href=\"http://www.tripwireinteractive.com\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a> recently launched its corporate website on Cosmic and can now easily manage microsite content for each game via a dedicated studio manager as its content creator. Killing Floor 2 is one of the studio&#39;s most popular games and incorporates seasonal promotions associated with its product release schedule.&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/6c590e60-e6cd-11e8-a2b5-d3e39a574612-ice_screenshot_20181112-133358.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><a href=\"http://twistedchristmas2018.killingfloor2.com\" rel=\"noopener noreferrer\" target=\"_blank\">Twisted Christmas</a>, a seasonal campaign designed to promote Killing Floor 2, has an &quot;Advent Calendar&quot; that debuts a new piece of content everyday leading up to Killing Floor 2&#39;s release. The team at Tripwire Interactive was able to build their application and create their marketing landing page easily using Cosmic. Using the Scheduled Publishing feature, they created all of the content for the countdown and set each Object to publish at its respective date. Now they&#39;re free to work on other projects knowing their content is publishing on schedule. <a href=\"https://cosmicjs.com/case-studies/tripwire-interactive-builds-a-react-corporate-website\" rel=\"noopener noreferrer\" target=\"_blank\">Read more</a> about how Tripwire Interactive builds apps faster using Cosmic.</p><p dir=\"ltr\"><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team\r\nhas been enjoying the ease of use with the new system.&quot;</p><p><cite>&mdash; Owen Liversidge, Lead Developer</cite></p></blockquote><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/5a608800-e6cd-11e8-97d3-11ffe223301f-ezgif-4-10b62f50c536.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"Killing Floor 2","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Twisted Christmas, a seasonal campaign designed to promote Killing Floor 2, has an \"Advent Calendar\" that debuts a new piece of content everyday leading up to Killing Floor 2's release. The team at Tripwire Interactive was able to build their application and create their marketing landing page easily using Cosmic. Using the Scheduled Publishing feature, they created all of the content for the countdown and set each Object to publish at its respective date. Now they're free to work on other projects knowing their content is publishing on schedule. Read more about how Tripwire Interactive builds apps faster using Cosmic.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"89f06f40-e6cd-11e8-93f0-a94cde6f34a7-KF2_Logo.5b251745.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/89f06f40-e6cd-11e8-93f0-a94cde6f34a7-KF2_Logo.5b251745.png","imgix_url":"https://imgix.cosmicjs.com/89f06f40-e6cd-11e8-93f0-a94cde6f34a7-KF2_Logo.5b251745.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-11-12T22:47:43.586Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-11-13T14:43:47.754Z","metadata":{"company":"Killing Floor 2","industry_type":"Gaming","teaser":"Twisted Christmas, a seasonal campaign designed to promote Killing Floor 2, has an \"Advent Calendar\" that debuts a new piece of content everyday leading up to Killing Floor 2's release. The team at Tripwire Interactive was able to build their application and create their marketing landing page easily using Cosmic. Using the Scheduled Publishing feature, they created all of the content for the countdown and set each Object to publish at its respective date. Now they're free to work on other projects knowing their content is publishing on schedule. Read more about how Tripwire Interactive builds apps faster using Cosmic.\n","logo":{"url":"https://cdn.cosmicjs.com/89f06f40-e6cd-11e8-93f0-a94cde6f34a7-KF2_Logo.5b251745.png","imgix_url":"https://imgix.cosmicjs.com/89f06f40-e6cd-11e8-93f0-a94cde6f34a7-KF2_Logo.5b251745.png"}}}],"app_slugs":[{"slug":"cross-platform-blog"},{"slug":"react-native-twitter-clone"}],"extension_slugs":[{"slug":"imgix-editor"},{"slug":"export-to-csv"},{"slug":"mux-videos"}],"testimonial":"<p>&quot;It is refreshing to use an API-first CMS, rather than trying to integrate with a complex, monolithic system and adapt it to our specific use case.&rdquo;</p>","testimonial_credit":"Jesse Macnish, Chief Technology Officer at Plato Chat"}},{"_id":"57a93b7f34d05c0c23000003","order":8,"slug":"partners","title":"Partners","content":"<br>","metafields":[{"value":"<p>Whether you are a designer, developer, consulting firm or agency, there are ways to partner with us to build slick websites &amp; apps, and share in the rewards. Browse the Cosmic JS Partner Programs below.&nbsp;<br></p>","key":"intro_text","title":"Intro Text","type":"html-textarea","children":null},{"value":"<h3 style=\"font-family: &quot;Open Sans&quot;, sans-serif; color: rgb(0, 0, 0);\">Developer Program</h3><div><span class=\" author-d-4z65zz66zl57z75zyiz66zfr2fz87zwz89znuiz90zz77zz79zb12uz122zz79z5z75zz84zvz86zz122zz84z4ik4z69zz72zk9p0z82zz89zi\">No matter what your preferred programming language, we’re interested in the applications you build becoming new content-ready apps in our app store. You’ll take home&nbsp;</span><span class=\" author-d-4z65zz66zl57z75zyiz66zfr2fz87zwz89znujbz80zz82zz81zocz82z1nz78zz72zoz80zr0kaz83z20yi6z83z3z71zlz81zz80z\">7</span><span class=\" author-d-4z65zz66zl57z75zyiz66zfr2fz87zwz89znuiz90zz77zz79zb12uz122zz79z5z75zz84zvz86zz122zz84z4ik4z69zz72zk9p0z82zz89zi\">0% of the price of the purchased app. &nbsp;Check out some examples of possible payouts for you.</span></div><div><span class=\" author-d-4z65zz66zl57z75zyiz66zfr2fz87zwz89znuiz90zz77zz79zb12uz122zz79z5z75zz84zvz86zz122zz84z4ik4z69zz72zk9p0z82zz89zi\"><br></span></div><table class=\"table\"><tbody><tr><td style=\"line-height: 1.42857;\"><span style=\"font-weight: 700;\">Installs</span></td><td style=\"line-height: 1.42857;\"><span style=\"font-weight: 700;\">App Price</span></td><td style=\"line-height: 1.42857;\"><span style=\"font-weight: 700;\">Your Payout</span></td></tr><tr><td style=\"line-height: 1.42857;\">1000</td><td style=\"line-height: 1.42857;\">$99</td><td style=\"line-height: 1.42857;\">$69,300<br></td></tr><tr><td style=\"line-height: 1.42857;\">100</td><td style=\"line-height: 1.42857;\">$199</td><td style=\"line-height: 1.42857;\">$13,930</td></tr><tr><td style=\"line-height: 1.42857;\">50</td><td style=\"line-height: 1.42857;\">$299</td><td style=\"line-height: 1.42857;\">$10,465<br></td></tr></tbody></table>","key":"developer_program","title":"Developer Program","type":"html-textarea","children":null},{"value":"<h3 style=\"font-family: &quot;Open Sans&quot;, sans-serif; color: rgb(0, 0, 0);\">Agency + Consulting Program</h3><div><span class=\" author-d-4z65zz66zl57z75zyiz66zfr2fz87zwz89znuiz90zz77zz79zb12uz122zz79z5z75zz84zvz86zz122zz84z4ik4z69zz72zk9p0z82zz89zi\">You’re going to save a lot of time and money using Cosmic JS anyway, but we realize the tech recommendations you make reflect your work, so to say thanks, we’ve formed the agency partner program. Set up admin buckets and publish content on behalf of your clients, and let them contribute as well! You can split billing among buckets, by accounts, really however you’d like! We’ll take 15% off of the cost of the plan to say \"thanks for your support\". Below are examples of payouts based on different monthly tier pricing.</span></div><div><span class=\" author-d-4z65zz66zl57z75zyiz66zfr2fz87zwz89znuiz90zz77zz79zb12uz122zz79z5z75zz84zvz86zz122zz84z4ik4z69zz72zk9p0z82zz89zi\"><br></span></div><div><span class=\" author-d-4z65zz66zl57z75zyiz66zfr2fz87zwz89znuiz90zz77zz79zb12uz122zz79z5z75zz84zvz86zz122zz84z4ik4z69zz72zk9p0z82zz89zi\"><table class=\"table\">\n        <tbody>\n            <tr>\n                <td style=\"line-height: 1.42857;\"><span style=\"font-weight: 700;\">Monthly Bucket Plan</span></td>\n                <td style=\"line-height: 1.42857;\"><span style=\"font-weight: 700;\">Monthly Retail Price Each</span></td>\n                <td style=\"line-height: 1.42857;\"><span style=\"font-weight: 700;\">Monthly Credit Accrual</span></td>\n            </tr>\n            <tr>\n                <td style=\"line-height: 1.42857;\">300 Small&nbsp;<br></td>\n                <td style=\"line-height: 1.42857;\">$9</td>\n                <td style=\"line-height: 1.42857;\">$405</td>\n            </tr>\n            <tr>\n                <td style=\"line-height: 1.42857;\">100 Medium</td>\n                <td style=\"line-height: 1.42857;\">$49&nbsp;</td>\n                <td style=\"line-height: 1.42857;\">$735</td>\n            </tr>\n            <tr>\n                <td style=\"line-height: 1.42857;\">50 Large</td>\n                <td style=\"line-height: 1.42857;\">$99</td>\n                <td style=\"line-height: 1.42857;\">$742.50<br></td>\n            </tr>\n        </tbody>\n    </table></span></div>","key":"agency_program","title":"Agency Program","type":"html-textarea","children":null},{"value":"<h3>Affiliate Program</h3><p>Do you have an audience that can benefit from signing up with Cosmic JS?  Whether you are running a developer blog, are very active on social media, or would just like to send some friends a link, we make it easy for you to spread the good word about Cosmic JS and benefit in the process.  By signing up as an Affiliate Partner you will receive a custom link that you can share with your audience and friends.  When the user signs up and upgrades to a paid account, you will receive a $10 credit applied to your account.</p>","key":"affiliate_program","title":"Affiliate Program","type":"html-textarea","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"pages","created":"2016-08-09T02:10:07.868Z","status":"published","modified":"2016-08-17T23:04:24.705Z","modified_at":"2016-09-30T15:21:31.750Z","modified_by":"5357ef811693be2118000001","metadata":{"intro_text":"<p>Whether you are a designer, developer, consulting firm or agency, there are ways to partner with us to build slick websites &amp; apps, and share in the rewards. Browse the Cosmic JS Partner Programs below.&nbsp;<br></p>","developer_program":"<h3 style=\"font-family: &quot;Open Sans&quot;, sans-serif; color: rgb(0, 0, 0);\">Developer Program</h3><div><span class=\" author-d-4z65zz66zl57z75zyiz66zfr2fz87zwz89znuiz90zz77zz79zb12uz122zz79z5z75zz84zvz86zz122zz84z4ik4z69zz72zk9p0z82zz89zi\">No matter what your preferred programming language, we’re interested in the applications you build becoming new content-ready apps in our app store. You’ll take home&nbsp;</span><span class=\" author-d-4z65zz66zl57z75zyiz66zfr2fz87zwz89znujbz80zz82zz81zocz82z1nz78zz72zoz80zr0kaz83z20yi6z83z3z71zlz81zz80z\">7</span><span class=\" author-d-4z65zz66zl57z75zyiz66zfr2fz87zwz89znuiz90zz77zz79zb12uz122zz79z5z75zz84zvz86zz122zz84z4ik4z69zz72zk9p0z82zz89zi\">0% of the price of the purchased app. &nbsp;Check out some examples of possible payouts for you.</span></div><div><span class=\" author-d-4z65zz66zl57z75zyiz66zfr2fz87zwz89znuiz90zz77zz79zb12uz122zz79z5z75zz84zvz86zz122zz84z4ik4z69zz72zk9p0z82zz89zi\"><br></span></div><table class=\"table\"><tbody><tr><td style=\"line-height: 1.42857;\"><span style=\"font-weight: 700;\">Installs</span></td><td style=\"line-height: 1.42857;\"><span style=\"font-weight: 700;\">App Price</span></td><td style=\"line-height: 1.42857;\"><span style=\"font-weight: 700;\">Your Payout</span></td></tr><tr><td style=\"line-height: 1.42857;\">1000</td><td style=\"line-height: 1.42857;\">$99</td><td style=\"line-height: 1.42857;\">$69,300<br></td></tr><tr><td style=\"line-height: 1.42857;\">100</td><td style=\"line-height: 1.42857;\">$199</td><td style=\"line-height: 1.42857;\">$13,930</td></tr><tr><td style=\"line-height: 1.42857;\">50</td><td style=\"line-height: 1.42857;\">$299</td><td style=\"line-height: 1.42857;\">$10,465<br></td></tr></tbody></table>","agency_program":"<h3 style=\"font-family: &quot;Open Sans&quot;, sans-serif; color: rgb(0, 0, 0);\">Agency + Consulting Program</h3><div><span class=\" author-d-4z65zz66zl57z75zyiz66zfr2fz87zwz89znuiz90zz77zz79zb12uz122zz79z5z75zz84zvz86zz122zz84z4ik4z69zz72zk9p0z82zz89zi\">You’re going to save a lot of time and money using Cosmic JS anyway, but we realize the tech recommendations you make reflect your work, so to say thanks, we’ve formed the agency partner program. Set up admin buckets and publish content on behalf of your clients, and let them contribute as well! You can split billing among buckets, by accounts, really however you’d like! We’ll take 15% off of the cost of the plan to say \"thanks for your support\". Below are examples of payouts based on different monthly tier pricing.</span></div><div><span class=\" author-d-4z65zz66zl57z75zyiz66zfr2fz87zwz89znuiz90zz77zz79zb12uz122zz79z5z75zz84zvz86zz122zz84z4ik4z69zz72zk9p0z82zz89zi\"><br></span></div><div><span class=\" author-d-4z65zz66zl57z75zyiz66zfr2fz87zwz89znuiz90zz77zz79zb12uz122zz79z5z75zz84zvz86zz122zz84z4ik4z69zz72zk9p0z82zz89zi\"><table class=\"table\">\n        <tbody>\n            <tr>\n                <td style=\"line-height: 1.42857;\"><span style=\"font-weight: 700;\">Monthly Bucket Plan</span></td>\n                <td style=\"line-height: 1.42857;\"><span style=\"font-weight: 700;\">Monthly Retail Price Each</span></td>\n                <td style=\"line-height: 1.42857;\"><span style=\"font-weight: 700;\">Monthly Credit Accrual</span></td>\n            </tr>\n            <tr>\n                <td style=\"line-height: 1.42857;\">300 Small&nbsp;<br></td>\n                <td style=\"line-height: 1.42857;\">$9</td>\n                <td style=\"line-height: 1.42857;\">$405</td>\n            </tr>\n            <tr>\n                <td style=\"line-height: 1.42857;\">100 Medium</td>\n                <td style=\"line-height: 1.42857;\">$49&nbsp;</td>\n                <td style=\"line-height: 1.42857;\">$735</td>\n            </tr>\n            <tr>\n                <td style=\"line-height: 1.42857;\">50 Large</td>\n                <td style=\"line-height: 1.42857;\">$99</td>\n                <td style=\"line-height: 1.42857;\">$742.50<br></td>\n            </tr>\n        </tbody>\n    </table></span></div>","affiliate_program":"<h3>Affiliate Program</h3><p>Do you have an audience that can benefit from signing up with Cosmic JS?  Whether you are running a developer blog, are very active on social media, or would just like to send some friends a link, we make it easy for you to spread the good word about Cosmic JS and benefit in the process.  By signing up as an Affiliate Partner you will receive a custom link that you can share with your audience and friends.  When the user signs up and upgrades to a paid account, you will receive a $10 credit applied to your account.</p>"}},{"_id":"6297b10fefc57200099ac551","order":9,"slug":"new-docs-examples","title":"New docs examples","content":"<p>We&#39;ve added <a href=\"https://docs.cosmicjs.com/examples/basic-queries\">new examples</a> to the Cosmic documentation to help you learn common Cosmic API methods and use cases. The new examples feature simple copy + paste code for Node.js, cURL, GraphQL, and the Cosmic CLI.</p><p>You can run the following code as is or add your Bucket access keys to connect to your Bucket content. Learn all of the available examples and follow along with the code examples below which use the <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic NPM module</a>.</p><p><br></p><p><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/811ea110-e297-11ec-9f15-f79bd5847752-docs-examples.mp4\" loop=\"\" muted=\"\" playsinline=\"\" style=\"width:100%;\">Your browser does not support HTML5 video.</video></span></p><p style=\"text-align: center;\">Go to the <a href=\"https://docs.cosmicjs.com/examples/basic-queries\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic docs&nbsp;</a>to check out the new examples.</p><h3><br></h3><h3><strong>Setup &amp; running Node.js</strong></h3><p>To run the following code examples, make sure you have <a href=\"https://nodejs.org/en/download/\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js installed</a> on your machine. Then run the following setup commands in your terminal to make the Cosmic NPM module available in a new Node.js project:</p><pre>mkdir cosmic-example\r\ncd cosmic-example\r\nyarn add cosmicjs</pre><p>Add any of the code examples below to an <code>index.js</code> file and run node to see the results:</p><pre>node index.js</pre><h3><br></h3><h3><strong>Basic queries</strong></h3><p>The <a href=\"https://docs.cosmicjs.com/examples/basic-queries\">basic queries</a> show you how to get a list of Objects in your Bucket by Object Type as well as getting a single Object in your Bucket by Object slug.</p><p>Get Objects by type:</p><div class=\"fr-embedly           \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/5de0961d810a82cf9282482854ac5395' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/5de0961d810a82cf9282482854ac5395\" class=\"embedly-card\"></a></div><p>Get single Object by slug:</p><div class=\"fr-embedly         \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/30217c0955585ae0affb7dc4878869ae' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/30217c0955585ae0affb7dc4878869ae\" class=\"embedly-card\"></a></div><h3><strong>Advanced queries</strong></h3><p>The <a href=\"https://docs.cosmicjs.com/examples/advanced-queries\">advanced queries</a> show you some of the capabilities to get content by more detailed search options such as metadata values, <code>$gte</code> (greater than or equal to), <code>$lte</code>(less than or equal to), <code>$ne</code> (not equal to), and more.</p><p>Search Objects by metadata value:</p><div class=\"fr-embedly        \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/b3c236fac796cb46779e72cd0f741939' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/b3c236fac796cb46779e72cd0f741939\" class=\"embedly-card\"></a></div><p>Search Objects by metadata number value less than or equal to using <code>$lte</code>:</p><div class=\"fr-embedly        \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/3ecf80f412201ec2931b226d3365a220' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/3ecf80f412201ec2931b226d3365a220\" class=\"embedly-card\"></a></div><p>Search Objects not equal to metadata value using <code>$ne</code>:</p><div class=\"fr-embedly        \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/720251f08bea3ce9bb82987ed26caeed' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/720251f08bea3ce9bb82987ed26caeed\" class=\"embedly-card\"></a></div><p>Check out more examples of advanced queries <a href=\"https://docs.cosmicjs.com/examples/advanced-queries\">in the docs</a>.</p><h3><br><strong>Other Examples</strong></h3><p>Other examples include <a href=\"https://docs.cosmicjs.com/examples/add-object\">adding a new Object</a> and <a href=\"https://docs.cosmicjs.com/examples/add-media#add-media-using-react-dropzone\">uploading media</a> using React Dropzone. &nbsp;Copy + paste the code, add your Bucket access keys, and run the code to learn how to add content to your Cosmic Bucket.</p><p><br></p><p>We hope you enjoy these additions to our extensive documentation to help you better implement Cosmic-powered content into your websites and apps. Check out the <a href=\"https://docs.cosmicjs.com/examples/basic-queries\">Cosmic docs examples section</a> and let us know what you think!</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"P9ObpddZrW","value":"2022-06-07"},{"children":null,"type":"object","title":"Author","key":"author","id":"NHPoJDULTG","value":"5ffa1d1e0046b0000799cb7b","object_type":"authors","object":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"KIOF4zUS7p","value":"","url":null,"imgix_url":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2022-06-01T18:33:51.901Z","created_by":"5357ef811693be2118000001","modified_at":"2022-06-07T16:52:39.424Z","created":"2022-06-01T18:33:51.901Z","status":"published","thumbnail":"","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2022-06-07T16:52:39.424Z","metadata":{"published_date":"2022-06-07","author":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}}},"featured_image":{"url":null,"imgix_url":null}}},{"_id":"5d4985bc171a3305b388670a","order":9,"slug":"cms-software-for-company-websites","title":"CMS Software for Company Websites","content":"<p>Cosmic provides flexible CMS Software for developers and content creators managing content for company websites. Companies manage content using Cosmic&#39;s CMS Software because the Dashboard is simple and intuitive to manage content, workflows and team members.&nbsp;</p><p>Teams using CMS Software to power blog content don&#39;t have to maintain their own server and content management system. Teams are able to focus on building modern apps and websites, instead of maintaining infrastructure. &nbsp;</p><h3><br>What is Headless CMS Software?</h3><p>Headless CMS Software works by providing non-technical editors with a Dashboard UI to model, create and publish content while providing developers with API tools and resources to integrate content with any website or app. By decoupling content from code, teams create a central content repository that can power all of their content-powered applications.&nbsp;</p>","metafields":[{"children":null,"type":"text","title":"Solution Name","key":"solution_name","id":"U02jcO67T6","value":"CMS Software for Company Websites"},{"children":null,"type":"file","title":"Image","key":"image","id":"SyWXpuYiK0","value":"b6b99c30-b851-11e9-9bf7-1514bfd4b10b-caed7450-9dbd-11e9-a5b4-e5df9f8049d3-Company-Websites.png","url":"https://cdn.cosmicjs.com/b6b99c30-b851-11e9-9bf7-1514bfd4b10b-caed7450-9dbd-11e9-a5b4-e5df9f8049d3-Company-Websites.png","imgix_url":"https://imgix.cosmicjs.com/b6b99c30-b851-11e9-9bf7-1514bfd4b10b-caed7450-9dbd-11e9-a5b4-e5df9f8049d3-Company-Websites.png"},{"children":null,"type":"objects","title":"Case Studies","key":"case_studies","id":"qQFLzA3hTZ","value":"5bd206599dca8d10e941b69b,5b86a2c6016461100076e5c7,5bd88cc2dcf8c4248f3ccc4b","object_type":"case-studies","objects":[{"_id":"5bd206599dca8d10e941b69b","slug":"derive-systems-runs-on-cosmic-js","title":"Derive Systems runs on Cosmic","content":"<p dir=\"ltr\"><a href=\"https://derivesystems.com\" rel=\"noopener noreferrer\" target=\"_blank\">Derive Systems</a>  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. </p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/3d484f50-d881-11e8-a05d-ade53a62d98b-Derive Systems.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">The team at Derive Systems was in search of a headless CMS that would give their developers flexibility out-of-the-box while enabling their content managers to manage content in a familiar and modern CMS Dashboard. They chose Cosmic due to its easy content modeling tools for their Blog, Press, About and Team Sections. Derive now runs a Next.js, React and Express framework that utilizes the Cosmic GraphQL API to deliver its content.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/ea968040-d882-11e8-8793-13fe540ddec9-Derive Systems GIF.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&ldquo;Leveraging the Cosmic GraphQL API allows for easy updates to our news and blog, while keeping payloads small and fast. Integration with Cosmic could not be easier thanks to their great support. We look forward to developing more features on the platform.&rdquo;</p><br><p><cite>&mdash; Dustin Brink, Front End Developer at Derive Systems&nbsp;</cite></p></blockquote>","metafields":[{"value":"Derive Systems","key":"company","title":"Company","type":"text","children":null},{"value":"Automotive","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Derive Systems  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","imgix_url":"https://imgix.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-25T18:07:21.426Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-11-15T14:51:19.007Z"},{"_id":"5b86a2c6016461100076e5c7","slug":"consolidating-the-content-chaos-tac-switches-from-wordpress-to-cosmic-js","title":"Consolidating the Content Chaos: TAC Switches from WordPress to Cosmic","content":"<p>TAC - <a href=\"https://thearnoldcos.com\" rel=\"noopener noreferrer\" target=\"_blank\">The Arnold Companies</a> is among the largest fuel wholesalers and aviation service providers in the country. Steady growth, positive financial results and a diverse industry base consistently make TAC one of the top private companies in the US. TAC is made up of many separate brands under one corporate identity, including <a href=\"https://thearnoldcos.com/tac-energy\" rel=\"noopener noreferrer\" target=\"_blank\">TAC Energy</a>, <a href=\"https://thearnoldcos.com/tac-air\" rel=\"noopener noreferrer\" target=\"_blank\">TAC Air</a> and <a href=\"https://thearnoldcos.com/keystone-aviation\" rel=\"noopener noreferrer\" target=\"_blank\">Keystone Aviation</a>.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1edc4420-03d5-11e9-b2e6-ef985cd5a622-TAC_Air.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>With TAC&#39;s old website built as stand-alone sites that linked to each other on a WordPress foundation, the user experience was over-complicated and required too many steps for visitors to find what they were looking for. Being WordPress-based, it did not allow for clear information architecture to promote the different business lines within the portfolio.&nbsp;</p><p>Through a structured RFP process to identify a partner in re-thinking the customer experience and content management system, interactive agency <a href=\"https://simplemedia.co\" rel=\"noopener noreferrer\" target=\"_blank\">Simple Media</a> and Cosmic were selected. Other platform options included WordPress, Drupal, and Joomla.&nbsp;</p><p>Focused on building with a mobile-first approach and consolidating the chaos of the existing number of brand sites to bring harmony to the four brands and ease-of-use in content management, TAC found an outstanding and simple solution in Cosmic.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/28c0eb80-03d5-11e9-b2e6-ef985cd5a622-TAC_Air2.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>To learn more about the development, Brandon Reid, Lead Developer on the project breaks down the stack:&nbsp;</p><p><strong>Development Team:</strong> &quot;TAC&rsquo;s backend is powered by Node, Next.js, and Express. Next.js is used for server side rendering capabilities for SEO optimization as well as site routing. Next.js also makes it easy to integrate with Babel and Webpack since they are built right in. The team used Next.js routing API to rendering page templates for pages that have the same design layouts. TAC&rsquo;s frontend is powered by React.js and the world&#39;s most popular react UI framework, Material UI. In order to use Material UI with SSR, the team had to wrap the site in a JSSProvider and use CSSBaseline. For development they used Eslint as a linter for a cleaner and more consistent codebase.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/9bc8cba0-03e6-11e9-9a9a-9b696b7d5c75-Fuel-Tanker-Truck.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Since TAC uses ES6 JavaScript, the team had to also implement a very small amount of polyfill to transpile ES6 to ES5 in order for the site to work with IE11. Some notable node modules used were:&nbsp;</p><ul><li>React-Image-Gallery for the image galleries across the site</li><li>React-Masonry-Component for the newsroom</li><li>Fetch for API requests</li><li>For email services/API the team used Nodemailer and Mailgun</li></ul><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7c547000-b079-11e8-966b-171c4c72e338-IMG_4405.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>TAC&#39;s development team started building the site by using Cosmic&rsquo;s React Starter, which helped them get jump-started right away. Building TAC started with implementing all globals for the site (Header, Footer, Favicon, etc), so the developers quickly created some JavaScript request functions to pull data from the Cosmic Buckets using Cosmic&rsquo;s Node API. The team added those global components to the sites main _app layout, so every page would be wrapped and rendered with those globals. From there they analyzed what pages would have reusable components across multiple pages or the site, and created component views for those pages based off their analysis.&nbsp;</p><p>TAC was then able to efficiently knock out page designs and implement object types in the Cosmic bucket on the fly. As TAC got closer to site launch, they noticed compatibility issues with IE11 and had to come up with a solution. At first, they were going to do a browser sniff in the codebase to display something that would work on IE. Instead, the team implemented Babel and some polyfills to solve their &nbsp;compatibility issues.&quot;</p><p style=\"text-align: center;\"><br></p><p><br></p><p style=\"text-align: center;\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7d6520b0-b04d-11e8-8760-cbfd96ceee1a-ezgif-4-42d2daea45.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&quot;Our goal in this project was not to reinvent the brands, but to simplify the communication and process for website content management. Cosmic has allowed us to become current in our presentation and relevant in our content push. Plus, the site is easier to use for visitors and staff alike.&quot;</p><p><cite>&mdash; Tad Perryman, VP of Marketing, TAC - The Arnold Companies</cite></p></blockquote>","metafields":[{"value":"The Arnold Companies","key":"company","title":"Company","type":"text","children":null},{"value":"Energy / Aviation","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"TAC - The Arnold Companies is among the largest fuel wholesalers and aviation service providers in the country. Steady growth, positive financial results and a diverse industry base consistently make TAC one of the top private companies in the US. TAC is made up of many separate brands under one corporate identity, including TAC Energy, TAC Air and Keystone Aviation. \n\n\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg","imgix_url":"https://imgix.cosmicjs.com/9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-01T22:26:36.367Z","created_by":"5716b504e9c686d006000073","created":"2018-08-29T13:42:30.982Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-12-20T14:40:21.379Z"},{"_id":"5bd88cc2dcf8c4248f3ccc4b","slug":"tripwire-interactive-builds-a-react-corporate-website","title":"Tripwire Interactive Builds a React Corporate Website","content":"<p dir=\"ltr\">Tripwire Interactive is an entertainment software developer and publisher founded in 2005 by the award-winning mod team and winners of the 2004 edition of the &ldquo;$1,000,000 Make Something Unreal&rdquo; competition.</p><p dir=\"ltr\"><br><img src=\"https://cosmic-s3.imgix.net/1e7ac570-e363-11e8-8e9f-c7fa3cdb2209-Tripwire.png?w=1200\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"><br></p><p dir=\"ltr\">Gamers want games that grab their attention and will keep them coming back for more. <a href=\"https://www.tripwireinteractive.com/#/#top\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a> has been producing those types of games since the first Red Orchestra mod that won the &quot;Make Something Unreal&quot; competition in 2004. Since then Tripwire has won numerous Multiplayer and FPS Game of the Year awards from top editorial sites and millions have played a Red Orchestra or Killing Floor game, with an average play time of over 40 hours, per player, per game!&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://cosmic-s3.imgix.net/ec4f9940-dc64-11e8-9094-a112ce16fea9-40953819_2090843480937681_5517411053975109632_o.jpg?w=1200&quot;\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"><br></p><p dir=\"ltr\">Historically using an Umbraco system, The Tripwire Interactive team needed an easy way for their marketers to maintain marketing website content for their games&#39; parent brand. Each new game needed a dedicated landing page with marketing content. Blog,\r\nCareer and Press feeds needed to be managed by the marketing team without bottlenecking the developers. The Tripwire Interactive team chose Cosmic as their dynamic content management solution as they built their new corporate website on a modern React\r\nstack.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team\r\nhas been enjoying the ease of use with the new system.&quot;</p><p><cite>&mdash; Owen Liversidge, Lead Developer</cite></p></blockquote><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/297454e0-e387-11e8-89c3-0b430965f348-ezgif-4-5e5da2b90b13.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"Tripwire Interactive","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Gamers want games that grab their attention and will keep them coming back for more. Tripwire Interactive has been producing those types of games since the first Red Orchestra mod that won the \"Make Something Unreal\" competition in 2004. Since then Tripwire has won numerous Multiplayer and FPS Game of the Year awards from top editorial sites and millions have played a Red Orchestra or Killing Floor game, with an average play time of over 40 hours, per player, per game! \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-30T16:54:26.538Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-11-08T20:12:40.566Z"}]},{"children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"simple-react-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"conference-website","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"gatsby-agency-portfolio","type":"text","required":false}]}],"type":"repeater","title":"App Slugs","key":"app_slugs","id":"LBAeql2XWM","value":"simple-react-blog","repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}]},{"children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"wordpress-importer","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"export-to-csv","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"algolia-search","type":"text","required":false}]}],"type":"repeater","title":"Extension SLugs","key":"extension_slugs","id":"hTbR0IThu4","value":"wordpress-importer","repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}]},{"children":null,"type":"textarea","title":"Testimonial","key":"testimonial","id":"pnyX7ReSPS","value":"“Leveraging the Cosmic GraphQL API allows for easy updates to our news and blog, while keeping payloads small and fast. Integration with Cosmic could not be easier thanks to their great support. We look forward to developing more features on the platform.”"},{"children":null,"type":"text","title":"Testimonial Credit","key":"testimonial_credit","id":"ary4eMgR2a","value":"Dustin Brink, Front End Developer at Derive Systems"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created_at":"2019-08-05T20:18:17.006Z","created_by":"5716b504e9c686d006000073","modified_at":"2020-05-06T05:34:08.396Z","created":"2019-08-06T13:50:52.995Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-05-06T05:34:08.396Z","unpublish_at":null,"metadata":{"solution_name":"CMS Software for Company Websites","image":{"url":"https://cdn.cosmicjs.com/b6b99c30-b851-11e9-9bf7-1514bfd4b10b-caed7450-9dbd-11e9-a5b4-e5df9f8049d3-Company-Websites.png","imgix_url":"https://imgix.cosmicjs.com/b6b99c30-b851-11e9-9bf7-1514bfd4b10b-caed7450-9dbd-11e9-a5b4-e5df9f8049d3-Company-Websites.png"},"case_studies":[{"_id":"5bd206599dca8d10e941b69b","slug":"derive-systems-runs-on-cosmic-js","title":"Derive Systems runs on Cosmic","content":"<p dir=\"ltr\"><a href=\"https://derivesystems.com\" rel=\"noopener noreferrer\" target=\"_blank\">Derive Systems</a>  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. </p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/3d484f50-d881-11e8-a05d-ade53a62d98b-Derive Systems.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">The team at Derive Systems was in search of a headless CMS that would give their developers flexibility out-of-the-box while enabling their content managers to manage content in a familiar and modern CMS Dashboard. They chose Cosmic due to its easy content modeling tools for their Blog, Press, About and Team Sections. Derive now runs a Next.js, React and Express framework that utilizes the Cosmic GraphQL API to deliver its content.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/ea968040-d882-11e8-8793-13fe540ddec9-Derive Systems GIF.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&ldquo;Leveraging the Cosmic GraphQL API allows for easy updates to our news and blog, while keeping payloads small and fast. Integration with Cosmic could not be easier thanks to their great support. We look forward to developing more features on the platform.&rdquo;</p><br><p><cite>&mdash; Dustin Brink, Front End Developer at Derive Systems&nbsp;</cite></p></blockquote>","metafields":[{"value":"Derive Systems","key":"company","title":"Company","type":"text","children":null},{"value":"Automotive","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Derive Systems  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","imgix_url":"https://imgix.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-25T18:07:21.426Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-11-15T14:51:19.007Z","metadata":{"company":"Derive Systems","industry_type":"Automotive","teaser":"Derive Systems  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. \n","logo":{"url":"https://cdn.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","imgix_url":"https://imgix.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg"}}},{"_id":"5b86a2c6016461100076e5c7","slug":"consolidating-the-content-chaos-tac-switches-from-wordpress-to-cosmic-js","title":"Consolidating the Content Chaos: TAC Switches from WordPress to Cosmic","content":"<p>TAC - <a href=\"https://thearnoldcos.com\" rel=\"noopener noreferrer\" target=\"_blank\">The Arnold Companies</a> is among the largest fuel wholesalers and aviation service providers in the country. Steady growth, positive financial results and a diverse industry base consistently make TAC one of the top private companies in the US. TAC is made up of many separate brands under one corporate identity, including <a href=\"https://thearnoldcos.com/tac-energy\" rel=\"noopener noreferrer\" target=\"_blank\">TAC Energy</a>, <a href=\"https://thearnoldcos.com/tac-air\" rel=\"noopener noreferrer\" target=\"_blank\">TAC Air</a> and <a href=\"https://thearnoldcos.com/keystone-aviation\" rel=\"noopener noreferrer\" target=\"_blank\">Keystone Aviation</a>.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1edc4420-03d5-11e9-b2e6-ef985cd5a622-TAC_Air.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>With TAC&#39;s old website built as stand-alone sites that linked to each other on a WordPress foundation, the user experience was over-complicated and required too many steps for visitors to find what they were looking for. Being WordPress-based, it did not allow for clear information architecture to promote the different business lines within the portfolio.&nbsp;</p><p>Through a structured RFP process to identify a partner in re-thinking the customer experience and content management system, interactive agency <a href=\"https://simplemedia.co\" rel=\"noopener noreferrer\" target=\"_blank\">Simple Media</a> and Cosmic were selected. Other platform options included WordPress, Drupal, and Joomla.&nbsp;</p><p>Focused on building with a mobile-first approach and consolidating the chaos of the existing number of brand sites to bring harmony to the four brands and ease-of-use in content management, TAC found an outstanding and simple solution in Cosmic.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/28c0eb80-03d5-11e9-b2e6-ef985cd5a622-TAC_Air2.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>To learn more about the development, Brandon Reid, Lead Developer on the project breaks down the stack:&nbsp;</p><p><strong>Development Team:</strong> &quot;TAC&rsquo;s backend is powered by Node, Next.js, and Express. Next.js is used for server side rendering capabilities for SEO optimization as well as site routing. Next.js also makes it easy to integrate with Babel and Webpack since they are built right in. The team used Next.js routing API to rendering page templates for pages that have the same design layouts. TAC&rsquo;s frontend is powered by React.js and the world&#39;s most popular react UI framework, Material UI. In order to use Material UI with SSR, the team had to wrap the site in a JSSProvider and use CSSBaseline. For development they used Eslint as a linter for a cleaner and more consistent codebase.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/9bc8cba0-03e6-11e9-9a9a-9b696b7d5c75-Fuel-Tanker-Truck.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Since TAC uses ES6 JavaScript, the team had to also implement a very small amount of polyfill to transpile ES6 to ES5 in order for the site to work with IE11. Some notable node modules used were:&nbsp;</p><ul><li>React-Image-Gallery for the image galleries across the site</li><li>React-Masonry-Component for the newsroom</li><li>Fetch for API requests</li><li>For email services/API the team used Nodemailer and Mailgun</li></ul><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7c547000-b079-11e8-966b-171c4c72e338-IMG_4405.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>TAC&#39;s development team started building the site by using Cosmic&rsquo;s React Starter, which helped them get jump-started right away. Building TAC started with implementing all globals for the site (Header, Footer, Favicon, etc), so the developers quickly created some JavaScript request functions to pull data from the Cosmic Buckets using Cosmic&rsquo;s Node API. The team added those global components to the sites main _app layout, so every page would be wrapped and rendered with those globals. From there they analyzed what pages would have reusable components across multiple pages or the site, and created component views for those pages based off their analysis.&nbsp;</p><p>TAC was then able to efficiently knock out page designs and implement object types in the Cosmic bucket on the fly. As TAC got closer to site launch, they noticed compatibility issues with IE11 and had to come up with a solution. At first, they were going to do a browser sniff in the codebase to display something that would work on IE. Instead, the team implemented Babel and some polyfills to solve their &nbsp;compatibility issues.&quot;</p><p style=\"text-align: center;\"><br></p><p><br></p><p style=\"text-align: center;\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7d6520b0-b04d-11e8-8760-cbfd96ceee1a-ezgif-4-42d2daea45.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&quot;Our goal in this project was not to reinvent the brands, but to simplify the communication and process for website content management. Cosmic has allowed us to become current in our presentation and relevant in our content push. Plus, the site is easier to use for visitors and staff alike.&quot;</p><p><cite>&mdash; Tad Perryman, VP of Marketing, TAC - The Arnold Companies</cite></p></blockquote>","metafields":[{"value":"The Arnold Companies","key":"company","title":"Company","type":"text","children":null},{"value":"Energy / Aviation","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"TAC - The Arnold Companies is among the largest fuel wholesalers and aviation service providers in the country. Steady growth, positive financial results and a diverse industry base consistently make TAC one of the top private companies in the US. TAC is made up of many separate brands under one corporate identity, including TAC Energy, TAC Air and Keystone Aviation. \n\n\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg","imgix_url":"https://imgix.cosmicjs.com/9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-01T22:26:36.367Z","created_by":"5716b504e9c686d006000073","created":"2018-08-29T13:42:30.982Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-12-20T14:40:21.379Z","metadata":{"company":"The Arnold Companies","industry_type":"Energy / Aviation","teaser":"TAC - The Arnold Companies is among the largest fuel wholesalers and aviation service providers in the country. Steady growth, positive financial results and a diverse industry base consistently make TAC one of the top private companies in the US. TAC is made up of many separate brands under one corporate identity, including TAC Energy, TAC Air and Keystone Aviation. \n\n\n\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg","imgix_url":"https://imgix.cosmicjs.com/9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg"}}},{"_id":"5bd88cc2dcf8c4248f3ccc4b","slug":"tripwire-interactive-builds-a-react-corporate-website","title":"Tripwire Interactive Builds a React Corporate Website","content":"<p dir=\"ltr\">Tripwire Interactive is an entertainment software developer and publisher founded in 2005 by the award-winning mod team and winners of the 2004 edition of the &ldquo;$1,000,000 Make Something Unreal&rdquo; competition.</p><p dir=\"ltr\"><br><img src=\"https://cosmic-s3.imgix.net/1e7ac570-e363-11e8-8e9f-c7fa3cdb2209-Tripwire.png?w=1200\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"><br></p><p dir=\"ltr\">Gamers want games that grab their attention and will keep them coming back for more. <a href=\"https://www.tripwireinteractive.com/#/#top\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a> has been producing those types of games since the first Red Orchestra mod that won the &quot;Make Something Unreal&quot; competition in 2004. Since then Tripwire has won numerous Multiplayer and FPS Game of the Year awards from top editorial sites and millions have played a Red Orchestra or Killing Floor game, with an average play time of over 40 hours, per player, per game!&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://cosmic-s3.imgix.net/ec4f9940-dc64-11e8-9094-a112ce16fea9-40953819_2090843480937681_5517411053975109632_o.jpg?w=1200&quot;\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"><br></p><p dir=\"ltr\">Historically using an Umbraco system, The Tripwire Interactive team needed an easy way for their marketers to maintain marketing website content for their games&#39; parent brand. Each new game needed a dedicated landing page with marketing content. Blog,\r\nCareer and Press feeds needed to be managed by the marketing team without bottlenecking the developers. The Tripwire Interactive team chose Cosmic as their dynamic content management solution as they built their new corporate website on a modern React\r\nstack.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team\r\nhas been enjoying the ease of use with the new system.&quot;</p><p><cite>&mdash; Owen Liversidge, Lead Developer</cite></p></blockquote><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/297454e0-e387-11e8-89c3-0b430965f348-ezgif-4-5e5da2b90b13.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"Tripwire Interactive","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Gamers want games that grab their attention and will keep them coming back for more. Tripwire Interactive has been producing those types of games since the first Red Orchestra mod that won the \"Make Something Unreal\" competition in 2004. Since then Tripwire has won numerous Multiplayer and FPS Game of the Year awards from top editorial sites and millions have played a Red Orchestra or Killing Floor game, with an average play time of over 40 hours, per player, per game! \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-30T16:54:26.538Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-11-08T20:12:40.566Z","metadata":{"company":"Tripwire Interactive","industry_type":"Gaming","teaser":"Gamers want games that grab their attention and will keep them coming back for more. Tripwire Interactive has been producing those types of games since the first Red Orchestra mod that won the \"Make Something Unreal\" competition in 2004. Since then Tripwire has won numerous Multiplayer and FPS Game of the Year awards from top editorial sites and millions have played a Red Orchestra or Killing Floor game, with an average play time of over 40 hours, per player, per game! \n","logo":{"url":"https://cdn.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg"}}}],"app_slugs":[{"slug":"simple-react-blog"},{"slug":"conference-website"},{"slug":"gatsby-agency-portfolio"}],"extension_slugs":[{"slug":"wordpress-importer"},{"slug":"export-to-csv"},{"slug":"algolia-search"}],"testimonial":"“Leveraging the Cosmic GraphQL API allows for easy updates to our news and blog, while keeping payloads small and fast. Integration with Cosmic could not be easier thanks to their great support. We look forward to developing more features on the platform.”","testimonial_credit":"Dustin Brink, Front End Developer at Derive Systems"}},{"_id":"596f7774804e4a0c61000098","order":9,"slug":"phil-andrews","title":"Phil Andrews","content":"","metafields":[{"value":"1b623f80-6c95-11e7-95fb-e75796c08fcc-gOyHLnup_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/1b623f80-6c95-11e7-95fb-e75796c08fcc-gOyHLnup_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/1b623f80-6c95-11e7-95fb-e75796c08fcc-gOyHLnup_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-06-27T16:56:57.686Z","created_by":"5357ef811693be2118000001","created":"2017-07-19T15:15:00.525Z","status":"published","modified_at":"2017-07-19T15:15:35.891Z","modified_by":"5716b504e9c686d006000073","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/1b623f80-6c95-11e7-95fb-e75796c08fcc-gOyHLnup_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/1b623f80-6c95-11e7-95fb-e75796c08fcc-gOyHLnup_400x400.jpg"}}},{"_id":"538a103e3ff8db6d77000003","slug":"about","title":"About","content":"<p>Cosmic is a <a href=\"https://www.cosmicjs.com/headless-cms\">hosted</a> and <a href=\"https://www.cosmicjs.com/enterprise\">enterprise</a> headless CMS solution that helps teams build content-powered applications faster, easier, together. Developers get powerful API tools and content creators get an easy-to-use dashboard to create rich content experiences.</p><p><br><strong>Our Goals</strong><br>Our goal is to make the application development process faster, easier, and more scalable for teams of all sizes. In a time when content remains king in the digital landscape, content velocity with a headless CMS is a powerful tool for any business, and it&#39;s our goal to empower these future-minded companies.</p><p><br><strong>Our Commitment</strong><br>Teams rely on our infrastructure for mission-critical content delivery, and we take this responsibility very seriously. We are committed to customer success by providing a secure, dependable, and performant content management solution for our customers. Our technology and customer support is unmatched in the industry and building trust in our service is our top priority.</p>","metafields":[{"children":null,"type":"file","title":"Logos","key":"logos","id":"Ffb9h9cfiC","value":"26167900-1a9f-11e9-ac35-750902641903-Cosmic-JS-logos.zip","url":"https://cdn.cosmicjs.com/26167900-1a9f-11e9-ac35-750902641903-Cosmic-JS-logos.zip","imgix_url":"https://cdn.cosmicjs.com/26167900-1a9f-11e9-ac35-750902641903-Cosmic-JS-logos.zip"},{"children":[{"type":"repeating_item","children":[{"title":"Person","key":"person","value":"57859a0f1621de245c0004c5","type":"object","required":false,"object_type":"people","object":{"_id":"57859a0f1621de245c0004c5","slug":"tony-spiro-ceo-co-founder","title":"Tony Spiro, CEO & Co-Founder","content":"<p><a href=\"https://cosmicjs.com/tony\" rel=\"noopener noreferrer\" target=\"_blank\">Tony Spiro</a> is an experienced software engineer who knows the pain of content management in a team setting. From his experience leading digital teams from startups to Fortune 500 companies, he started Cosmic JS to solve his own problems in application development.</p><p>He is thrilled to help teams around the world use Cosmic JS to build amazing products together.</p>","metafields":[{"value":"3c056190-03cf-11e9-a674-8b21bc2bc0e1-me.jpg","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/3c056190-03cf-11e9-a674-8b21bc2bc0e1-me.jpg","imgix_url":"https://imgix.cosmicjs.com/3c056190-03cf-11e9-a674-8b21bc2bc0e1-me.jpg"},{"value":"https://cosmicjs.com/tony","key":"cosmic","title":"Cosmic","type":"text","children":null},{"value":"https://twitter.com/tonyspiro","key":"twitter","title":"Twitter","type":"text","children":null},{"value":"https://www.linkedin.com/in/tonyspiro/","key":"linkedin","title":"Linkedin","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"people","created":"2016-07-13T01:31:59.156Z","status":"published","modified":"2016-08-05T22:19:20.200Z","modified_at":"2018-12-19T20:52:32.682Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-12-19T20:52:32.682Z"}}]},{"type":"repeating_item","children":[{"title":"Person","key":"person","value":"57859a5c1621de245c0004cb","type":"object","required":false,"object_type":"people","object":{"_id":"57859a5c1621de245c0004cb","slug":"carson-gibbons-cmo-co-founder","title":"Carson Gibbons, CMO & Co-Founder","content":"<p style=\"margin-bottom: 0px;\"><a href=\"https://cosmicjs.com/carsongibbons\" rel=\"noopener noreferrer\" target=\"_blank\">Carson Gibbons</a> is a sales, marketing and advertising manager with experience leading digital project production for companies ranging from startups to corporations to large not-for-profits.<br><br>Carson joined Cosmic JS to help teams of developers and content creators collaborate to build modern apps faster together.</p>","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"https://cosmicjs.com/carsongibbons","key":"cosmic","title":"Cosmic","type":"text","children":null},{"value":"https://twitter.com/carsoncgibbons","key":"twitter","title":"Twitter","type":"text","children":null},{"value":"https://www.linkedin.com/in/carsongibbons","key":"linkedin","title":"Linkedin","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"people","created":"2016-07-13T01:33:16.699Z","status":"published","modified":"2016-07-13T16:50:33.731Z","modified_at":"2018-12-19T20:53:20.183Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-12-19T20:53:20.183Z"}}]}],"type":"repeater","title":"People","key":"people","id":"uN39DsGag2","value":"","repeater_fields":[{"title":"Person","key":"person","value":"","type":"object","required":false,"object_type":"people"}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"pages","created":"2014-05-31T17:24:14.951Z","order":9,"modified":"2016-08-03T19:54:00.629Z","files":"","status":"published","modified_at":"2020-07-05T18:04:07.039Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-07-05T18:04:07.039Z","unpublish_at":null,"metadata":{"logos":{"url":"https://cdn.cosmicjs.com/26167900-1a9f-11e9-ac35-750902641903-Cosmic-JS-logos.zip","imgix_url":"https://cdn.cosmicjs.com/26167900-1a9f-11e9-ac35-750902641903-Cosmic-JS-logos.zip"},"people":[{"person":{"_id":"57859a0f1621de245c0004c5","slug":"tony-spiro-ceo-co-founder","title":"Tony Spiro, CEO & Co-Founder","content":"<p><a href=\"https://cosmicjs.com/tony\" rel=\"noopener noreferrer\" target=\"_blank\">Tony Spiro</a> is an experienced software engineer who knows the pain of content management in a team setting. From his experience leading digital teams from startups to Fortune 500 companies, he started Cosmic JS to solve his own problems in application development.</p><p>He is thrilled to help teams around the world use Cosmic JS to build amazing products together.</p>","metafields":[{"value":"3c056190-03cf-11e9-a674-8b21bc2bc0e1-me.jpg","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/3c056190-03cf-11e9-a674-8b21bc2bc0e1-me.jpg","imgix_url":"https://imgix.cosmicjs.com/3c056190-03cf-11e9-a674-8b21bc2bc0e1-me.jpg"},{"value":"https://cosmicjs.com/tony","key":"cosmic","title":"Cosmic","type":"text","children":null},{"value":"https://twitter.com/tonyspiro","key":"twitter","title":"Twitter","type":"text","children":null},{"value":"https://www.linkedin.com/in/tonyspiro/","key":"linkedin","title":"Linkedin","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"people","created":"2016-07-13T01:31:59.156Z","status":"published","modified":"2016-08-05T22:19:20.200Z","modified_at":"2018-12-19T20:52:32.682Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-12-19T20:52:32.682Z","metadata":{"image":{"url":"https://cdn.cosmicjs.com/3c056190-03cf-11e9-a674-8b21bc2bc0e1-me.jpg","imgix_url":"https://imgix.cosmicjs.com/3c056190-03cf-11e9-a674-8b21bc2bc0e1-me.jpg"},"cosmic":"https://cosmicjs.com/tony","twitter":"https://twitter.com/tonyspiro","linkedin":"https://www.linkedin.com/in/tonyspiro/"}}},{"person":{"_id":"57859a5c1621de245c0004cb","slug":"carson-gibbons-cmo-co-founder","title":"Carson Gibbons, CMO & Co-Founder","content":"<p style=\"margin-bottom: 0px;\"><a href=\"https://cosmicjs.com/carsongibbons\" rel=\"noopener noreferrer\" target=\"_blank\">Carson Gibbons</a> is a sales, marketing and advertising manager with experience leading digital project production for companies ranging from startups to corporations to large not-for-profits.<br><br>Carson joined Cosmic JS to help teams of developers and content creators collaborate to build modern apps faster together.</p>","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"https://cosmicjs.com/carsongibbons","key":"cosmic","title":"Cosmic","type":"text","children":null},{"value":"https://twitter.com/carsoncgibbons","key":"twitter","title":"Twitter","type":"text","children":null},{"value":"https://www.linkedin.com/in/carsongibbons","key":"linkedin","title":"Linkedin","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"people","created":"2016-07-13T01:33:16.699Z","status":"published","modified":"2016-07-13T16:50:33.731Z","modified_at":"2018-12-19T20:53:20.183Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-12-19T20:53:20.183Z","metadata":{"image":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"cosmic":"https://cosmicjs.com/carsongibbons","twitter":"https://twitter.com/carsoncgibbons","linkedin":"https://www.linkedin.com/in/carsongibbons"}}}]}},{"_id":"5aa7cd8c3078516dd48d6ad2","order":9,"slug":"bookabus-builds-a-localized-transportation-website","title":"Bookabus Builds a Localized Transportation Website","content":"<p><a href=\"https://www.bookabus.eu\" rel=\"noopener noreferrer\" target=\"_blank\">Bookabus</a> is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it&rsquo;s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen Shot 2018-04-17 at 6.48.12 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Bookabus needed a new website to communicate their transport routes, terms and marketing materials. &nbsp;A big requirement was the ability to localize their content into different languages for the different areas they&#39;re servicing, including the UK, Netherlands, Germany, Spain, and Belgium. &nbsp;They chose to build their new transportation website with Cosmic because of the ease of use and powerful localization capabilities.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/be1ed900-4236-11e8-bd9f-93df74f6ae30-Screen Shot 2018-04-17 at 6.59.27 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate dynamic content into our website. The product is a great value for your money. This is especially true given that their customer service is top-notch.&quot;</p><p><cite>&mdash; Harrie Pieters, Web Developer&nbsp;</cite></p></blockquote>","metafields":[{"value":"Bookabus","key":"company","title":"Company","type":"text","children":null},{"value":"Transportation","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Bookabus is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it’s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","imgix_url":"https://imgix.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-13T13:09:32.089Z","created_by":"5716b504e9c686d006000073","created":"2018-03-13T13:09:32.089Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-04-19T21:23:26.384Z","metadata":{"company":"Bookabus","industry_type":"Transportation","teaser":"Bookabus is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it’s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events. \n","logo":{"url":"https://cdn.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","imgix_url":"https://imgix.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png"}}},{"_id":"6296a4b8140745000917ed91","order":9,"slug":"new-dashboard-updates-workspaces-navigation-extensions","title":"New dashboard updates: workspaces, navigation, and Extensions","content":"<p>We&#39;ve released some new features for the new dashboard that we would like to share with you. Read below and <a href=\"https://app-v2.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">sign up to get on the waitlist</a> to preview the new dashboard.</p><h3><strong>🧭 Navigation</strong></h3><p>We are on a mission to provide the easiest way to manage content and it all starts with organization. We think you&#39;ll agree that our new navigation / information architecture is intuitive and makes everything in your dashboard easy to find.</p><p><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/7c805750-e1c7-11ec-9bc3-51ff01941523-nav-updates.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><h3><br><strong>🏢 Workspaces</strong></h3><p>A big reason to use a content management system is to collaborate with team members around content creation. Cosmic Workspaces enables you to add your company name and brand to the top of your dashboard to keep everyone on track and on brand. Now your\r\ncompany brand is top of mind (and top of page!).</p><p><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/7c190a00-e1c7-11ec-9bc3-51ff01941523-workspace.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><p><br></p><h3><strong>🧩 Extensions</strong></h3><p>We&#39;ve made a big update to how Extensions are built. Extensions can be added to the Object editing pages to connect to third party APIs and display any https / frame-enabled URL. We think you&#39;ll love it and your colleagues will love it too! (Disclaimer: We do not encourage workplace rick rolling)</p><p><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/7acfc120-e1c7-11ec-9bc3-51ff01941523-extensions.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><h3><br></h3><p><a data-ved=\"2ahUKEwj73tjz4Iz4AhUsoY4IHRjCDPkQFnoECAMQAQ\" href=\"https://emojipedia.org/laptop/\" ping=\"/url?sa=t&source=web&rct=j&url=https://emojipedia.org/laptop/&ved=2ahUKEwj73tjz4Iz4AhUsoY4IHRjCDPkQFnoECAMQAQ\"></a></p><h3><a data-ved=\"2ahUKEwj73tjz4Iz4AhUsoY4IHRjCDPkQFnoECAMQAQ\" href=\"https://emojipedia.org/laptop/\" ping=\"/url?sa=t&source=web&rct=j&url=https://emojipedia.org/laptop/&ved=2ahUKEwj73tjz4Iz4AhUsoY4IHRjCDPkQFnoECAMQAQ\">💻</a>&nbsp;<strong>Try it out</strong></h3><p>We are on a mission to build the best content management solution in the world, but there&#39;s still more work to do! If you haven&#39;t joined, <a href=\"https://app-v2.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">sign up to get on the waitlist</a> to try it out during this alpha development phase, and help us by providing your feedback.</p><p>Follow us <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">on Twitter</a>, and join our team <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">on Slack</a> to stay in touch with the latest Cosmic news.<br><br>Sincerely,<br>Cosmic Team</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"71DqZRcN0W","value":"5ffa1d1e0046b0000799cb7b","required":true,"object_type":"authors","object":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"9iF8TvGMbf","value":"<p>We&#39;ve released some new features for the new dashboard that we are excited to share with you.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"phuLCAcZUX","value":"a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png","url":"https://cdn.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png","imgix_url":"https://imgix.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"rMauxpXMSQ","value":"We've released some new features for the new dashboard that we are excited to share with you."},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"hSB0eu4WAA","value":"2022-06-01"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2022-05-31T23:28:56.674Z","created_by":"5357ef811693be2118000001","modified_at":"2022-06-01T17:31:31.328Z","created":"2022-05-31T23:28:56.674Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2022-06-01T17:31:31.328Z","metadata":{"author":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}}},"teaser":"<p>We&#39;ve released some new features for the new dashboard that we are excited to share with you.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png","imgix_url":"https://imgix.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png"},"seo_meta_description":"We've released some new features for the new dashboard that we are excited to share with you.","published_date":"2022-06-01"}},{"_id":"5ef386f6de201700072ef9db","slug":"strapi-headless-cms","title":"Strapi Headless CMS","content":"<p><span style=\"color: rgb(88, 96, 105);\">Strapi is an open source Node.js Headless CMS that offers the ability to build customizable APIs. <span style=\"color: rgb(88, 96, 105);\">Cosmic is an alternative to Strapi that your developers and content creators will love.</span></span></p><h3><br>Developers and Creators</h3><p><span style=\"color: rgb(88, 96, 105);\">Strapi, like Cosmic, offers both a REST and GraphQL API. Check out the&nbsp;</span><a href=\"https://docs.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic API docs<span style=\"color: rgb(88, 96, 105);\">&nbsp;</span></a><span style=\"color: rgb(88, 96, 105);\">and the&nbsp;</span><a href=\"https://strapi.io/documentation/v3.x/content-api/api-endpoints.html\" rel=\"noopener noreferrer\" target=\"_blank\">Strapi API docs</a><span style=\"color: rgb(88, 96, 105);\">&nbsp;to see the difference in approach.&nbsp;</span></p><p><span style=\"color: rgb(88, 96, 105);\">Cosmic provides everything your team of developers and content creators need: powerful and intuitive APIs for developers, and an easy-to-use dashboard for content creators. We&#39;ve removed all complexity and CMS maintenance, so your team can focus on building great products faster, together.</span></p><h3><br>Additional Maintenance</h3><p><span style=\"color: rgb(88, 96, 105);\">With Strapi, you will need to maintain and host everything yourself, adding additional development costs to your projects. With Cosmic, we provide a hosted web dashboard so can focus on what really matters: creating great content and user experiences, not CMS infrastructure and maintenance.</span></p>","metafields":[{"children":null,"type":"switch","title":"Include in link list","key":"include_in_link_list","id":"YOxrdUd1VB","value":true,"options":"yes,no"},{"children":null,"type":"text","title":"Vendor Name","key":"vendor_name","id":"o30BNE5DFX","value":"Strapi Headless CMS"},{"children":null,"type":"file","title":"Logo","key":"logo","id":"92knrxNiSp","value":"59523d10-b57e-11ea-a5ec-e53cdd11dc02-strapi-headless-cms.png","url":"https://cdn.cosmicjs.com/59523d10-b57e-11ea-a5ec-e53cdd11dc02-strapi-headless-cms.png","imgix_url":"https://imgix.cosmicjs.com/59523d10-b57e-11ea-a5ec-e53cdd11dc02-strapi-headless-cms.png"},{"children":null,"type":"textarea","title":"Tech","key":"tech","id":"kbvBvW8yiB","value":"MongoDB database, Node.js."},{"children":null,"type":"textarea","title":"Scalability","key":"scalability","id":"xTnfi9BDHB","value":"Does not scale easily. Limited by your servers, hosting provider, and budget."},{"children":null,"type":"textarea","title":"Security","key":"security","id":"RPF4wZ41o8","value":"You manage the security yourself. No default data encryption at rest or in transit."},{"children":null,"type":"textarea","title":"Maintenance","key":"maintenance","id":"tMojHp4iRw","value":"You deploy, host, and maintain everything yourself. Along with your application and content, you need to maintain updates and security for your CMS system."},{"children":null,"type":"textarea","title":"Caching","key":"caching","id":"8Py1wuPiGy","value":"No caching included out of the box."},{"children":null,"type":"textarea","title":"Media CDN","key":"media_cdn","id":"VaeBBxTdDu","value":"No CDN included out of the box."},{"children":null,"type":"textarea","title":"Image Processing","key":"image_processing","id":"E8YhX1c08l","value":"Manually manage your own image sizes and optimizations."},{"children":null,"type":"textarea","title":"Extendability","key":"extendability","id":"G1TuCsivLC","value":"Themes and integrations."},{"children":null,"type":"textarea","title":"Front end","key":"front_end","id":"MOexxE2Xwq","value":"Front end is decoupled from the backend CMS."},{"children":null,"type":"textarea","title":"Number of Projects","key":"number_of_projects","id":"uA2WGbJi6l","value":"One login, multiple projects."},{"children":null,"type":"html-textarea","title":"Costs","key":"costs","id":"XHG1bhuRbN","value":"<p>You will need to hire developer resources to maintain the CMS. Average salary of a full-stack developer is <a href=\"https://neuvoo.com/salary/?job=Full+Stack+Developer\" target=\"_blank\">$111,600 per year</a>. You may need to hire 1-3 developers to maintain the CMS.</p>"},{"children":null,"type":"text","title":"Cost Value","key":"cost_value","id":"dU0CjkPo8K","value":"$223,200"},{"children":null,"type":"text","title":"Cost Text","key":"cost_text","id":"bgkNPI7OqM","value":"per year"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"cms-competitors","created":"2020-06-24T17:01:42.439Z","created_at":"2020-06-24T17:01:42.439Z","modified_at":"2020-06-28T20:51:54.481Z","status":"published","locale":null,"modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-28T20:51:54.481Z","unpublish_at":null,"order":9,"metadata":{"include_in_link_list":true,"vendor_name":"Strapi Headless CMS","logo":{"url":"https://cdn.cosmicjs.com/59523d10-b57e-11ea-a5ec-e53cdd11dc02-strapi-headless-cms.png","imgix_url":"https://imgix.cosmicjs.com/59523d10-b57e-11ea-a5ec-e53cdd11dc02-strapi-headless-cms.png"},"tech":"MongoDB database, Node.js.","scalability":"Does not scale easily. Limited by your servers, hosting provider, and budget.","security":"You manage the security yourself. No default data encryption at rest or in transit.","maintenance":"You deploy, host, and maintain everything yourself. Along with your application and content, you need to maintain updates and security for your CMS system.","caching":"No caching included out of the box.","media_cdn":"No CDN included out of the box.","image_processing":"Manually manage your own image sizes and optimizations.","extendability":"Themes and integrations.","front_end":"Front end is decoupled from the backend CMS.","number_of_projects":"One login, multiple projects.","costs":"<p>You will need to hire developer resources to maintain the CMS. Average salary of a full-stack developer is <a href=\"https://neuvoo.com/salary/?job=Full+Stack+Developer\" target=\"_blank\">$111,600 per year</a>. You may need to hire 1-3 developers to maintain the CMS.</p>","cost_value":"$223,200","cost_text":"per year"}},{"_id":"5bad3ef6261a690929006840","order":9,"slug":"hubspot","title":"Hubspot","content":"","metafields":[{"value":"https://cosmicjs.com/articles/integrating-cosmic-powered-content-with-hubspot-jml1p9ne","key":"link","title":"Link","type":"text","children":null},{"value":"9835a860-c330-11e8-9635-9f5441634386-hubspotlogo.png","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/9835a860-c330-11e8-9635-9f5441634386-hubspotlogo.png","imgix_url":"https://imgix.cosmicjs.com/9835a860-c330-11e8-9635-9f5441634386-hubspotlogo.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"integrations","created_at":"2018-09-27T20:35:02.744Z","created_by":"5716b504e9c686d006000073","created":"2018-09-27T20:35:02.744Z","status":"published","modified_at":"2018-09-28T15:10:22.971Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-09-28T15:10:22.971Z","metadata":{"link":"https://cosmicjs.com/articles/integrating-cosmic-powered-content-with-hubspot-jml1p9ne","image":{"url":"https://cdn.cosmicjs.com/9835a860-c330-11e8-9635-9f5441634386-hubspotlogo.png","imgix_url":"https://imgix.cosmicjs.com/9835a860-c330-11e8-9635-9f5441634386-hubspotlogo.png"}}},{"_id":"5adf8a81bbfc7673c7bcb926","order":9,"slug":"nextjs-cms","title":"Next.js CMS ","content":"<h2>Next.js CMS Templates</h2><p>You can use our <a href=\"https://www.cosmicjs.com/apps?q=Next.js\">Next.js CMS Templates</a>, which includes Next.js CMS GitHub code examples.</p><h2><br>Next.js CMS Dashboard</h2><p>Cosmic offers a Headless CMS to enable your team to build apps faster. Developers get powerful API tools, and content creators get an intuitive content management dashboard. Get started free.</p>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"cCjW50uVoP","value":"aa1afc30-8eed-11ea-a8ae-93035d8042eb-nextjs-cms.png","url":"https://cdn.cosmicjs.com/aa1afc30-8eed-11ea-a8ae-93035d8042eb-nextjs-cms.png","imgix_url":"https://imgix.cosmicjs.com/aa1afc30-8eed-11ea-a8ae-93035d8042eb-nextjs-cms.png"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"uYAMADRPBv","value":"0b0e65e0-dfad-11e9-8580-4df517ea2cd1-nextjs.jpg","url":"https://cdn.cosmicjs.com/0b0e65e0-dfad-11e9-8580-4df517ea2cd1-nextjs.jpg","imgix_url":"https://imgix.cosmicjs.com/0b0e65e0-dfad-11e9-8580-4df517ea2cd1-nextjs.jpg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"cW5an89YMf","value":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for Next.js websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"ZVZgVrEFGP","value":"Next.js"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"OnbdXkdzY0","value":"Cosmic is the best CMS for Next.js websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"BhOX5RKT7k","value":"0e5d42c0-dfad-11e9-8580-4df517ea2cd1-nextjs.jpg","url":"https://cdn.cosmicjs.com/0e5d42c0-dfad-11e9-8580-4df517ea2cd1-nextjs.jpg","imgix_url":"https://imgix.cosmicjs.com/0e5d42c0-dfad-11e9-8580-4df517ea2cd1-nextjs.jpg"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"lFEqPiWrr2","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"1RcRCArMTy","value":"Best Headless CMS for Next.js"},{"children":[{"type":"repeating_item","children":[{"title":"Title","key":"title","value":"Getting Started with Cosmic CMS and Next.js (Part 1)","type":"text","required":false},{"title":"Link","key":"link","value":"https://www.youtube.com/embed/NZA1dF2IDqQ?showinfo=0&wmode=opaque","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Title","key":"title","value":"Building a Blog with Cosmic CMS and Next.js (Part 2)","type":"text","required":false},{"title":"Link","key":"link","value":"https://www.youtube.com/embed/sdvdwo3g3PE?showinfo=0&wmode=opaque","type":"text","required":false}]}],"type":"repeater","title":"Videos","key":"videos","id":"3T27ADXV5A","value":"Getting Started with Cosmic CMS and Next.js (Part 1)","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]},{"children":null,"type":"text","title":"Apps Search Term","key":"apps_search_term","id":"QhTX7idNH4","value":""},{"children":null,"type":"text","title":"Articles Search Term","key":"articles_search_term","id":"iEwx0QKwuT","value":""},{"children":null,"type":"html-textarea","title":"Page Overview","key":"page_overview","id":"ZZRJMD2bX4","value":""},{"children":null,"type":"html-textarea","title":"SEO Content","key":"seo_content","id":"BNlO3trhX3","value":""}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-22T23:07:51.159Z","created_by":"5357ef811693be2118000001","created":"2018-04-24T19:50:25.149Z","status":"published","modified_at":"2020-09-30T14:00:01.904Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-09-30T14:00:01.904Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/aa1afc30-8eed-11ea-a8ae-93035d8042eb-nextjs-cms.png","imgix_url":"https://imgix.cosmicjs.com/aa1afc30-8eed-11ea-a8ae-93035d8042eb-nextjs-cms.png"},"thumbnail":{"url":"https://cdn.cosmicjs.com/0b0e65e0-dfad-11e9-8580-4df517ea2cd1-nextjs.jpg","imgix_url":"https://imgix.cosmicjs.com/0b0e65e0-dfad-11e9-8580-4df517ea2cd1-nextjs.jpg"},"blurb":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for Next.js websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Next.js","seo_description":"Cosmic is the best CMS for Next.js websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/0e5d42c0-dfad-11e9-8580-4df517ea2cd1-nextjs.jpg","imgix_url":"https://imgix.cosmicjs.com/0e5d42c0-dfad-11e9-8580-4df517ea2cd1-nextjs.jpg"},"code_example":"","seo_title":"Best Headless CMS for Next.js","videos":[{"title":"Getting Started with Cosmic CMS and Next.js (Part 1)","link":"https://www.youtube.com/embed/NZA1dF2IDqQ?showinfo=0&wmode=opaque"},{"title":"Building a Blog with Cosmic CMS and Next.js (Part 2)","link":"https://www.youtube.com/embed/sdvdwo3g3PE?showinfo=0&wmode=opaque"}],"apps_search_term":"","articles_search_term":"","page_overview":"","seo_content":""}},{"_id":"56eb98c0f137e10f40000027","order":10,"slug":"terms-of-use","title":"Terms of Use / Privacy Policy","content":"<p>Last updated: 05/31/2018</p><p><br></p><h4>1. Introduction and Acceptance</h4><p>Welcome to Cosmic JS. Cosmic JS (&ldquo;Cosmic JS&rdquo;, &ldquo;we&rdquo;, &ldquo;us&rdquo; and &ldquo;our&rdquo;) offers you access to Cosmic JS, our free content building platform (the &ldquo;Website&rdquo;) that allows you to create content for your\r\nself-hosted website, application or a website hosted at a subdomain URL using the &ldquo;cosmicapp.co&rdquo; domain (each a &ldquo;Site&rdquo;). This Cosmic JS Terms of Use and Privacy Policy document (&ldquo;Terms of Use&rdquo; or &ldquo;Privacy Policy&rdquo;,\r\nas applicable) govern your use of the Website.</p><p>PLEASE READ THESE TERMS OF USE CAREFULLY BEFORE USING THE WEBSITE. BY ACCESSING AND/OR USING THE WEBSITE (OTHER THAN TO READ THESE TERMS OF USE FOR THE FIRST TIME) YOU ARE AGREEING TO COMPLY WITH THESE TERMS OF USE, WHICH MAY CHANGE FROM TIME TO TIME.\r\nIF YOU DO NOT AGREE TO BE BOUND BY THESE TERMS OF USE, DO NOT ACCESS OR USE THE WEBSITE.</p><p>If you are agreeing to these Terms of Use on behalf of someone else (your employer for example), then you are warranting to us that you have full legal authority to bind that third party.</p><p><br></p><h4>2. How the Website Works</h4><p>(A) When using the Website, you agree to follow our guidelines and instructions. Keep in mind that these Terms of Use apply to any use of the Website whether or not you publish your Site.</p><p>(B) In order to publish your Site, you will have to become a registered user. You need to be 18 years or older to register. If you are under the age of 18, then you are not permitted to publish a Site, register as a user or otherwise submit personal information\r\nunless we receive appropriate consent from your parent or guardian who is at least 18 years of age and this adult will be responsible for all your activities.</p><p>(C) If you become a registered user, you will provide true, accurate and complete registration information and, if such information changes, you will promptly update the relevant registration information. During registration, you will create a user name\r\nand password (an &ldquo;Account&rdquo;). Once registered, if at any point you create a user name, your profile will be made publicly available if (i) you submit any content for publication on any of our publicly accessible Website services (e.g., App,\r\nExtension, Articles, etc.) or (ii) you &ldquo;star&rdquo; any content published on any of our publicly accessible Website services. You are responsible for any use of the Website or a Site using your Account and for safeguarding and maintaining the confidentiality\r\nof your Account. You agree to notify us immediately at the address or phone number set forth on the Website of any breach of security or unauthorized use of your Account.</p><p>(D) Becoming a registered user will provide you with a Free plan, which is 100% free and provides unlimited access to use most of the Website Services.</p><p>(E) Upon becoming a registered user, you will have the option to, at any time, upgrade your plan, which provides additional benefits that are not available with our Free plan. The upgraded plans will be automatically billed on a monthly or annual basis\r\nand remain in effect until cancelled by you.</p><p>(F) Except for any sales tax that we may be required to collect on any purchase/ subscription by you, you are responsible for paying all fees and taxes associated with your use of the Website, if any.</p><p>(G) We do not generally offer refunds or credits on purchases unless required by law, but we reserve the right to do so at our sole and absolute discretion.</p><p><br></p><h4>3. Intellectual Property</h4><p>The Website and included content (and any derivative works or enhancements of the same) including, but not limited to, all text, illustrations, files, images, software, scripts, sounds, music, videos, information, content, materials, products, services,\r\nURLs, technology, documentation, and interactive features included with or available through the Website and all intellectual property rights to the same, including without limitation, all trademarks, service marks, trade names and trade dress that may\r\nappear on the Website (collectively, the &ldquo;Website Content&rdquo;) are owned by us, our licensors, or both. Except for the limited use rights granted to you in these Terms of Use, you will not acquire any right, title or interest in the Website or\r\nany Website Content. Any rights not expressly granted in these Terms of Use are expressly reserved.</p><p><br></p><h4>4. Website Access and Use</h4><p>(A) The Website is currently free to use under a Free plan. However, the upgraded plans require a purchase by you, and in the future, we may offer certain other portions of the Website for a one-time fee, on a subscription basis or under any other lawful\r\npricing structure. In all instances, our services are not being sold to you; rather, you are being granted a limited license to use our Website, Website Content, and services.</p><p>(B) You acknowledge that we reserve the right to discontinue the Website services, in whole or in part, at any time. When using the Website, you agree to comply with all applicable federal, state, and local laws including, without limitation, copyright\r\nlaw. Except as expressly permitted in these Terms of Use, you may not use, reproduce, distribute, create derivative works based upon, publicly display, publicly perform, publish, transmit, or otherwise exploit Website Content for any purpose whatsoever\r\nwithout obtaining prior written consent from us or, in the case of third-party content, its respective owner. You acknowledge that you do not acquire any ownership rights by using Website Content.</p><p>(C) Furthermore, except as expressly permitted in these Terms of Use, you may not: (i) remove, alter, cover, or distort any copyright, trademark, or other proprietary rights notice on the Website or Website Content; (ii) circumvent, disable or otherwise\r\ninterfere with security-related features of the Website; (iii) use an automatic device (such as a robot or spider) or manual process to copy or &ldquo;scrape&rdquo; the Website or Website Content for any purpose without our express written permission;\r\n(iv) collect or harvest any personally identifiable information from the Website including, without limitation, user names, passwords, email addresses; (v) attempt to or</p><p>interfere with the proper working of the Website or impair, overburden, or disable the same; (vi) decompile, reverse engineer, or disassemble any portion of the Website; (vii) use network- monitoring software to determine architecture of or extract usage\r\ndata from the Website; (viii) encourage conduct that violates any local, state or federal law, impersonate others, use a false email address, or misrepresent your affiliation with others; (ix) violate U.S. export laws, including, without limitation, violations\r\nof the Export Administration Act and the Export Administration Regulations administered by the Department of Commerce; (x) engage in any conduct that restricts or inhibits any other user from using or enjoying the Website; or (xi) solicit other users\r\nto join or become members of any commercial online service or other organization without our prior written approval.</p><p>(D) You agree to fully cooperate with us to investigate any suspected or actual activity that is in breach of these Terms of Use.</p><h4><br></h4><h4>5. User Content</h4><p>(A) We may now or in the future permit users to post, upload, transmit through, or otherwise make available through our Website (collectively, &ldquo;submit&rdquo;) messages, text, illustrations, data, files, images, graphics, photos, comments, sounds,\r\nmusic, videos, information, content, and/or other materials that members of our developer program or others specifically submit for publication on any of our publicly accessible Website services (e.g., Apps, Knowledge Base, Articles, etc.) (collectively\r\n&ldquo;User Content&rdquo;). Subject to the rights and license you grant herein, you retain all right, title and interest in your User Content. We do not guarantee any confidentiality with respect to User Content even if it is not published through our\r\nWebsite. It is solely your responsibility to monitor and protect any intellectual property rights that you may have in your User Content, and we do not accept any responsibility for the same.</p><p>(B) You shall not submit any User Content protected by copyright, trademark, patent, trade secret, moral right, or other intellectual property or proprietary right without the express permission of the owner of the respective right. You are solely liable\r\nfor any damage resulting from your failure to obtain such permission or from any other harm resulting from User Content that you submit.</p><p>(C) You represent, warrant, and covenant that you will not submit any User Content that: (i) violates or infringes in any way upon the rights of others, including, but not limited to, any copyright, trademark, patent, trade secret, moral right, or other\r\nintellectual property or proprietary right of any person or entity; (ii) impersonates another or is unlawful, threatening, abusive, libelous, defamatory, invasive of privacy or publicity rights, vulgar, obscene, profane, pornographic, or otherwise objectionable,\r\nor otherwise violates any applicable law; (iii) encourages conduct that would constitute a criminal offense, give rise to civil liability or otherwise violate any law; (iv) is an advertisement for goods or services or a solicitation of funds; (v) includes\r\npersonal information such as messages which identify phone numbers, social security numbers, account numbers, addresses, or employer references; (vi) contains a formula, instruction, or advice that could cause harm or injury; or (vii) is a chain letter\r\nof any kind. Moreover, any conduct by a user that in our sole discretion restricts or inhibits any other user from using or enjoying our Website will not be permitted.</p><p>(D) By submitting User Content to us, simultaneously with such posting you automatically grant, or represent or warrant that the owner has expressly granted, to us a worldwide, royalty-free, perpetual, irrevocable, non-exclusive, fully sublicensable,\r\nand transferable right and license to use, reproduce, distribute, create derivative works based upon (including, without limitation, translations), publicly display, publicly perform, transmit, and publish the User Content (in whole or in part) as we,\r\nin our sole discretion, deem appropriate including, without limitation, (1) in connection with our business; and (2) in connection with the businesses of our affiliates, licensees, assignees, successors, parents, subsidiaries, and their related companies.\r\nWe may exercise this grant in any format, media or technology now known or later developed for the full term of any copyright that may exist in such User Content. Furthermore, you also grant other users permission to access your User Content and to use,\r\nreproduce, distribute, create derivative works based upon, publicly display, publicly perform, transmit, and publish your User Content for personal, non-commercial use as permitted by the functionality of our Website and these Terms of Use. Notwithstanding\r\nthe foregoing, you waive any and all claims you (or any copyright holder) may now or later have in any jurisdiction to so- called &ldquo;moral rights&rdquo; or rights of &ldquo;droit moral&rdquo; with respect to the User Content.</p><p>(E) By submitting User Content, you also grant us the worldwide, perpetual, irrevocable, fully sublicensable, and transferable right, but not the obligation, to use any and all names, identities, titles, likenesses, distinctive appearances, physical likenesses,\r\nimages, portraits, pictures, photographs (whether still or moving), screen personas, voices, vocal styles, statements, gestures, mannerisms, personalities, performance characteristics, biographical data, signatures, and any other indicia or imitations\r\nof identity or likeness listed, provided, referenced, or otherwise contained in the User Content (all attributes, collectively, per person, a &ldquo;Persona&rdquo;), including, without limitation, your name and geographical location (e.g., &ldquo;Jonny\r\nD. &ndash; Chattanooga, TN&rdquo;), for purposes of advertising and trade, in any format, medium, or technology now known or later developed without further notice, approval, or compensation, unless prohibited by law. Our uses of your Persona will be\r\nconsistent with the terms of our Privacy Policy, where it is applicable.</p><p>(F) Notwithstanding the generality of the foregoing, we reserve the right to display advertisements in connection with your User Content and to use your User Content for advertising, marketing, promotional, and other commercial purposes. You acknowledge\r\nand agree that your User Content may be included on the websites and advertising networks of our distribution partners, marketing partners, accounts, and third-party service providers (including their downstream users).</p><p>(G) We have the right, but not the obligation, to monitor User Content. We have the right in our sole discretion and for any reason whatsoever, including without limitation a breach of Section 5(C) above, to suspend or delete a Site.</p><h4><br></h4><h4>6. Website Content &amp; Third-Party Links</h4><p>We provide the Website and Website Content for entertainment and/or promotional purposes only. Under no circumstances will we be liable for any loss or damage caused by your reliance on any Website Content. The Website may contain links to other websites\r\nmaintained by third</p><p>parties. We do not operate or control, in any respect, or necessarily endorse the content found on these third-party websites. You assume sole responsibility for your use of third-party links. We are not responsible for any content posted on third-party\r\nwebsites or liable to you for any loss or damage of any sort incurred as a result of your dealings with any third-party or their website.</p><h4><br></h4><h4>7. Privacy Policy</h4><p>(A) This Privacy Policy explains our policies and practices regarding the information we collect from and about you. It is through this Privacy Policy that we intend to provide you with a level of comfort and confidence in how we collect, use, and safeguard\r\npersonal and other information we collect and obtain, or that you provide through the Website or the Site and how you can contact us if you have any questions or concerns. It is our sincere hope that by explaining our data handling practices we will develop\r\na trusting and long-lasting relationship with you.</p><p>For the purposes of the EU General Data Protection Regulation 2016/679 (the &ldquo;<strong>GDPR</strong>&rdquo;), Cosmic JS is the data controller. This means that we are responsible for deciding how we use the information that we hold. We are a Delaware\r\ncorporation registered in the United States with an office at [3208 Bonniebrook Dr. Plano, TX 75075 USA].</p><p>The GDPR applies to you if you reside in the European Economic Area (an &ldquo;<strong>EEA Resident</strong>&rdquo;)</p><p>(B) We do not intentionally collect personally identifiable information from children under the age of 13 and we ask that children under 13 not submit any personal information to us. If you are under the age of 18, you can browse the Website, but cannot\r\npublish a Site or register for an Account without the consent of a parent or guardian. It is the responsibility of parents to monitor their children&rsquo;s use of our Website.&nbsp;</p><p>(C) We respect your privacy. As&nbsp;a general matter, we do not automatically collect your personally identifiable information when you visit the Website. When you publish a Site you will be asked to provide some information about yourself. Whether or\r\nnot you provide this type of information is your choice; however, in many instances this information is required to realize a benefit we may offer or gain access to certain content on our Website.</p><p>(D) We will only use information that we collect about you or that you provide to us, including any personal information data for the purposes described in this Privacy Policy and when applicable law allows us to do so. We will generally use your information\r\nbased on the following legal grounds: &nbsp;</p><ul><li>Where the use of your information is necessary for the performance of a contract we are about to enter into or have entered into with you;</li><li>Where the use is necessary for the purposes of our legitimate interests (or those of a third party);</li><li>Where we need to comply with a legal or regulatory obligation; or</li><li>Where you have given your consent (which can be withdrawn at any time).&nbsp;</li></ul><p>Personal information provided by you to us may be used by us and contractors in connection with providing the Website services. The personally identifiable information you submit to us is generally used to carry out your requests, respond to your inquiries,\r\nbetter serve you, or in other ways naturally associated with the circumstances in which you provided the information. We may also use this information to later contact you for a variety of reasons, such as customer service, providing you promotional information\r\nfor our products, or to communicate with you about content or other information you have posted or shared with us via the Website. In certain instances, we may also share your personally identifiable information with our third-party vendors performing\r\nfunctions on our behalf &nbsp;(e.g., vendors that process credit card orders). We do not store any credit card information. Our vendors agree to use this information, and we share information with them, only to carry out our requests. By voluntarily providing\r\ninformation to us when using the Website, you are consenting to the collection, use and disclosure of your personal information by us in the manner prescribed in this Section 7. You acknowledge this by using the Website. You may opt out of receiving future\r\ncommercial correspondence from us by contacting us in writing via email. Nothing in the foregoing paragraph is intended to affect any rights that an EEA Resident might have, or restrictions that apply, under the GDPR.</p><p>(E) We may automatically collect certain non-personally identifiable information from you when you access the Website. We use non-personally identifiable information in a variety of ways, including to help analyze site traffic, understand customer needs\r\nand trends, carry out targeted promotional activities, and to improve our services. We may use your non-personally identifiable information by itself or aggregate it with information we have obtained from others. We may share your non-personally identifiable\r\ninformation with third parties to achieve these objectives and others, but remember that aggregate information is anonymous information that does not personally identify you.</p><p>(F) Like many websites, we use &ldquo;cookies&rdquo; and &ldquo;web beacons&rdquo; (also called &ldquo;clear gifs&rdquo; or &ldquo;pixel tags&rdquo;) to obtain certain types of information when your web browser accesses our Website. Examples of information\r\nwe collect and analyze in this manner include (i) Internet Protocol (IP) address, (ii) computer connection information such as browser type and version, (iii) operating system, and (iv) your activities on our Website, including the products you view or\r\nsearch for as well as the URL you come from and go to next. It is important to note that cookies and web beacons that we use do not contain and are not tied to personally identifiable information about you. The anonymous data that the cookies or web beacons\r\ncollect is kept separate from the personal information in your Account. Other cookies are used to enhance your use of the Website, such as remembering that you are logged in. You are able to minimize or block cookies using the privacy settings in your\r\ninternet browser, but this may restrict your use of the Website. For general information on cookies, see allaboutcookies.org.</p><p>(G) We will only use the information we collect through the Website for the following purposes: (i) forwarding important information relating to the Website and other requested information; (ii) contacting you in response to your feedback or inquiry to\r\ndiscuss our services; (iii) monitoring Website performance; (iv) improving our Website and services to you; (v) internal administration; and (vi) other purposes that are in accordance with your instructions. Except as provided in this Privacy Policy,\r\nour Terms of Use, or as set forth when you submit the information, we will not give, sell, trade or otherwise disclose any personal information about you to a third party without your prior approval, except we reserve the right to disclose information\r\nabout you if we are required to do so by law, with respect to copyright and other intellectual property infringement claims, to fulfill a government request, or to protect or defend our legal rights or property, or Website, or other users.</p><p>(H)&nbsp;Your web browser may offer you a &ldquo;Do Not Track&rdquo; option, which allows you to signal to operators of websites and web applications and services (including behavioral advertising services) that you do not wish such operators to track\r\ncertain of your online activities over time and across different websites. We&nbsp;honor&nbsp;any web browser &ldquo;Do Not Track&rdquo; signals or other mechanisms that provide you with the ability to exercise choice regarding the collection of personally\r\nidentifiable information about your online activities over time and across third-party websites or online services.</p><p>(I) This Website may contain links to other sites. We are not responsible for the privacy practices of linked sites. We strongly encourage you to read the privacy policy of the linked websites as they may contain further terms and conditions that apply\r\nto you.</p><p>(J) European Privacy Rights for EEA Residents.<strong>&nbsp;</strong></p><p>You have the right to ask us not to process your personal data for marketing purposes. We will usually inform you (before collecting your personal data) if we intend to use your personal data for such purposes or if we intend to disclose your personal\r\ndata to any third party for such purposes. You can exercise your right to prevent such processing by checking certain boxes on the forms we use to collect your personal data. You can also exercise the right by contacting us directly.&nbsp;</p><p>In certain circumstances, you have the right to: (a) request access to any personal data we hold about you and related data, (b) obtain without undue delay the rectification of any inaccurate personal data, (c) request that your personal data be deleted\r\nprovided that the personal data is not required by us for (i) compliance with a legal obligation under European or Member State law or other applicable law or (ii) the establishment, exercise or defense of a legal claim, (d) prevent or restrict processing\r\nof your personal data, except to the extent processing is required (i) to comply with a legal obligation under European or Member State law or applicable law or (ii) for the establishment, exercise or defense of legal claims; and (e) request transfer\r\nof your personal data directly to a third party where this is technically feasible.</p><p>If you are an EEA Resident in France, you also have the right to set guidelines for the retention and communication of your personal data after your death.</p><p>If you reside in a jurisdiction other than the European Economic Area, you may also have similar rights to the above. Please contact us at [<a href=\"mailto:support@cosmicjs.com\">support@cosmicjs.com</a>] if you would like to exercise one of these rights,\r\nand we will comply with any request to the extent required under applicable law.</p><p>In addition, where you believe that we have not complied with its obligation under this Privacy Policy or European law, you have the right to make a complaint to an EU Data Protection Authority, such as the UK Information Commissioner&rsquo;s Office.&nbsp;</p><p>You can exercise any of these rights by contacting us at [<a href=\"mailto:support@cosmicjs.com\">support@cosmicjs.com</a>] or write to us at: Cosmic JS, [3208 Bonniebrook Dr. Plano, TX 75075 USA].</p><p>(K) How Long We Store Your Personal Data&nbsp;</p><p>We will only retain your personal data, in a form which permits us to identify you, for as long as necessary to fulfill the purposes we collected it for. We will retain and use your personal data as necessary to satisfy any legal, accounting or reporting\r\nrequirements, to resolve disputes or to enforce our agreements and rights. After that, we will either securely delete or anonymize your personal data so that it cannot be linked back to you.</p><p>(L) We may change this Privacy Policy in our sole discretion. Such changes will be effective when a notice of the change is made available on the Website. If you do not agree with such changes, you must discontinue use of the Website. Continued use of\r\nthe Website after the changes have been implemented will indicated acceptance by you of the changes.</p><p>(M) We value your information. While we take reasonable precautions to preserve the security of your information, please be aware that we cannot promise that your use of our Website will be confidential, and we cannot promise that any information you\r\nprovide to us is perfectly secure. While using our Website, you may also become aware of confidential information about us or another user. You promise not to disclose any confidential information made available to you through the Website to any other\r\nperson.</p><p>(N) Residents of the State of California, under certain provisions of the California Civil Code, have the right to request from companies conducting business in California a list of all third parties to which the company has disclosed certain personally\r\nidentifiable information as defined under California law during the preceding year for third party direct marketing purposes. You are limited to one request per calendar year. In your request, please attest to the fact that you are a California resident\r\nand provide a current California address for our response.</p><p>(O) The terms set forth in this Section 7 are the sole statement of our Privacy Policy with respect to this Website and the Site, and no summary, modification, restatement or other version thereof, or other privacy statement or policy, in any form, is\r\nvalid unless we post a new or revised policy to the Website.</p><p>(K) To ask questions or comment about this Privacy Policy and our privacy practices or need to reach us for any other reason, you may contact us by e-mail at [<a href=\"mailto:support@cosmicjs.com\">support@cosmicjs.com</a>] or by mail at Cosmic JS Inc,\r\n[3208 Bonniebrook Dr. Plano, TX 75075 USA].</p><h4><br></h4><h4>8. Indemnification</h4><p>You agree to indemnify and hold harmless Cosmic JS and its officers, directors, employees, members, successors, agents, affiliates, subsidiaries, and their related companies from and against any and all claims, liabilities, losses, damages, obligations,\r\ncosts and expenses (including reasonable attorneys&rsquo; fees and costs) arising out of, related to, or that may arise in connection with: (i) your access to or use of the Website; (ii) User Content provided by you or through creation or publication\r\nof a Site and any other use of your Account; (iii) any actual or alleged violation or breach by you of these Terms of Use; (iv) any actual or alleged breach of any representation, warranty, or covenant that you have made to us; or (v) your acts or omissions.\r\nYou agree to cooperate fully with us in the defense of any claim that is the subject of your obligations hereunder.</p><h4><br></h4><h4>9. Disclaimers</h4><p>YOU EXPRESSLY AGREE THAT USE OF THE WEBSITE IS AT YOUR SOLE RISK. THE WEBSITE AND WEBSITE CONTENT ARE PROVIDED ON AN &ldquo;AS IS&rdquo; AND &ldquo;AS AVAILABLE&rdquo; BASIS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED. WITHOUT LIMITING THE\r\nFOREGOING AND TO THE FULLEST EXTENT PERMITTED BY LAW, COSMIC JS AND ITS OFFICERS, DIRECTORS, EMPLOYEES, PARENTS, PARTNERS, SUCCESSORS, AGENTS, DISTRIBUTION PARTNERS, AFFILIATES, SUBSIDIARIES, AND THEIR RELATED COMPANIES DISCLAIM ANY AND ALL WARRANTIES\r\nINCLUDING ANY: (1) WARRANTIES THAT THE WEBSITE WILL MEET YOUR REQUIREMENTS; (2) WARRANTIES CONCERNING THE AVAILABILITY, ACCURACY, SECURITY, USEFULNESS, TIMELINESS, OR INFORMATIONAL CONTENT OF THE WEBSITE OR WEBSITE CONTENT; (3) WARRANTIES OF TITLE, NON-\r\nINFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE; (4) WARRANTIES FOR SERVICES OR GOODS RECEIVED THROUGH OR ADVERTISED ON OUR WEBSITE OR ACCESSED THROUGH THE WEBSITE; (5) WARRANTIES CONCERNING THE ACCURACY OR RELIABILITY OF THE RESULTS\r\nTHAT MAY BE OBTAINED FROM THE USE OF THE WEBSITE; (6) WARRANTIES THAT YOUR USE OF THE WEBSITE WILL BE SECURE OR UNINTERRUPTED; AND (7) WARRANTIES THAT ERRORS IN THE SOFTWARE WILL BE CORRECTED.</p><h4><br></h4><h4>10. Limitation on Liability</h4><p>(A) UNDER NO CIRCUMSTANCES SHALL COSMIC JS OR ITS OFFICERS, DIRECTORS, EMPLOYEES, PARENTS, PARTNERS, SUCCESSORS, AGENTS, DISTRIBUTION PARTNERS, AFFILIATES, SUBSIDIARIES, OR THEIR RELATED COMPANIES BE LIABLE FOR INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL\r\nOR EXEMPLARY DAMAGES (EVEN IF COSMIC JS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES), ARISING OUT OF, RELATING TO, OR IN ANY WAY CONNECTED WITH THE WEBSITE OR THESE TERMS OF USE. YOUR SOLE REMEDY FOR DISSATISFACTION WITH THE WEBSITE INCLUDING,\r\nWITHOUT</p><p>LIMITATION, THE WEBSITE CONTENT IS TO STOP USING THE WEBSITE. SUCH LIMITATION SHALL ALSO APPLY WITH RESPECT TO DAMAGES INCURRED BY REASON OF SERVICES OR PRODUCTS RECEIVED THROUGH OR ADVERTISED IN CONNECTION WITH ANY OF THE WEBSITE OR ANY LINKS ON THE\r\nWEBSITE, AS WELL AS BY REASON OF ANY INFORMATION OR ADVICE RECEIVED THROUGH OR ADVERTISED IN CONNECTION WITH ANY OF THE WEBSITE OR ANY LINKS ON THE WEBSITE.</p><p>(B) NOTWITHSTANDING ANYTHING TO THE CONTRARY CONTAINED HEREIN, IN NO EVENT SHALL THE CUMULATIVE LIABILITY OF COSMIC JS AND ITS OFFICERS, DIRECTORS, EMPLOYEES, PARENTS, PARTNERS, SUCCESSORS, AGENTS, DISTRIBUTION PARTNERS, AFFILIATES, SUBSIDIARIES, AND\r\nTHEIR RELATED COMPANIES EXCEED THE GREATER OF THE TOTAL PAYMENTS RECEIVED FROM YOU BY COSMIC JS DURING THE PRECEDING TWELVE (12) MONTH PERIOD OR $100. FURTHERMORE, YOU AGREE THAT ANY CAUSE OF ACTION ARISING OUT OF, RELATING TO, OR IN ANY WAY CONNECTED\r\nWITH ANY OF THE WEBSITE OR THESE TERMS OF USE MUST COMMENCE WITHIN ONE (1) YEAR AFTER THE CAUSE OF ACTION ACCRUES; OTHERWISE, SUCH CAUSE OF ACTION SHALL BE PERMANENTLY BARRED.</p><p>(C) In some jurisdictions limitations of liability are not permitted. In such jurisdictions, some of the foregoing limitations may not apply to you. These limitations shall apply to the fullest extent permitted by law.</p><h4><br></h4><h4>11. Termination</h4><p>(A) Publication of a Site is not an automatic right; it is a benefit for users who follow our reasonable rules. We hope that you will be with us for a long time, but we do reserve the right in our sole discretion (acting reasonably of course) and at any\r\ntime to terminate or suspend your Site and/or block your access to the Website for any reason including, without limitation if you have failed to comply with these Terms of Use. You agree that Cosmic JS shall not be liable to you or any third party for\r\nany termination or suspension of your Account or for blocking your access to the Website.</p><p>(B) Any suspension or termination shall not affect your obligations to us under these Terms of Use. The provisions of these Terms of Use which by their nature should survive the suspension or termination of your Membership or these Terms of Use shall\r\nsurvive including, but not limited to indemnities, releases, disclaimers, limitations on liability, choice of law, no class action, no trial by jury and all of the miscellaneous provisions in Section 16.</p><h4><br></h4><h4>12. Copyright Policy</h4><p>We respect the intellectual property rights of others and expect users to do the same. In appropriate circumstances and at our sole discretion, we may terminate and/or disable the Site and/or Account of users suspected to be infringing the copyrights\r\n(or other intellectual property rights) of others. Additionally, in appropriate circumstances and in our sole discretion, we may remove or disable access to material on the Website or any Site that may be infringing or the subject of infringing activity.</p><h4><br></h4><h4>13. Choice of Law; Jurisdiction and Venue</h4><p>These Terms of Use shall be construed in accordance with the laws of the State of Texas without regard to its conflict of laws rules. Any legal proceedings against Cosmic JS that may arise out of, relate to, or be in any way connected with our Website\r\nor these Terms of Use shall be brought exclusively in the state and federal courts of Dallas, TX and you waive any jurisdictional, venue, or inconvenient forum objections to such courts.</p><h4><br></h4><h4>14. No Class Actions</h4><p>TO THE EXTENT ALLOWED BY LAW, WE EACH WAIVE ANY RIGHT TO PURSUE DISPUTES ON A CLASSWIDE BASIS; THAT IS, TO EITHER JOIN A CLAIM WITH THE CLAIM OF ANY OTHER PERSON OR ENTITY, OR ASSERT A CLAIM IN A REPRESENTATIVE CAPACITY ON BEHALF OF ANYONE ELSE IN ANY\r\nLAWSUIT, ARBITRATION OR OTHER PROCEEDING.</p><h4><br></h4><h4>15. No Trial By Jury</h4><p>TO THE EXTENT ALLOWED BY LAW, WE EACH WAIVE ANY RIGHT TO TRIAL BY JURY IN ANY LAWSUIT, ARBITRATION OR OTHER PROCEEDING.</p><h4><br></h4><h4>16. Amendment; Additional Terms</h4><p>(A) We reserve the right in our sole discretion and at any time and for any reason, to modify or discontinue any aspect or feature of the Website or to modify these Terms of Use. In addition, we reserve the right to provide you with operating rules or\r\nadditional terms that may govern your use of the Website generally, unique parts of the Website, or both (&ldquo;Additional Terms&rdquo;). Any Additional Terms that we may provide to you will be incorporated by reference into these Terms of Use. To the\r\nextent any Additional Terms conflict with these Terms of Use, the Additional Terms will control.</p><p>(B) Modifications to these Terms of Use or Additional Terms will be effective immediately upon notice, either by posting on the Website or by notification by email or conventional mail. It is your responsibility to review the Terms of Use and the Website\r\nfrom time to time for any changes or Additional Terms. Your access and use of the Website or any Site following any modification of these Terms of Use or the provision of Additional Terms will signify your assent to and acceptance of the same.</p><h4><br></h4><h4>17. Miscellaneous</h4><p>(A) No waiver by either party of any breach or default hereunder shall be deemed to be a waiver of any preceding or subsequent breach or default. The section headings used herein are for convenience only and shall not be given any legal import.</p><p>(B) If any part of these Terms of Use is unlawful or unenforceable for any reason, we both agree that only that part of the Terms of Use shall be stricken and that the remaining terms in the Terms of Use shall not be affected.</p><p>(C) These Terms of Use (including any Additional Terms incorporated by reference) constitute the entire agreement of the parties with respect to the subject matter hereof, and supersede all previous written or oral agreements between us with respect to\r\nsuch subject matter.&nbsp;</p><p>(D) You may not assign these Terms of Use or assign any rights or delegate any obligations hereunder, in whole or in part, without our prior written consent. Any such purported assignment or delegation by you without the appropriate prior written consent\r\nwill be null and void and of no force and effect.</p>","metafields":[],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"pages","created":"2016-03-18T05:57:20.646Z","status":"published","modified":"2016-03-19T17:14:14.369Z","modified_at":"2018-05-31T16:06:47.543Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-05-31T16:06:47.543Z","metadata":null},{"_id":"620d83c5665c10000987c93b","order":10,"slug":"deprecation-of-cosmic-functions","title":"Deprecation of Cosmic Functions","content":"<p>Cosmic Functions, which <a href=\"https://www.cosmicjs.com/blog/introducing-cosmic-functions\" rel=\"noopener noreferrer\" target=\"_blank\">we announced back in 2018</a>, is now scheduled for deprecation.<br><br><strong>When will it be removed?</strong><br>If you have used this feature, it is scheduled for removal in the current dashboard (and will not be included in the <a href=\"https://app-v2.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">new dashboard</a>).</p><p>You can continue to use the feature until the removal date. The date for removal from all new and existing Buckets is <strong>March 29, 2022*</strong></p><p>* This will not affect any aspects of the core content management product or service.<br>** If you have already deployed functions to your AWS account through Cosmic, this will not affect the status of those functions. You will still be able to manage your functions through AWS.<br><br><strong>Why is it being deprecated?</strong><br>At the time we released Cosmic Functions, there were not a lot of options to deploy simple serverless functions easily in a dashboard interface. We actually used it quite a bit for some use cases internally, but they proved to not be very useful for our customers. And today there appears to be more (better) options in the marketplace for serverless function deployment including Serverless, Netlify, Vercel, and more.</p><p>We have decided to sunset the feature so we can focus more efforts on our core content management and delivery products and services.<br><br><strong>Contact Us</strong><br>If you have any questions or concerns about the removal of this feature please <a href=\"mailto:support@cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">contact support</a>.</p><p>Thank you,<br>Tony Spiro<br>Cosmic CEO</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"U6eyd0UpKu","value":"2022-02-17"},{"children":null,"type":"object","title":"Author","key":"author","id":"ZJ2SRyzpCY","value":"5768b253163172890e00002c","object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"ZczM65v5nl","value":"","url":null,"imgix_url":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2022-02-16T23:07:49.865Z","created_by":"5357ef811693be2118000001","modified_at":"2022-02-18T19:23:05.949Z","created":"2022-02-16T23:07:49.865Z","status":"published","thumbnail":"","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2022-02-18T19:23:05.949Z","metadata":{"published_date":"2022-02-17","author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":null,"imgix_url":null}}},{"_id":"5bd206599dca8d10e941b69b","order":10,"slug":"derive-systems-runs-on-cosmic-js","title":"Derive Systems runs on Cosmic","content":"<p dir=\"ltr\"><a href=\"https://derivesystems.com\" rel=\"noopener noreferrer\" target=\"_blank\">Derive Systems</a>  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. </p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/3d484f50-d881-11e8-a05d-ade53a62d98b-Derive Systems.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">The team at Derive Systems was in search of a headless CMS that would give their developers flexibility out-of-the-box while enabling their content managers to manage content in a familiar and modern CMS Dashboard. They chose Cosmic due to its easy content modeling tools for their Blog, Press, About and Team Sections. Derive now runs a Next.js, React and Express framework that utilizes the Cosmic GraphQL API to deliver its content.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/ea968040-d882-11e8-8793-13fe540ddec9-Derive Systems GIF.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&ldquo;Leveraging the Cosmic GraphQL API allows for easy updates to our news and blog, while keeping payloads small and fast. Integration with Cosmic could not be easier thanks to their great support. We look forward to developing more features on the platform.&rdquo;</p><br><p><cite>&mdash; Dustin Brink, Front End Developer at Derive Systems&nbsp;</cite></p></blockquote>","metafields":[{"value":"Derive Systems","key":"company","title":"Company","type":"text","children":null},{"value":"Automotive","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Derive Systems  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","imgix_url":"https://imgix.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-25T18:07:21.426Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-11-15T14:51:19.007Z","metadata":{"company":"Derive Systems","industry_type":"Automotive","teaser":"Derive Systems  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. \n","logo":{"url":"https://cdn.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","imgix_url":"https://imgix.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg"}}},{"_id":"6271bf108abd490009db0963","order":10,"slug":"new-dashboard-updates-global-nav-projects-billing-and-more","title":"New Dashboard Updates: Global Nav, Projects, Billing, and more!","content":"<p>We are excited to announce big updates to the new Cosmic dashboard which are now available for testing. <a href=\"https://app-v2.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Sign up for the alpha preview</a> to check out the new features and read about the updates below:</p><h3><strong>Improvements</strong></h3><p><strong>1. Global navigation layout</strong><br>The global navigation has been moved to the top bar along with the search feature. This provides for easier access to core features and opens up the information architecture.</p><p><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/cca344a0-ccbd-11ec-831d-dfdedfe3228f-dashboard-nav.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><p><strong>2. Updated Bucket organization</strong><br>Buckets organization has gone through an overhaul. We now include a secondary menu to make it possible to add lots of content types as well as media folders. Media folders now include emoji and edit capabilities.</p><p><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/8b9f05b0-ccbe-11ec-831d-dfdedfe3228f-media.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><p><strong>3. Updated Projects</strong><br>One of the biggest changes in this release is the expansion of the Project as a higher level component in our service. Projects now include:</p><ul><li data-empty=\"true\">Team members with main roles and granular Bucket permissions.</li><li>Billing plans. Payment management service available (Stripe test mode).</li></ul><p><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/7aa8deb0-ccbf-11ec-831d-dfdedfe3228f-add-team.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><p><strong>4. User billing</strong><br>You can now add a payment method (Stripe test mode) to your user account which can be used on any billable resource. Invoices are also available for testing.</p><p><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/9b335d50-ccbe-11ec-831d-dfdedfe3228f-add-payment-method.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><p><strong>5. Extensions</strong><br>Extensions have been improved with simpler organization and display editing.</p><p><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/f5a8a4a0-ccc0-11ec-831d-dfdedfe3228f-extensions.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><p><br></p><h3><strong>Breaking Changes</strong></h3><p>There is new logic for Project / Bucket roles and permissions. So any previously added test projects will need to be re-added. You can still import any Bucket from the old dashboard into the new dashboard by going to <em>Bucket Settings &gt; Import / Export</em>.</p><h3><strong>Join the Alpha</strong></h3><p>We are proud of the progress so far and excited for you to test out these new features as we continue to build the best content management solution in the world!</p><p>If you haven&#39;t joined, <a href=\"https://app-v2.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">sign up to get on the waitlist</a> to preview the new dashboard including these new features.</p><h3><strong>Get Some Swag <span class=\"fr-emoticon fr-deletable\">😎</span>&nbsp;</strong></h3><p>After joining the waitlist, share your personal link (found in the confirmation email) on social media to be entered to receive free Cosmic swag including hoodies, tshirts, coffee mugs, and stickers.</p><p>Stay tuned for more exciting updates! Follow us <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">on Twitter</a>, and join our team <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">on Slack</a> to\r\nget the latest on the new dashboard progress.</p><p>Cosmic Team</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"wMl8Ea2Shj","value":"5ffa1d1e0046b0000799cb7b","required":true,"object_type":"authors","object":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"8ZJU4OPLfp","value":"<p>We&#39;re excited to announce big updates to the new dashboard.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"evBzvkaTua","value":"a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png","url":"https://cdn.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png","imgix_url":"https://imgix.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"criII2q966","value":"We're excited to announce big updates to the new dashboard."},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"arHKwAwdJV","value":"2022-05-05"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2022-05-03T23:47:28.108Z","created_by":"5357ef811693be2118000001","modified_at":"2022-05-05T22:24:47.761Z","created":"2022-05-03T23:47:28.108Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2022-05-05T22:24:47.761Z","metadata":{"author":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}}},"teaser":"<p>We&#39;re excited to announce big updates to the new dashboard.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png","imgix_url":"https://imgix.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png"},"seo_meta_description":"We're excited to announce big updates to the new dashboard.","published_date":"2022-05-05"}},{"_id":"594a7d68aa75cb9c6000078f","order":10,"slug":"david-martin","title":"David Martin","content":"","metafields":[{"value":"d305d5a0-568a-11e7-9700-5ba5cd7a4f16-david.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/d305d5a0-568a-11e7-9700-5ba5cd7a4f16-david.jpeg","imgix_url":"https://imgix.cosmicjs.com/d305d5a0-568a-11e7-9700-5ba5cd7a4f16-david.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-06-21T14:06:32.593Z","created_by":"5357ef811693be2118000001","created":"2017-06-21T14:06:32.593Z","status":"published","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/d305d5a0-568a-11e7-9700-5ba5cd7a4f16-david.jpeg","imgix_url":"https://imgix.cosmicjs.com/d305d5a0-568a-11e7-9700-5ba5cd7a4f16-david.jpeg"}}},{"_id":"5ef3871d38f28e0008b99778","slug":"sanity-headless-cms","title":"Sanity Headless CMS","content":"<p><span style=\"color: rgb(88, 96, 105);\">Sanity is a hosted API with an open source CMS dashboard that you have to maintain yourself.&nbsp;</span><span style=\"color: rgb(88, 96, 105);\">Cosmic is an alternative to Sanity that your developers and content creators will love.</span></p><h3><br>Developers and Creators</h3><p><span style=\"color: rgb(88, 96, 105);\">Sanity</span><span style=\"color: rgb(88, 96, 105);\">, like Cosmic, offers both a REST and GraphQL API. Check out the&nbsp;</span><a href=\"https://docs.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic API docs<span style=\"color: rgb(88, 96, 105);\">&nbsp;</span></a><span style=\"color: rgb(88, 96, 105);\">and the&nbsp;</span><a href=\"https://www.sanity.io/docs\" rel=\"noopener noreferrer\" target=\"_blank\">Sanity API docs</a><span style=\"color: rgb(88, 96, 105);\">&nbsp;to see the difference in approach.</span></p><p><span style=\"color: rgb(88, 96, 105);\">Cosmic provides everything your team of developers and content creators need: powerful and intuitive APIs for developers, and an easy-to-use dashboard for content creators. <span style=\"color: rgb(88, 96, 105);\">We&#39;ve removed all complexity and CMS maintenance, so your team can focus on building great products faster, together.</span></span></p><h3><br>CMS Dashboard</h3><p><span style=\"color: rgb(88, 96, 105);\">With Sanity, you will need to maintain and host the Dashboard yourself. With Cosmic, we provide a hosted web dashboard so can focus on what really matters: creating great content and user experiences.</span></p>","metafields":[{"children":null,"type":"switch","title":"Include in link list","key":"include_in_link_list","id":"sulKPvHyB3","value":true,"options":"yes,no"},{"children":null,"type":"text","title":"Vendor Name","key":"vendor_name","id":"MDo2FgS3gy","value":"Sanity Headless CMS"},{"children":null,"type":"file","title":"Logo","key":"logo","id":"ue1lRSWWw6","value":"8d32a070-b583-11ea-b972-872e7580d677-sanity-headless-cms.png","url":"https://cdn.cosmicjs.com/8d32a070-b583-11ea-b972-872e7580d677-sanity-headless-cms.png","imgix_url":"https://imgix.cosmicjs.com/8d32a070-b583-11ea-b972-872e7580d677-sanity-headless-cms.png"},{"children":null,"type":"textarea","title":"Tech","key":"tech","id":"liKR8W22bU","value":"React Dashboard. Backend tech not provided."},{"children":null,"type":"textarea","title":"Scalability","key":"scalability","id":"nY4NK6XhnN","value":"Dashboard hosting is limited by your servers, hosting provider, and budget."},{"children":null,"type":"textarea","title":"Security","key":"security","id":"kyZwe0l0YD","value":"You manage the dashboard security yourself."},{"children":null,"type":"textarea","title":"Maintenance","key":"maintenance","id":"52davW4RUy","value":"You deploy, host, and maintain everything yourself. Along with your application and content, you need to maintain updates and security for your CMS dashboard."},{"children":null,"type":"textarea","title":"Caching","key":"caching","id":"MXLE4BdVPh","value":"Caching included on the API."},{"children":null,"type":"textarea","title":"Media CDN","key":"media_cdn","id":"2zJME7bTVp","value":"CDN included."},{"children":null,"type":"textarea","title":"Image Processing","key":"image_processing","id":"laMSvIXx5Q","value":"Image sizes and optimizations capabilities."},{"children":null,"type":"textarea","title":"Extendability","key":"extendability","id":"R0uXiiRIMZ","value":"Themes and integrations."},{"children":null,"type":"textarea","title":"Front end","key":"front_end","id":"Z2yvj274rU","value":"Front end is decoupled from the backend CMS."},{"children":null,"type":"textarea","title":"Number of Projects","key":"number_of_projects","id":"jKoeI5K45Q","value":"One login, multiple projects."},{"children":null,"type":"html-textarea","title":"Costs","key":"costs","id":"KAQOgl96Lq","value":"<p>You will need to hire developer resources to maintain the CMS Dashboard. Average salary of a full-stack developer is <a href=\"https://neuvoo.com/salary/?job=Full+Stack+Developer\" target=\"_blank\">$111,600 per year</a>. You may need to hire 1-3 developers to maintain the CMS.</p>"},{"children":null,"type":"text","title":"Cost Value","key":"cost_value","id":"bK5uqUpzwf","value":"$223,200"},{"children":null,"type":"text","title":"Cost Text","key":"cost_text","id":"w7ABWSWr0O","value":"per year"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"cms-competitors","created":"2020-06-24T17:02:21.811Z","created_at":"2020-06-24T17:02:21.811Z","modified_at":"2020-06-28T20:51:43.033Z","status":"published","locale":null,"modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-28T20:51:43.033Z","unpublish_at":null,"order":10,"metadata":{"include_in_link_list":true,"vendor_name":"Sanity Headless CMS","logo":{"url":"https://cdn.cosmicjs.com/8d32a070-b583-11ea-b972-872e7580d677-sanity-headless-cms.png","imgix_url":"https://imgix.cosmicjs.com/8d32a070-b583-11ea-b972-872e7580d677-sanity-headless-cms.png"},"tech":"React Dashboard. Backend tech not provided.","scalability":"Dashboard hosting is limited by your servers, hosting provider, and budget.","security":"You manage the dashboard security yourself.","maintenance":"You deploy, host, and maintain everything yourself. Along with your application and content, you need to maintain updates and security for your CMS dashboard.","caching":"Caching included on the API.","media_cdn":"CDN included.","image_processing":"Image sizes and optimizations capabilities.","extendability":"Themes and integrations.","front_end":"Front end is decoupled from the backend CMS.","number_of_projects":"One login, multiple projects.","costs":"<p>You will need to hire developer resources to maintain the CMS Dashboard. Average salary of a full-stack developer is <a href=\"https://neuvoo.com/salary/?job=Full+Stack+Developer\" target=\"_blank\">$111,600 per year</a>. You may need to hire 1-3 developers to maintain the CMS.</p>","cost_value":"$223,200","cost_text":"per year"}},{"_id":"5ea6702751a87f0007876087","order":10,"slug":"express-cms","title":"Express CMS","content":"<p>Cosmic JS makes it easy to manage content for your Express applications. Install the <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Official Cosmic JS JavaScript Client</a> to integrate content into your Express app in minutes. &nbsp;Get a feel for Express by taking a spin through <a href=\"https://cosmicjs.com/apps?languages=Express\" rel=\"noopener noreferrer\" target=\"_blank\">our Express Apps</a> and check out the tutorials below.</p><h3>Express Quickstart</h3><p><a href=\"https://github.com/cosmicjs/node-starter\" rel=\"noopener noreferrer\" target=\"_blank\">Install a Cosmic-powered Express app in seconds</a> 🔥</p><pre>npm i -g cosmic-cli\r\ncosmic init node-starter\r\ncd node-starter\r\ncosmic start</pre><h3>Express CMS Articles</h3><p><a href=\"https://cosmicjs.com/articles?q=node\" rel=\"noopener noreferrer\" target=\"_blank\">Developer Community: Node.js Articles</a><br><a href=\"https://cosmicjs.com/blog/how-to-build-a-simple-blog-using-nodejs\">How to Build a Simple Blog Using Node.js</a><br><a href=\"https://cosmicjs.com/blog/how-to-build-a-nodejs-user-management-app\">How to Build a Node.js User Management App</a><br><a href=\"https://cosmicjs.com/blog/how-to-build-a-multi-language-static-website-without-ajax\">How to Build a Multi-Language Static Website Without AJAX</a><br><a href=\"https://cosmicjs.com/blog/how-to-build-a-cross-platform-blog-using-react-native-and-nodejs\">How to Build a Cross-Platform Blog Using React Native and Node.js</a><br><a href=\"https://cosmicjs.com/blog/how-to-build-a-facebook-bot-app-using-nodejs\">How to Build a Facebook Bot App Using Node.js</a>&nbsp;</p><h3>Express CMS Resources</h3><p><a href=\"https://github.com/cosmicjs/nodejs-website-boilerplate\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js Website Boilerplate</a><br><a href=\"https://cosmicjs.com/docs\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic JS Docs</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\"></a><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official JavaScript Client</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3>Examples</h3><pre>npm i cosmicjs</pre><p>Then in your JavaScript file, get your content:</p><pre>const Cosmic = require(&#39;cosmicjs&#39;)\r\nconst bucket = Cosmic().bucket({ slug: &#39;creative-agency&#39; })\r\nconst objects = (await bucket.getObjects()).objects</pre>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"LzAXuphjjL","value":"d9ea42e0-8849-11ea-8e16-e7cd20df21fe-expressjs.svg","url":"https://cdn.cosmicjs.com/d9ea42e0-8849-11ea-8e16-e7cd20df21fe-expressjs.svg","imgix_url":"https://imgix.cosmicjs.com/d9ea42e0-8849-11ea-8e16-e7cd20df21fe-expressjs.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"y85qTtMNnV","value":"421fd000-884a-11ea-8e16-e7cd20df21fe-expressjs-icon.svg","url":"https://cdn.cosmicjs.com/421fd000-884a-11ea-8e16-e7cd20df21fe-expressjs-icon.svg","imgix_url":"https://imgix.cosmicjs.com/421fd000-884a-11ea-8e16-e7cd20df21fe-expressjs-icon.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"yXPPXZUlzK","value":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for Express websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"GZ7alvEQK4","value":"Express"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"hsrnZrVDFB","value":"Cosmic is the best CMS for Express websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"LeZLCAKp36","value":"e3e139c0-8849-11ea-8e16-e7cd20df21fe-Expressjs.png","url":"https://cdn.cosmicjs.com/e3e139c0-8849-11ea-8e16-e7cd20df21fe-Expressjs.png","imgix_url":"https://imgix.cosmicjs.com/e3e139c0-8849-11ea-8e16-e7cd20df21fe-Expressjs.png"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"3tVU6kyh2E","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"5aeEYvSEcV","value":"Best Headless CMS for Express"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"6s5FCsv1ET","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-22T23:07:51.159Z","created_by":"5357ef811693be2118000001","created":"2020-04-27T05:39:51.913Z","status":"published","modified_at":"2020-06-27T19:14:06.906Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-27T19:14:06.906Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/d9ea42e0-8849-11ea-8e16-e7cd20df21fe-expressjs.svg","imgix_url":"https://imgix.cosmicjs.com/d9ea42e0-8849-11ea-8e16-e7cd20df21fe-expressjs.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/421fd000-884a-11ea-8e16-e7cd20df21fe-expressjs-icon.svg","imgix_url":"https://imgix.cosmicjs.com/421fd000-884a-11ea-8e16-e7cd20df21fe-expressjs-icon.svg"},"blurb":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for Express websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Express","seo_description":"Cosmic is the best CMS for Express websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/e3e139c0-8849-11ea-8e16-e7cd20df21fe-Expressjs.png","imgix_url":"https://imgix.cosmicjs.com/e3e139c0-8849-11ea-8e16-e7cd20df21fe-Expressjs.png"},"code_example":"","seo_title":"Best Headless CMS for Express","videos":[]}},{"_id":"5d488f0937b36204a4e36929","order":10,"slug":"cms-software-for-blogs","title":"CMS Software for Blogs","content":"<p>Cosmic provides flexible CMS Software for developers and content creators. Companies managing blog content use Cosmic CMS Software because the Dashboard is simple and intuitive to manage content, workflows and team members.&nbsp;</p><p>Teams using CMS Software to power blog content don&#39;t have to maintain their own server and content management system. By focusing on apps and not infrastructure, teams are enabled to build apps faster, together.&nbsp;</p><h3><br>What is Headless CMS Software?</h3><p>Headless CMS Software works by providing non-technical editors with a Dashboard UI to model, create and publish content while providing developers with API tools and resources to integrate content with any website or app. By decoupling content from code, teams create a central content repository that can power all of their content-powered applications.&nbsp;</p>","metafields":[{"children":null,"type":"text","title":"Solution Name","key":"solution_name","id":"SUhRrVkydt","value":"CMS Software for Blogs"},{"children":null,"type":"file","title":"Image","key":"image","id":"bqxL08lKfa","value":"a29e69e0-b7c2-11e9-8351-c9e19f12a182-ec1d5de0-9dc0-11e9-a5b4-e5df9f8049d3-Hackernoon.png","url":"https://cdn.cosmicjs.com/a29e69e0-b7c2-11e9-8351-c9e19f12a182-ec1d5de0-9dc0-11e9-a5b4-e5df9f8049d3-Hackernoon.png","imgix_url":"https://imgix.cosmicjs.com/a29e69e0-b7c2-11e9-8351-c9e19f12a182-ec1d5de0-9dc0-11e9-a5b4-e5df9f8049d3-Hackernoon.png"},{"children":null,"type":"objects","title":"Case Studies","key":"case_studies","id":"ES5Rnq4fQb","value":"596663e8880d69fb6c000194,5a2455620cb0e3291c00002e,59f102cbd4de657279002f97","object_type":"case-studies","objects":[{"_id":"596663e8880d69fb6c000194","slug":"joblift-elevates-their-stack","title":"Joblift Elevates Their Stack ","content":"<p>In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, <a href=\"https://joblift.co.uk\" rel=\"noopener noreferrer\" target=\"_blank\">Joblift</a> seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/16ac66c0-03d7-11e9-a9c3-c1326db90b81-DrzF-2BX0AA0WTE.jpg-large.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Joblift manages localized content to serve Job, Press and Blog feeds to its various markets, including the UK, Netherlands and Germany. Easy user roles and permissions equip their team with the tools they need to seamlessly run a global organization.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic has completely sped up our ability to upload our content easily and efficiently. With Cosmic we now have a smooth process for uploading press releases which reflects the quality content on our website.&rdquo;</p><p><cite>&mdash; Ashleigh Grady, Content Editor and Marketing Manager</cite></p></blockquote>","metafields":[{"value":"Joblift","key":"company","title":"Company","type":"text","children":null},{"value":"Career Services","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T18:01:12.194Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-12-19T21:44:38.361Z"},{"_id":"5a2455620cb0e3291c00002e","slug":"acculevel-deploys-a-blog","title":"Acculevel Deploys a Blog","content":"<p dir=\"ltr\"><a href=\"https://acculevel.com\" rel=\"noopener noreferrer\" target=\"_blank\">Acculevel</a> is Your Foundation Expert. Serving the Midwest United States for the last 20 years, Acculevel knows what it means to serve and do a job right. Customer retention, reviews and loyalty are the name of their game, so to optimize these efforts and keep customers engaged and informed, Acculevel is scaling up their digital presence through its upcoming website, a new mobile application and more. Led by a new Chief Technology Officer overseeing developers and content editors, here&#39;s how Acculevel is ensuring their own foundation is solid.<br><br>Mired in an installed <a href=\"https://hackernoon.com/cosmic-js-vs-wordpress-668608df4e22\" rel=\"noopener noreferrer\" target=\"_blank\">WordPress</a> system was leaving Acculevel without the flexibility needed to nimbly build and publish content campaigns to engage with customers. Acculevel&#39;s tech team is currently building out a new zippy website built on a <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a> stack, complete with API integrations for ACH Authentication (Plaid) and Payment Gateway (Stripe). Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editors to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/516cb890-daa8-11e7-92aa-b5a1b0875421-21761700_1534030483286380_3096937493413845441_n.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a seamless on-boarding experience for creating a Bucket to manage blog content for our growing organization. We needed a programming-language agnostic API to manage content both within our existing WordPress website as well as within our new Node.js web application. Cosmic fit the bill perfectly with its simple Object schema and powerful Metafields. With Cosmic, content is just data and you can pull it however you&#39;d like, wherever you like, allowing us &nbsp;to build new tools in the future such as survey tools, employee forums and more.&rdquo;</p><p><cite>&mdash; Dylan Marsh, Chief Technology Officer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Acculevel ","key":"company","title":"Company","type":"text","children":null},{"value":"Construction","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editor to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","imgix_url":"https://imgix.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-12-03T19:49:54.515Z","created_by":"5716b504e9c686d006000073","created":"2017-12-03T19:49:54.515Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null},{"_id":"59f102cbd4de657279002f97","slug":"datalyze-solutions-adds-blog-and-job-feeds","title":"Datalyze Solutions Adds a Blog Feed","content":"<p>Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier. That&#39;s why <a href=\"https://www.datalyze-solutions.com\" rel=\"noopener noreferrer\" target=\"_blank\">Datalyze Solutions</a> chooses Cosmic to deliver its content from the cloud for its Blog feeds.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/564c8f40-ca4d-11e7-a5c4-d31978c51f26-Screen Shot 2017-11-15 at 3.38.13 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic has been in use at Datalyze Solutions for more than one and a half years. Cosmic has become a critically important tool for us to publish blog posts quickly and easily. This way, our customers and partners can stay informed about the latest news from our company and other industry-relevant information. Cosmic offers exactly the flexibility and features we really need as content editors!&quot;</p><p>&mdash; Carolin Bauer, Content Editor and Marketing Manager</p></blockquote>","metafields":[{"value":"Datalyze Solutions","key":"company","title":"Company","type":"text","children":null},{"value":"Internet","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier.","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","imgix_url":"https://imgix.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-25T21:31:55.033Z","created_by":"5716b504e9c686d006000073","created":"2017-10-25T21:31:55.033Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null}]},{"children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"simple-react-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"simple-vue-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"gatsby-blog","type":"text","required":false}]}],"type":"repeater","title":"App Slugs","key":"app_slugs","id":"FQqCWi8ZFS","value":"simple-react-blog","repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}]},{"children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"wordpress-importer","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"export-to-csv","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"unsplash-photos","type":"text","required":false}]}],"type":"repeater","title":"Extension SLugs","key":"extension_slugs","id":"V5pOeLP4MS","value":"wordpress-importer","repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}]},{"children":null,"type":"textarea","title":"Testimonial","key":"testimonial","id":"j6Vh1FlapE","value":"\"When the opportunity to work with Cosmic came up, I jumped on the opportunity. Using an API-first content management platform like Cosmic was perfect (and super simple) for connecting best-in-class services like Algolia for search and SendGrid for email.  In terms of providing the framework for teams to quickly build quality professional apps, Cosmic is definitely onto something.”"},{"children":null,"type":"text","title":"Testimonial Credit","key":"testimonial_credit","id":"k723E3Ijnc","value":"David Smooke, CEO at Hacker Noon"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created_at":"2019-08-05T20:18:17.006Z","created_by":"5716b504e9c686d006000073","modified_at":"2020-05-06T05:34:46.695Z","created":"2019-08-05T20:18:17.006Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-05-06T05:34:46.695Z","unpublish_at":null,"metadata":{"solution_name":"CMS Software for Blogs","image":{"url":"https://cdn.cosmicjs.com/a29e69e0-b7c2-11e9-8351-c9e19f12a182-ec1d5de0-9dc0-11e9-a5b4-e5df9f8049d3-Hackernoon.png","imgix_url":"https://imgix.cosmicjs.com/a29e69e0-b7c2-11e9-8351-c9e19f12a182-ec1d5de0-9dc0-11e9-a5b4-e5df9f8049d3-Hackernoon.png"},"case_studies":[{"_id":"596663e8880d69fb6c000194","slug":"joblift-elevates-their-stack","title":"Joblift Elevates Their Stack ","content":"<p>In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, <a href=\"https://joblift.co.uk\" rel=\"noopener noreferrer\" target=\"_blank\">Joblift</a> seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/16ac66c0-03d7-11e9-a9c3-c1326db90b81-DrzF-2BX0AA0WTE.jpg-large.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Joblift manages localized content to serve Job, Press and Blog feeds to its various markets, including the UK, Netherlands and Germany. Easy user roles and permissions equip their team with the tools they need to seamlessly run a global organization.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic has completely sped up our ability to upload our content easily and efficiently. With Cosmic we now have a smooth process for uploading press releases which reflects the quality content on our website.&rdquo;</p><p><cite>&mdash; Ashleigh Grady, Content Editor and Marketing Manager</cite></p></blockquote>","metafields":[{"value":"Joblift","key":"company","title":"Company","type":"text","children":null},{"value":"Career Services","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T18:01:12.194Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-12-19T21:44:38.361Z","metadata":{"company":"Joblift","industry_type":"Career Services","teaser":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","logo":{"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}}},{"_id":"5a2455620cb0e3291c00002e","slug":"acculevel-deploys-a-blog","title":"Acculevel Deploys a Blog","content":"<p dir=\"ltr\"><a href=\"https://acculevel.com\" rel=\"noopener noreferrer\" target=\"_blank\">Acculevel</a> is Your Foundation Expert. Serving the Midwest United States for the last 20 years, Acculevel knows what it means to serve and do a job right. Customer retention, reviews and loyalty are the name of their game, so to optimize these efforts and keep customers engaged and informed, Acculevel is scaling up their digital presence through its upcoming website, a new mobile application and more. Led by a new Chief Technology Officer overseeing developers and content editors, here&#39;s how Acculevel is ensuring their own foundation is solid.<br><br>Mired in an installed <a href=\"https://hackernoon.com/cosmic-js-vs-wordpress-668608df4e22\" rel=\"noopener noreferrer\" target=\"_blank\">WordPress</a> system was leaving Acculevel without the flexibility needed to nimbly build and publish content campaigns to engage with customers. Acculevel&#39;s tech team is currently building out a new zippy website built on a <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a> stack, complete with API integrations for ACH Authentication (Plaid) and Payment Gateway (Stripe). Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editors to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/516cb890-daa8-11e7-92aa-b5a1b0875421-21761700_1534030483286380_3096937493413845441_n.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a seamless on-boarding experience for creating a Bucket to manage blog content for our growing organization. We needed a programming-language agnostic API to manage content both within our existing WordPress website as well as within our new Node.js web application. Cosmic fit the bill perfectly with its simple Object schema and powerful Metafields. With Cosmic, content is just data and you can pull it however you&#39;d like, wherever you like, allowing us &nbsp;to build new tools in the future such as survey tools, employee forums and more.&rdquo;</p><p><cite>&mdash; Dylan Marsh, Chief Technology Officer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Acculevel ","key":"company","title":"Company","type":"text","children":null},{"value":"Construction","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editor to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","imgix_url":"https://imgix.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-12-03T19:49:54.515Z","created_by":"5716b504e9c686d006000073","created":"2017-12-03T19:49:54.515Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"company":"Acculevel ","industry_type":"Construction","teaser":"Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editor to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","imgix_url":"https://imgix.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg"}}},{"_id":"59f102cbd4de657279002f97","slug":"datalyze-solutions-adds-blog-and-job-feeds","title":"Datalyze Solutions Adds a Blog Feed","content":"<p>Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier. That&#39;s why <a href=\"https://www.datalyze-solutions.com\" rel=\"noopener noreferrer\" target=\"_blank\">Datalyze Solutions</a> chooses Cosmic to deliver its content from the cloud for its Blog feeds.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/564c8f40-ca4d-11e7-a5c4-d31978c51f26-Screen Shot 2017-11-15 at 3.38.13 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic has been in use at Datalyze Solutions for more than one and a half years. Cosmic has become a critically important tool for us to publish blog posts quickly and easily. This way, our customers and partners can stay informed about the latest news from our company and other industry-relevant information. Cosmic offers exactly the flexibility and features we really need as content editors!&quot;</p><p>&mdash; Carolin Bauer, Content Editor and Marketing Manager</p></blockquote>","metafields":[{"value":"Datalyze Solutions","key":"company","title":"Company","type":"text","children":null},{"value":"Internet","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier.","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","imgix_url":"https://imgix.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-25T21:31:55.033Z","created_by":"5716b504e9c686d006000073","created":"2017-10-25T21:31:55.033Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"metadata":{"company":"Datalyze Solutions","industry_type":"Internet","teaser":"Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier.","logo":{"url":"https://cdn.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","imgix_url":"https://imgix.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png"}}}],"app_slugs":[{"slug":"simple-react-blog"},{"slug":"simple-vue-blog"},{"slug":"gatsby-blog"}],"extension_slugs":[{"slug":"wordpress-importer"},{"slug":"export-to-csv"},{"slug":"unsplash-photos"}],"testimonial":"\"When the opportunity to work with Cosmic came up, I jumped on the opportunity. Using an API-first content management platform like Cosmic was perfect (and super simple) for connecting best-in-class services like Algolia for search and SendGrid for email.  In terms of providing the framework for teams to quickly build quality professional apps, Cosmic is definitely onto something.”","testimonial_credit":"David Smooke, CEO at Hacker Noon"}},{"_id":"5bad1cabf394147a6754be79","slug":"stripe","title":"Stripe","content":"","metafields":[{"children":null,"type":"text","title":"Link","key":"link","id":"Euw71etcgW","value":"https://cosmicjs.com/articles/integrating-cosmic-powered-content-with-your-favorite-apps-using-zapier-jmm49t8k"},{"children":null,"type":"file","title":"Image","key":"image","id":"lWJDPFiTgH","value":"fc935bd0-8ed7-11ea-910b-435199f15a39-stripe.jpg","url":"https://cdn.cosmicjs.com/fc935bd0-8ed7-11ea-910b-435199f15a39-stripe.jpg","imgix_url":"https://imgix.cosmicjs.com/fc935bd0-8ed7-11ea-910b-435199f15a39-stripe.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"integrations","created":"2018-09-27T18:08:43.046Z","created_at":"2018-09-27T18:08:43.046Z","modified_at":"2020-05-05T13:54:51.912Z","status":"published","locale":null,"published_at":"2020-05-05T13:54:51.912Z","created_by":"5357ef811693be2118000001","order":10,"modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"link":"https://cosmicjs.com/articles/integrating-cosmic-powered-content-with-your-favorite-apps-using-zapier-jmm49t8k","image":{"url":"https://cdn.cosmicjs.com/fc935bd0-8ed7-11ea-910b-435199f15a39-stripe.jpg","imgix_url":"https://imgix.cosmicjs.com/fc935bd0-8ed7-11ea-910b-435199f15a39-stripe.jpg"}}},{"_id":"61547de7fe3a1f0008f72974","order":11,"slug":"webhook-props-now-available","title":"Webhook Props Now Available","content":"<p>You can now set <code>props</code> on webhooks to limit the data payload. This is useful for Objects with large data payloads as it allows you to limit the payload to just the data you need.</p><p><strong>How to use the new feature</strong><br>See the <a href=\"https://docs.cosmicjs.com/api-reference/objects#using-props\">props section in the Cosmic docs</a> to learn more about how to use props. Go to <em>Your Bucket &gt; Settings &gt; Webhooks</em> after <a href=\"https://app.cosmicjs.com/login\">logging in</a> to use the new feature.</p><p>Let&#39;s look at a couple of example webhook payloads with and without props.</p><p><strong>Without Props</strong><br>You get the full data payload.</p><div class=\"fr-embedly            \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/9bfa3a4034c8461dfd74b6df66e32986' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/9bfa3a4034c8461dfd74b6df66e32986\" class=\"embedly-card\"></a></div><p>That&#39;s a lot of data! Do you need it all? Maybe not. Enter props.<br><br><strong>With Props</strong><br>Get only the data you need. This example sets <code>slug,title,metadata</code><img src=\"https://cdn.cosmicjs.com/2dedff20-2138-11ec-a8e0-f76ec38a4b1a-props.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p style=\"text-align: center;\">Go to <em>Bucket Settings &gt; Webhooks</em> to set props.</p><p><br></p><div class=\"fr-embedly            \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/526b5dcb61ecdd88599c2bed4d5b426e' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/526b5dcb61ecdd88599c2bed4d5b426e\" class=\"embedly-card\"></a></div><p>Wow, that&#39;s nice! Notice how much more concise the data payload is compared to not using props. Keep in mind that this currently only applies to first-level props (namespaced metadata declarations are not supported yet).</p><p><br>We hope you enjoy this quick update to make your automated workflows with webhooks more efficient. If you have any questions, please join the conversation in the <a href=\"https://www.cosmicjs.com/community\">Cosmic Slack channel</a> and reach out to us<a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">&nbsp;on Twitter</a>.</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"5iezexQg4I","value":"2021-10-05"},{"children":null,"type":"object","title":"Author","key":"author","id":"QoeItpuV4n","value":"5768b253163172890e00002c","object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"n90txKAFtg","value":"","url":null,"imgix_url":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2021-09-29T14:53:27.243Z","created_by":"5357ef811693be2118000001","modified_at":"2021-10-05T15:52:39.177Z","created":"2021-09-29T14:53:27.243Z","status":"published","thumbnail":"","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2021-10-05T15:52:39.177Z","metadata":{"published_date":"2021-10-05","author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":null,"imgix_url":null}}},{"_id":"5ade6e0e2b218820ec24bff1","order":11,"slug":"medical-realities-delivers-vr-surgical-content","title":"Medical Realities Delivers VR Surgical Content","content":"<p>The <a href=\"https://www.medicalrealities.com\" rel=\"noopener noreferrer\" target=\"_blank\">Medical Realties</a> Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/5dc112a0-5aa8-11e8-a7f7-e17cbb39f395-ice_screenshot_20180518-092612.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Medical Realities team needed a way for educators (non-technical editors) to manage content that could be served to VR headsets for consumption by trainees, so they chose Cosmic to manage and deliver their content from the cloud through an API.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-10999922_465521620265848_6799915322872806436_o.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily spin up content models that would allow our non-technical editors to manage the most sophisticated medical VR content out there. Our developers were equipped with robust Docs and Example Apps to get them started and were able to use the bleeding-edge frameworks necessary to run Virtual Reality.&quot;</p><p><cite>&mdash; Joe Marritt, Lead Web Developer&nbsp;</cite></p></blockquote>","metafields":[{"value":"Medical Realities","key":"company","title":"Company","type":"text","children":null},{"value":"Healthcare and Virtual Reality ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"The Medical Realties Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","imgix_url":"https://imgix.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-04-23T23:36:46.885Z","created_by":"5716b504e9c686d006000073","created":"2018-04-23T23:36:46.885Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-05-18T17:07:50.800Z","metadata":{"company":"Medical Realities","industry_type":"Healthcare and Virtual Reality ","teaser":"The Medical Realties Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application. \n","logo":{"url":"https://cdn.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","imgix_url":"https://imgix.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png"}}},{"_id":"5efb8a9903b92100071f2e89","slug":"netlify-cms","title":"Netlify CMS","content":"<p><span style=\"color: rgb(88, 96, 105);\">Netlify CMS was created by the static website hosting company Netlify and describes itself as an open source content manager for your Git workflow</span></p><p><br></p><h3>Monolithic vs Headless CMS</h3><p><span style=\"color: rgb(88, 96, 105);\">Netlify</span><span style=\"color: rgb(88, 96, 105);\">&nbsp;CMS</span><span style=\"color: rgb(88, 96, 105);\">, as a git-based CMS comes with a coupled front end application layer that requires additional development and maintenance. <span style=\"color: rgb(88, 96, 105);\">Cosmic is a Headless CMS meaning that the content API and presentation layer are decoupled which gives your team greater flexibility when it comes to where your content can go.</span></span></p><p><span style=\"color: rgb(88, 96, 105);\">Cosmic provides everything your team of developers and content creators need: powerful and intuitive APIs for developers, and an easy-to-use dashboard for content creators. We&#39;ve removed all complexity and CMS maintenance, so your team can focus on building great products faster, together.</span></p><p><br></p><h3>Is Netlify CMS a Headless CMS?</h3><p><span style=\"color: rgb(88, 96, 105);\">In short, no. <span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\">Netlify CMS is not a true headless CMS as it doesn&#39;t expose any API for scalable content delivery.</span></span> So along with<span style=\"color: rgb(88, 96, 105);\">&nbsp;your application,</span> you will still need to maintain the CMS itself, adding more development costs and <span style=\"color: rgb(88, 96, 105);\">taking away focus from</span> what really matter<span style=\"color: rgb(88, 96, 105);\">s: creating great content and user experiences in your main website or app.</span></span></p>","metafields":[{"children":null,"type":"file","title":"Logo","key":"logo","id":"iU6dxRtP2n","value":"bc9f8100-bb02-11ea-8170-e7fb6745eb70-netlify-cms.png","url":"https://cdn.cosmicjs.com/bc9f8100-bb02-11ea-8170-e7fb6745eb70-netlify-cms.png","imgix_url":"https://imgix.cosmicjs.com/bc9f8100-bb02-11ea-8170-e7fb6745eb70-netlify-cms.png"},{"children":null,"type":"textarea","title":"Tech","key":"tech","id":"ZpG4vKX8YO","value":"Git. Front end tech: HTML, CSS, JavaScript."},{"children":null,"type":"textarea","title":"Scalability","key":"scalability","id":"JUVx8kMprt","value":"Does not scale easily. Limited by your servers, hosting provider, and budget."},{"children":null,"type":"textarea","title":"Security","key":"security","id":"S5913uudb4","value":"You manage the security yourself. No default data encryption at rest or in transit."},{"children":null,"type":"textarea","title":"Maintenance","key":"maintenance","id":"8ONZsltoic","value":"You deploy, host, and maintain everything yourself. Along with your application and content, you need to maintain updates and security for your CMS system."},{"children":null,"type":"textarea","title":"Caching","key":"caching","id":"QfA7auue26","value":"No caching included out of the box."},{"children":null,"type":"textarea","title":"Media CDN","key":"media_cdn","id":"L6zrGGPLdM","value":"No CDN included out of the box."},{"children":null,"type":"textarea","title":"Image Processing","key":"image_processing","id":"uV5gouDMlf","value":"Manually manage your own image sizes and optimizations."},{"children":null,"type":"textarea","title":"Extendability","key":"extendability","id":"9VrnbRKZZ7","value":"Templates and plugins."},{"children":null,"type":"textarea","title":"Front end","key":"front_end","id":"P6XygPnJLd","value":"Front end is coupled with backend CMS. Not Headless."},{"children":null,"type":"textarea","title":"Number of Projects","key":"number_of_projects","id":"tj4QESi7Ms","value":"One login, one website."},{"children":null,"type":"html-textarea","title":"Costs","key":"costs","id":"d6BnXVyIBz","value":"<p>You will need to hire developer resources. Average salary of a full-stack developer is <a href=\"https://neuvoo.com/salary/?job=Full+Stack+Developer\" target=\"_blank\">$111,600 per year</a>. You may need to hire 1-3 developers to maintain the CMS.</p>"},{"children":null,"type":"text","title":"Vendor Name","key":"vendor_name","id":"DEaXiVtgCl","value":"Netlify CMS"},{"children":null,"type":"switch","title":"Include in link list","key":"include_in_link_list","id":"ePubM4gbrM","value":true,"options":"yes,no"},{"children":null,"type":"text","title":"Cost Value","key":"cost_value","id":"KH0Bv9qOvh","value":"$223,200"},{"children":null,"type":"text","title":"Cost Text","key":"cost_text","id":"1xyR4tLita","value":"per year"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"cms-competitors","created":"2020-06-30T18:55:21.307Z","created_at":"2020-06-30T18:55:21.307Z","modified_at":"2020-06-30T18:55:31.932Z","status":"published","locale":null,"modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-30T18:55:31.932Z","unpublish_at":null,"order":11,"metadata":{"logo":{"url":"https://cdn.cosmicjs.com/bc9f8100-bb02-11ea-8170-e7fb6745eb70-netlify-cms.png","imgix_url":"https://imgix.cosmicjs.com/bc9f8100-bb02-11ea-8170-e7fb6745eb70-netlify-cms.png"},"tech":"Git. Front end tech: HTML, CSS, JavaScript.","scalability":"Does not scale easily. Limited by your servers, hosting provider, and budget.","security":"You manage the security yourself. No default data encryption at rest or in transit.","maintenance":"You deploy, host, and maintain everything yourself. Along with your application and content, you need to maintain updates and security for your CMS system.","caching":"No caching included out of the box.","media_cdn":"No CDN included out of the box.","image_processing":"Manually manage your own image sizes and optimizations.","extendability":"Templates and plugins.","front_end":"Front end is coupled with backend CMS. Not Headless.","number_of_projects":"One login, one website.","costs":"<p>You will need to hire developer resources. Average salary of a full-stack developer is <a href=\"https://neuvoo.com/salary/?job=Full+Stack+Developer\" target=\"_blank\">$111,600 per year</a>. You may need to hire 1-3 developers to maintain the CMS.</p>","vendor_name":"Netlify CMS","include_in_link_list":true,"cost_value":"$223,200","cost_text":"per year"}},{"_id":"5d49d3a7cb90f81897c586df","order":11,"slug":"cms-software-for-press-websites","title":"CMS Software for Press Websites ","content":"<p>Cosmic provides flexible CMS Software for teams of developers and content creators, including press and marketing departments publishing press releases and company updates. Companies managing press content use Cosmic CMS Software because the Dashboard is simple and intuitive to manage and schedule content for publishing.</p><p>Teams using CMS Software to power press content don&#39;t have to maintain their own server and content management system. By focusing on apps and not infrastructure, teams are able to publish press content faster, together.&nbsp;</p><h3><br>What is Headless CMS Software?</h3><p>Headless CMS Software works by providing non-technical editors with a Dashboard UI to model, create and publish content while providing developers with API tools and resources to integrate content with any website or app. By decoupling content from code, teams create a central content repository that can power all of their content-powered applications.&nbsp;</p>","metafields":[{"children":null,"type":"text","title":"Solution Name","key":"solution_name","id":"a8KH2Er32F","value":"CMS Software for Press Websites "},{"children":null,"type":"file","title":"Image","key":"image","id":"anOlZAh564","value":"3c672fa0-b884-11e9-948b-3b318884b3f7-39b60450-9f54-11e9-ac09-4be8a5631b5e-Hostmaker.png","url":"https://cdn.cosmicjs.com/3c672fa0-b884-11e9-948b-3b318884b3f7-39b60450-9f54-11e9-ac09-4be8a5631b5e-Hostmaker.png","imgix_url":"https://imgix.cosmicjs.com/3c672fa0-b884-11e9-948b-3b318884b3f7-39b60450-9f54-11e9-ac09-4be8a5631b5e-Hostmaker.png"},{"children":null,"type":"objects","title":"Case Studies","key":"case_studies","id":"sr0teJF7uV","value":"596663e8880d69fb6c000194,5b743e111a739a78a5f0725b,5be9ca96cc3f3e2ce66ce511","object_type":"case-studies","objects":[{"_id":"596663e8880d69fb6c000194","slug":"joblift-elevates-their-stack","title":"Joblift Elevates Their Stack ","content":"<p>In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, <a href=\"https://joblift.co.uk\" rel=\"noopener noreferrer\" target=\"_blank\">Joblift</a> seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/16ac66c0-03d7-11e9-a9c3-c1326db90b81-DrzF-2BX0AA0WTE.jpg-large.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Joblift manages localized content to serve Job, Press and Blog feeds to its various markets, including the UK, Netherlands and Germany. Easy user roles and permissions equip their team with the tools they need to seamlessly run a global organization.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic has completely sped up our ability to upload our content easily and efficiently. With Cosmic we now have a smooth process for uploading press releases which reflects the quality content on our website.&rdquo;</p><p><cite>&mdash; Ashleigh Grady, Content Editor and Marketing Manager</cite></p></blockquote>","metafields":[{"value":"Joblift","key":"company","title":"Company","type":"text","children":null},{"value":"Career Services","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T18:01:12.194Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-12-19T21:44:38.361Z"},{"_id":"5b743e111a739a78a5f0725b","slug":"hostmaker-manages-localized-content","title":"Hostmaker Manages Localized Content ","content":"<p><a href=\"https://hostmaker.com/gb/london/\" rel=\"noopener noreferrer\" target=\"_blank\">Hostmaker</a> is a property management company that operates across 9 cities in 6 countries. Hostmaker manages properties that are being rented to vacationers and lodgers from around the world. They take the hosts&#39; home and provide cleaning and decor services prior to listing the location on up to 15 various travel booking platforms. Hostmaker&#39;s hosts love the service for the superior volume that they continue to deliver compared to their competitors, which are driven by proprietary pricing strategies, local market expertise and global industry experience.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/18ece0f0-a64d-11e8-a7de-db2e81aae7c3-IMG_4191.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Hostmaker&#39;s tech team needed a solution for their product marketing managers to update Landing Pages, Case Studies, Press Releases and FAQs for the various markets they manage, including cities such as Rome, London and Barcelona. Localizing content for Hostmaker&#39;s audiences is a mission-critical piece of the marketing strategy that is driving such tremendous growth. Hostmaker chose Cosmic to give their cross-functional team the tools they need to perform their jobs. Now Hostmaker&#39;s developers can build reusable components and scalable content models while their marketers can manage content specific to a particular locale.&nbsp;</p><p style=\"text-align: center;\"><br></p><p><br></p><div class=\"fr-embedly      \" data-original-embed=\"<a href='https://twitter.com/HOSTMAKERCo/status/1035198450739097600' class='embedly-card'></a>\"><a href=\"https://twitter.com/HOSTMAKERCo/status/1035198450739097600\" class=\"embedly-card\"></a></div><p><br></p><p><br></p><blockquote><p>&quot;We&rsquo;ve been using Cosmic for around a year. At first there were some issues with components that prohibited us from performing all our desired tasks, but all those issues were quickly solved by the Cosmic Team. As of now, the tools are great, and have even improved during our use of the platform. It does all the things we need at the moment. As a tool Cosmic has been not only ideal for managing components on the site but adaptive enough for our non-tech users to create landing pages and modify existing content, saving us precious dev time.&rdquo;</p><p><br></p><p><cite>&mdash; Hostmaker Digital Team</cite></p></blockquote>","metafields":[{"value":"Hostmaker","key":"company","title":"Company","type":"text","children":null},{"value":"Hospitality ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Hostmaker is a property management company that operates across 9 cities in 6 countries. Hostmaker manages properties that are being rented to vacationers and lodgers from around the world. They take the hosts' home and provide cleaning and decor services prior to listing the location on up to 15 various travel booking platforms. Hostmaker's hosts love the service for the superior volume that they continue to deliver compared to their competitors, which are driven by proprietary pricing strategies, local market expertise and global industry experience. \n\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-01T22:26:36.367Z","created_by":"5716b504e9c686d006000073","created":"2018-08-15T14:52:01.115Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-09-25T15:10:44.600Z"},{"_id":"5be9ca96cc3f3e2ce66ce511","slug":"road-redemption-launches-a-marketing-microsite","title":"Road Redemption Launches a Marketing Microsite","content":"<p dir=\"ltr\"><a href=\"http://www.tripwireinteractive.com\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a>, a leading entertainment software developer and publisher founded in 2005, recently launched its corporate website on Cosmic. The Tripwire Interactive team can now easily manage microsite content for each game with a dedicated studio manager as its content creator. This is important as Tripwire is always debuting new marketing campaigns to accompany game launches.&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/88ed0170-e6ab-11e8-93f0-a94cde6f34a7-22181530_1681202368577875_2605572198226217292_o.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><a href=\"http://roadredemption.tripwireinteractive.com\" rel=\"noopener noreferrer\" target=\"_blank\">Road Redemption</a> is the first of many games to have innovative content creator access provided via a headless CMS API that delivers the best of both worlds for cross-functional teams. <a href=\"https://cosmicjs.com/case-studies/tripwire-interactive-builds-a-react-corporate-website\" rel=\"noopener noreferrer\" target=\"_blank\">Read more</a> about how Tripwire Interactive builds apps faster using Cosmic.</p><p dir=\"ltr\"><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team\r\nhas been enjoying the ease of use with the new system.&quot;</p><p><cite>&mdash; Owen Liversidge, Lead Developer</cite></p></blockquote><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1395df80-e6ad-11e8-93f0-a94cde6f34a7-BIJMnRzCcAAcEDC.png-large.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"Road Redemption ","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Tripwire Interactive, a leading entertainment software developer and publisher founded in 2005, recently launched its corporate website on Cosmic. The Tripwire Interactive team can now easily manage microsite content for each game with a dedicated studio manager as its content creator. This is important as Tripwire is always debuting new marketing campaigns to accompany game launches. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png","imgix_url":"https://imgix.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-11-12T18:46:46.371Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-11-13T21:30:43.964Z"}]},{"children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"react-cosmedium-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"simple-vue-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"nextjs-tour-diary","type":"text","required":false}]}],"type":"repeater","title":"App Slugs","key":"app_slugs","id":"SdBJkhbywF","value":"react-cosmedium-blog","repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}]},{"children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"wordpress-importer","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"export-to-csv","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"unsplash-photos","type":"text","required":false}]}],"type":"repeater","title":"Extension SLugs","key":"extension_slugs","id":"YnrkrKADVH","value":"wordpress-importer","repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}]},{"children":null,"type":"textarea","title":"Testimonial","key":"testimonial","id":"v12kVrJ5BZ","value":"\"As a tool Cosmic has been not only ideal for managing components on the site but adaptive enough for our non-tech users to create landing pages and modify existing content, saving us precious dev time.”"},{"children":null,"type":"text","title":"Testimonial Credit","key":"testimonial_credit","id":"3pJc5Zy5Zs","value":"Hostmaker Digital Team"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created_at":"2019-08-05T20:18:17.006Z","created_by":"5716b504e9c686d006000073","modified_at":"2020-05-06T05:35:11.051Z","created":"2019-08-06T19:23:19.875Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-05-06T05:35:11.051Z","unpublish_at":null,"metadata":{"solution_name":"CMS Software for Press Websites ","image":{"url":"https://cdn.cosmicjs.com/3c672fa0-b884-11e9-948b-3b318884b3f7-39b60450-9f54-11e9-ac09-4be8a5631b5e-Hostmaker.png","imgix_url":"https://imgix.cosmicjs.com/3c672fa0-b884-11e9-948b-3b318884b3f7-39b60450-9f54-11e9-ac09-4be8a5631b5e-Hostmaker.png"},"case_studies":[{"_id":"596663e8880d69fb6c000194","slug":"joblift-elevates-their-stack","title":"Joblift Elevates Their Stack ","content":"<p>In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, <a href=\"https://joblift.co.uk\" rel=\"noopener noreferrer\" target=\"_blank\">Joblift</a> seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/16ac66c0-03d7-11e9-a9c3-c1326db90b81-DrzF-2BX0AA0WTE.jpg-large.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Joblift manages localized content to serve Job, Press and Blog feeds to its various markets, including the UK, Netherlands and Germany. Easy user roles and permissions equip their team with the tools they need to seamlessly run a global organization.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic has completely sped up our ability to upload our content easily and efficiently. With Cosmic we now have a smooth process for uploading press releases which reflects the quality content on our website.&rdquo;</p><p><cite>&mdash; Ashleigh Grady, Content Editor and Marketing Manager</cite></p></blockquote>","metafields":[{"value":"Joblift","key":"company","title":"Company","type":"text","children":null},{"value":"Career Services","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T18:01:12.194Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-12-19T21:44:38.361Z","metadata":{"company":"Joblift","industry_type":"Career Services","teaser":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","logo":{"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}}},{"_id":"5b743e111a739a78a5f0725b","slug":"hostmaker-manages-localized-content","title":"Hostmaker Manages Localized Content ","content":"<p><a href=\"https://hostmaker.com/gb/london/\" rel=\"noopener noreferrer\" target=\"_blank\">Hostmaker</a> is a property management company that operates across 9 cities in 6 countries. Hostmaker manages properties that are being rented to vacationers and lodgers from around the world. They take the hosts&#39; home and provide cleaning and decor services prior to listing the location on up to 15 various travel booking platforms. Hostmaker&#39;s hosts love the service for the superior volume that they continue to deliver compared to their competitors, which are driven by proprietary pricing strategies, local market expertise and global industry experience.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/18ece0f0-a64d-11e8-a7de-db2e81aae7c3-IMG_4191.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Hostmaker&#39;s tech team needed a solution for their product marketing managers to update Landing Pages, Case Studies, Press Releases and FAQs for the various markets they manage, including cities such as Rome, London and Barcelona. Localizing content for Hostmaker&#39;s audiences is a mission-critical piece of the marketing strategy that is driving such tremendous growth. Hostmaker chose Cosmic to give their cross-functional team the tools they need to perform their jobs. Now Hostmaker&#39;s developers can build reusable components and scalable content models while their marketers can manage content specific to a particular locale.&nbsp;</p><p style=\"text-align: center;\"><br></p><p><br></p><div class=\"fr-embedly      \" data-original-embed=\"<a href='https://twitter.com/HOSTMAKERCo/status/1035198450739097600' class='embedly-card'></a>\"><a href=\"https://twitter.com/HOSTMAKERCo/status/1035198450739097600\" class=\"embedly-card\"></a></div><p><br></p><p><br></p><blockquote><p>&quot;We&rsquo;ve been using Cosmic for around a year. At first there were some issues with components that prohibited us from performing all our desired tasks, but all those issues were quickly solved by the Cosmic Team. As of now, the tools are great, and have even improved during our use of the platform. It does all the things we need at the moment. As a tool Cosmic has been not only ideal for managing components on the site but adaptive enough for our non-tech users to create landing pages and modify existing content, saving us precious dev time.&rdquo;</p><p><br></p><p><cite>&mdash; Hostmaker Digital Team</cite></p></blockquote>","metafields":[{"value":"Hostmaker","key":"company","title":"Company","type":"text","children":null},{"value":"Hospitality ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Hostmaker is a property management company that operates across 9 cities in 6 countries. Hostmaker manages properties that are being rented to vacationers and lodgers from around the world. They take the hosts' home and provide cleaning and decor services prior to listing the location on up to 15 various travel booking platforms. Hostmaker's hosts love the service for the superior volume that they continue to deliver compared to their competitors, which are driven by proprietary pricing strategies, local market expertise and global industry experience. \n\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-01T22:26:36.367Z","created_by":"5716b504e9c686d006000073","created":"2018-08-15T14:52:01.115Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-09-25T15:10:44.600Z","metadata":{"company":"Hostmaker","industry_type":"Hospitality ","teaser":"Hostmaker is a property management company that operates across 9 cities in 6 countries. Hostmaker manages properties that are being rented to vacationers and lodgers from around the world. They take the hosts' home and provide cleaning and decor services prior to listing the location on up to 15 various travel booking platforms. Hostmaker's hosts love the service for the superior volume that they continue to deliver compared to their competitors, which are driven by proprietary pricing strategies, local market expertise and global industry experience. \n\n\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg"}}},{"_id":"5be9ca96cc3f3e2ce66ce511","slug":"road-redemption-launches-a-marketing-microsite","title":"Road Redemption Launches a Marketing Microsite","content":"<p dir=\"ltr\"><a href=\"http://www.tripwireinteractive.com\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a>, a leading entertainment software developer and publisher founded in 2005, recently launched its corporate website on Cosmic. The Tripwire Interactive team can now easily manage microsite content for each game with a dedicated studio manager as its content creator. This is important as Tripwire is always debuting new marketing campaigns to accompany game launches.&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/88ed0170-e6ab-11e8-93f0-a94cde6f34a7-22181530_1681202368577875_2605572198226217292_o.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><a href=\"http://roadredemption.tripwireinteractive.com\" rel=\"noopener noreferrer\" target=\"_blank\">Road Redemption</a> is the first of many games to have innovative content creator access provided via a headless CMS API that delivers the best of both worlds for cross-functional teams. <a href=\"https://cosmicjs.com/case-studies/tripwire-interactive-builds-a-react-corporate-website\" rel=\"noopener noreferrer\" target=\"_blank\">Read more</a> about how Tripwire Interactive builds apps faster using Cosmic.</p><p dir=\"ltr\"><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team\r\nhas been enjoying the ease of use with the new system.&quot;</p><p><cite>&mdash; Owen Liversidge, Lead Developer</cite></p></blockquote><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1395df80-e6ad-11e8-93f0-a94cde6f34a7-BIJMnRzCcAAcEDC.png-large.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"Road Redemption ","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Tripwire Interactive, a leading entertainment software developer and publisher founded in 2005, recently launched its corporate website on Cosmic. The Tripwire Interactive team can now easily manage microsite content for each game with a dedicated studio manager as its content creator. This is important as Tripwire is always debuting new marketing campaigns to accompany game launches. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png","imgix_url":"https://imgix.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-11-12T18:46:46.371Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-11-13T21:30:43.964Z","metadata":{"company":"Road Redemption ","industry_type":"Gaming","teaser":"Tripwire Interactive, a leading entertainment software developer and publisher founded in 2005, recently launched its corporate website on Cosmic. The Tripwire Interactive team can now easily manage microsite content for each game with a dedicated studio manager as its content creator. This is important as Tripwire is always debuting new marketing campaigns to accompany game launches. \n","logo":{"url":"https://cdn.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png","imgix_url":"https://imgix.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png"}}}],"app_slugs":[{"slug":"react-cosmedium-blog"},{"slug":"simple-vue-blog"},{"slug":"nextjs-tour-diary"}],"extension_slugs":[{"slug":"wordpress-importer"},{"slug":"export-to-csv"},{"slug":"unsplash-photos"}],"testimonial":"\"As a tool Cosmic has been not only ideal for managing components on the site but adaptive enough for our non-tech users to create landing pages and modify existing content, saving us precious dev time.”","testimonial_credit":"Hostmaker Digital Team"}},{"_id":"591dcc617b17dbf10500212d","order":11,"slug":"ivan-larionov","title":"Ivan Larionov","content":"","metafields":[{"value":"713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg","imgix_url":"https://imgix.cosmicjs.com/713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-18T16:31:29.363Z","created_by":"5357ef811693be2118000001","created":"2017-05-18T16:31:29.363Z","status":"published","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg","imgix_url":"https://imgix.cosmicjs.com/713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg"}}},{"_id":"62166063a802eb00093ecf51","order":11,"slug":"new-dashboard-updates-webhooks-smart-views-bulk-edit-and-more","title":"New Dashboard Updates: Webhooks, Smart Views, Bulk Edit, and more!","content":"<p>We are excited to announce big updates to the new Cosmic dashboard. Newly available features include:</p><p>1. Webhooks<br>2. Smart Views<br>3. Bulk Edit<br>4. Search &amp; Replace</p><p><strong>TL;DR</strong><br><a href=\"https://app-v2.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Sign up for the alpha preview</a> to check out the new features.</p><h3><br><strong>Webhooks</strong></h3><p>We are thrilled to unveil the new webhooks feature. You will notice that we have done a complete redesign of the logic, which will make adding webhooks (one of our most popular add-on features) much easier. Check out the details in the video below and\r\nfollow these steps:</p><p>1. Create a new endpoint using a request intercepting tool like <a href=\"https://beeceptor.com/\">Beeceptor</a>.<br>2. Go to <em>Bucket Settings &gt; Webhooks</em> and add the URL in a new webook.<br>3. Set your options for webhook trigger resource and event.</p><p style=\"text-align: center;\"><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/3133cf40-953f-11ec-96f2-43bdd99faa64-add-webhook.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><p>4. Next, update a resource to trigger the event.<br>5. Go back to Beeceptor to see the response data.</p><p style=\"text-align: center;\"><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/010cbba0-9540-11ec-96f2-43bdd99faa64-trigger-webhook.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><h3><strong>Smart Views</strong></h3><p>One of the most handy features in the Cosmic dashboard is our smart views, which makes it easy to save custom content filtering for easy access later. We think you will like the new approach to this feature which got even better with our new powerful <a href=\"https://www.cosmicjs.com/blog/new-dashboard-updates-search-and-filter\" rel=\"noopener noreferrer\" target=\"_blank\">filtering capabilities</a>.</p><p><strong>Smart view developer tools</strong><br>And since we are focused on creating the best developer experience possible, in any smart view, you can open up the developer tools drawer and get access to the smart view example query code to add to any website or application. Great for those of us\r\nthat like a simple copy + paste 😉&nbsp;</p><p>To check out the new smart views, follow these steps and watch the demo video:</p><p>1. Go to the Objects table and set a filter on the top of the Objects table.<br>2. Click the create smart view button on the top of the Objects table.<br>3. Go to the dev tools drawer to get the dev tools query.</p><p style=\"text-align: center;\"><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/9af3b070-9540-11ec-96f2-43bdd99faa64-smart-view-create.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><h3><strong>Bulk Edit</strong></h3><p>Bulk editing content in the dashboard just got much simpler as well. Simply select the Objects to edit, include the fields that will be bulk edited, and make your changes.</p><p style=\"text-align: center;\"><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/0128d9b0-9541-11ec-96f2-43bdd99faa64-bulk-edit.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><h3><strong>Search &amp; Replace</strong></h3><p>Much like bulk editing, searching and replacing content across multiple content in the dashboard is a breeze.</p><p style=\"text-align: center;\"><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/dae5d130-9541-11ec-96f2-43bdd99faa64-search-replace.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><h3><strong>Join the Alpha</strong></h3><p>We are excited for you to test out these new features in the dashboard as we continue to build the best content management solution in the world.</p><p>If you haven&#39;t joined, <a href=\"https://app-v2.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">sign up to get on the waitlist</a> to preview the new dashboard including these new features. It is our hope that we can enable your team with even greater flexibility and control over your Cosmic-powered content and hopefully get some feedback from you!</p><h3><strong>Get Some Swag <span class=\"fr-emoticon fr-deletable\">😎</span>&nbsp;</strong></h3><p>After joining the waitlist, share your personal link in the confirmation email on social media to be entered to receive free Cosmic swag including hoodies, tshirts, coffee mugs, and stickers.</p><p>Stay tuned for more exciting updates! Follow us <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">on Twitter</a>, and join our team <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">on Slack</a> to\r\nget the latest on the new dashboard progress.</p><p>The Cosmic Team</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"2BLeCcdajP","value":"5ffa1d1e0046b0000799cb7b","required":true,"object_type":"authors","object":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"1UZhv2b75T","value":"<p>We are excited to announce big updates to the new Cosmic dashboard including webhooks, smart views, bulk edit, and more!</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"nM1TSaJcjf","value":"a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png","url":"https://cdn.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png","imgix_url":"https://imgix.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"dNNP4z65ql","value":"We are excited to announce big updates to the new Cosmic dashboard including webhooks, smart views, bulk edit, and more!"},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"PbUAgGYpZc","value":"2022-02-23"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2022-02-23T16:27:15.049Z","created_by":"5357ef811693be2118000001","modified_at":"2022-05-03T23:50:40.910Z","created":"2022-02-23T16:27:15.049Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2022-05-03T23:50:40.910Z","metadata":{"author":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}}},"teaser":"<p>We are excited to announce big updates to the new Cosmic dashboard including webhooks, smart views, bulk edit, and more!</p>","featured_image":{"url":"https://cdn.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png","imgix_url":"https://imgix.cosmicjs.com/a3a38e80-94d6-11ec-96f2-43bdd99faa64-new-features.png"},"seo_meta_description":"We are excited to announce big updates to the new Cosmic dashboard including webhooks, smart views, bulk edit, and more!","published_date":"2022-02-23"}},{"_id":"631a437d35b0060009a68c50","slug":"static-website-cms","title":"Static Website CMS","content":"","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"IfHu9lCEFz","value":"22719f00-2fae-11ed-8ca6-eb31ab715749-globe.png","url":"https://cdn.cosmicjs.com/22719f00-2fae-11ed-8ca6-eb31ab715749-globe.png","imgix_url":"https://imgix.cosmicjs.com/22719f00-2fae-11ed-8ca6-eb31ab715749-globe.png"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"DN3r6Gtx3P","value":"22719f00-2fae-11ed-8ca6-eb31ab715749-globe.png","url":"https://cdn.cosmicjs.com/22719f00-2fae-11ed-8ca6-eb31ab715749-globe.png","imgix_url":"https://imgix.cosmicjs.com/22719f00-2fae-11ed-8ca6-eb31ab715749-globe.png"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"ddLOwnOJFb","value":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for static websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"rFfNN487Tl","value":"Static Website"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"7wFXRwSojl","value":"Cosmic is the best CMS for Static websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"ezvlOz64rN","value":"22719f00-2fae-11ed-8ca6-eb31ab715749-globe.png","url":"https://cdn.cosmicjs.com/22719f00-2fae-11ed-8ca6-eb31ab715749-globe.png","imgix_url":"https://imgix.cosmicjs.com/22719f00-2fae-11ed-8ca6-eb31ab715749-globe.png"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"YQnGu5o9hW","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"Wb3kA7Qo5X","value":"Best Headless CMS for Static Websites"},{"children":[{"type":"repeating_item","children":[{"title":"Title","key":"title","value":"Getting Started with Cosmic CMS and Next.js (Part 1)","type":"text","required":false},{"title":"Link","key":"link","value":"https://www.youtube.com/embed/NZA1dF2IDqQ?showinfo=0&wmode=opaque","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Title","key":"title","value":"Building a Blog with Cosmic CMS and Next.js (Part 2)","type":"text","required":false},{"title":"Link","key":"link","value":"https://www.youtube.com/embed/sdvdwo3g3PE?showinfo=0&wmode=opaque","type":"text","required":false}]}],"type":"repeater","title":"Videos","key":"videos","id":"TkE26J1oZI","value":"Getting Started with Cosmic CMS and Next.js (Part 1)","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]},{"children":null,"type":"text","title":"Apps Search Term","key":"apps_search_term","id":"SaI6MZNDeM","value":""},{"children":null,"type":"text","title":"Articles Search Term","key":"articles_search_term","id":"VogkNeUBrY","value":""},{"children":null,"type":"html-textarea","title":"Page Overview","key":"page_overview","id":"027E3FN9bJ","value":""},{"children":null,"type":"html-textarea","title":"SEO Content","key":"seo_content","id":"UdBBZP9AZp","value":""},{"children":null,"type":"text","title":"Page Overview Title","key":"page_overview_title","id":"gj036836gx4c73fpdjzb","value":""},{"children":[],"type":"repeater","title":"Apps","key":"apps","id":"dkpxmwigd1z8x4ants9f","value":"","repeater_fields":[{"title":"App Slug","key":"app_slug","value":"","type":"text","required":false}]},{"children":[],"type":"repeater","title":"Articles","key":"articles","id":"dwil4bqojngnkej4v85k","value":"","repeater_fields":[{"title":"Article Slug","key":"article_slug","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created":"2022-09-08T19:33:17.817Z","created_at":"2022-09-08T19:33:17.817Z","modified_at":"2022-09-08T19:42:05.823Z","created_by":"5357ef811693be2118000001","modified_by":"5357ef811693be2118000001","status":"published","publish_at":null,"order":11,"unpublish_at":null,"published_at":"2022-09-08T19:42:05.823Z","metadata":{"image":{"url":"https://cdn.cosmicjs.com/22719f00-2fae-11ed-8ca6-eb31ab715749-globe.png","imgix_url":"https://imgix.cosmicjs.com/22719f00-2fae-11ed-8ca6-eb31ab715749-globe.png"},"thumbnail":{"url":"https://cdn.cosmicjs.com/22719f00-2fae-11ed-8ca6-eb31ab715749-globe.png","imgix_url":"https://imgix.cosmicjs.com/22719f00-2fae-11ed-8ca6-eb31ab715749-globe.png"},"blurb":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for static websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Static Website","seo_description":"Cosmic is the best CMS for Static websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/22719f00-2fae-11ed-8ca6-eb31ab715749-globe.png","imgix_url":"https://imgix.cosmicjs.com/22719f00-2fae-11ed-8ca6-eb31ab715749-globe.png"},"code_example":"","seo_title":"Best Headless CMS for Static Websites","videos":[{"title":"Getting Started with Cosmic CMS and Next.js (Part 1)","link":"https://www.youtube.com/embed/NZA1dF2IDqQ?showinfo=0&wmode=opaque"},{"title":"Building a Blog with Cosmic CMS and Next.js (Part 2)","link":"https://www.youtube.com/embed/sdvdwo3g3PE?showinfo=0&wmode=opaque"}],"apps_search_term":"","articles_search_term":"","page_overview":"","seo_content":"","page_overview_title":"","apps":[],"articles":[]}},{"_id":"5bad1c5bdd42057ecb900549","slug":"salesforce","title":"Salesforce","content":"","metafields":[{"value":"https://cosmicjs.com/articles/integrating-cosmic-powered-content-with-salesforce-jmi4yp16","key":"link","title":"Link","type":"text","children":false,"has_length_edit":true,"parent":false},{"value":"df4f8460-c276-11e8-8242-1f43e60f1f81-sf.jpg","key":"image","title":"Image","type":"file","children":false,"has_length_edit":false,"parent":false,"url":"https://cdn.cosmicjs.com/df4f8460-c276-11e8-8242-1f43e60f1f81-sf.jpg","imgix_url":"https://imgix.cosmicjs.com/df4f8460-c276-11e8-8242-1f43e60f1f81-sf.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"integrations","created":"2018-09-27T18:07:23.774Z","created_at":"2018-09-27T18:07:23.774Z","modified_at":"2018-09-27T18:07:23.774Z","status":"published","locale":null,"published_at":"2018-09-27T18:07:23.774Z","created_by":"5357ef811693be2118000001","order":11,"metadata":{"link":"https://cosmicjs.com/articles/integrating-cosmic-powered-content-with-salesforce-jmi4yp16","image":{"url":"https://cdn.cosmicjs.com/df4f8460-c276-11e8-8242-1f43e60f1f81-sf.jpg","imgix_url":"https://imgix.cosmicjs.com/df4f8460-c276-11e8-8242-1f43e60f1f81-sf.jpg"}}},{"_id":"538f92f6c51dbc5440000001","slug":"developers","title":"Developers","content":"<h1 style=\"font-family: 'Open Sans', sans-serif; color: rgb(51, 51, 51);\">Develop with Cosmic JS</h1><h1><div style=\"font-size: 14px; line-height: 20px;\">Building a plugin that integrates with Cosmic JS? Register for our Developer Program. You can offer plugins in any language for you and others to use.</div></h1>","metafields":[],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"pages","created":"2014-06-04T21:43:18.372Z","modified":"2015-04-12T05:45:50.612Z","files":"","order":11,"metadata":null},{"_id":"5ad67bb214a4b53585263daa","slug":"jamstack-cms","title":"Jamstack CMS","content":"<p>The <a href=\"https://jamstack.org\" rel=\"noopener noreferrer\" target=\"_blank\">Jamstack</a> is comprised of:</p><table style=\"width: 100%;\"><tbody><tr><td style=\"width: 9.2308%; text-align: center;\"><span style=\"font-size: 30px;\">J</span><br></td><td style=\"width: 90.5983%;\">JavaScript-powered frontend for page interactions.</td></tr><tr><td style=\"width: 9.2308%; text-align: center;\"><span style=\"font-size: 30px;\">A</span><br></td><td style=\"width: 90.5983%;\">APIs to connect to various APIs to get 3rd party functionality.</td></tr><tr><td style=\"text-align: center;\"><span style=\"font-size: 30px;\">M</span><br></td><td>Markup (HTML) which gets deployed to a global CDN.</td></tr></tbody></table><p><br></p><p>Cosmic JS is the leading CMS for modern digital projects, including Jamstack apps and static websites. Install the <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Official Cosmic JS JavaScript Client</a> to integrate content into your app in minutes. &nbsp;Get a feel for Cosmic JS by taking a spin through <a href=\"https://cosmicjs.com/apps\" rel=\"noopener noreferrer\" target=\"_blank\">our apps</a> and check out the tutorials below</p><h3><br>Jamstack + Cosmic JS Videos</h3><h4><br></h4><h4>Using Cosmic JS as a Headless CMS with Gatsby</h4><div class=\"fr-embedly                                \" data-original-embed=\"<a href='https://www.youtube.com/watch?v=Qls5frYlJeI' class='embedly-card'></a>\"><a href=\"https://www.youtube.com/watch?v=Qls5frYlJeI\" class=\"embedly-card\"></a></div><h4>Build a Cosmic JS-powered blog using Gatsby</h4><div class=\"fr-embedly                                \" data-original-embed=\"<a href='https://www.youtube.com/watch?v=mGcAWs1xRnY' class='embedly-card'></a>\"><a href=\"https://www.youtube.com/watch?v=mGcAWs1xRnY\" class=\"embedly-card\"></a></div><h4>Webinar: Localization with Cosmic JS and Gatsby</h4><div class=\"fr-embedly                                \" data-original-embed=\"<a href='https://www.youtube.com/watch?v=16m3wRFPGAY' class='embedly-card'></a>\"><a href=\"https://www.youtube.com/watch?v=16m3wRFPGAY\" class=\"embedly-card\"></a></div><p><br></p><h3>Jamstack CMS Articles</h3><p><a href=\"https://cosmicjs.com/articles?q=jamstack\" rel=\"noopener noreferrer\" target=\"_blank\">Jamstack articles</a> in the Cosmic JS Community<br><a href=\"https://cosmicjs.com/blog/the-cosmic-stack\" rel=\"noopener noreferrer\" target=\"_blank\">The Cosmic Stack</a><br><a href=\"https://cosmicjs.com/blog/how-to-build-a-jamstack-website\" rel=\"noopener noreferrer\" target=\"_blank\">How to Build a Jamstack Website</a><br><a href=\"https://cosmicjs.com/apps/static-website\" rel=\"noopener noreferrer\" target=\"_blank\">API-Powered Static Website</a><br><a href=\"https://cosmicjs.com/apps/static-website\" rel=\"noopener noreferrer\" target=\"_blank\"></a><a href=\"https://headlesscms.org/projects/cosmic-js/\" rel=\"noopener noreferrer\" target=\"_blank\">HeadlessCMS.org Docs</a><br><a href=\"https://cosmicjs.com/blog/how-to-build-an-api-powered-static-website-the-best-of-both-worlds\" rel=\"noopener noreferrer\" target=\"_blank\">How to Build an API-Powered Static Website</a></p><h3>Jamstack CMS Resources</h3><p><a href=\"https://www.npmjs.com/package/gatsby-source-cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby source plugin</a><br><a href=\"https://www.npmjs.com/package/gridsome-source-cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Gridsome source plugin</a><br><a href=\"https://cosmicjs.com/docs/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic JS Docs</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\"></a><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official JavaScript Client</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3>Examples</h3><pre>npm i cosmicjs</pre><p>Then in your JavaScript file, get your content:</p><pre>const Cosmic = require(&#39;cosmicjs&#39;)\r\nconst bucket = Cosmic().bucket({ slug: &#39;creative-agency&#39; })\r\nconst objects = (await bucket.getObjects()).objects</pre>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"gCCZtxSpVs","value":"217f0fb0-8eed-11ea-a8ae-93035d8042eb-jamstack-cms.svg","url":"https://cdn.cosmicjs.com/217f0fb0-8eed-11ea-a8ae-93035d8042eb-jamstack-cms.svg","imgix_url":"https://imgix.cosmicjs.com/217f0fb0-8eed-11ea-a8ae-93035d8042eb-jamstack-cms.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"BJeFnerHdJ","value":"5bac7de0-dfb0-11e9-b9e0-f7876ca3179c-jamstack-ed.jpg","url":"https://cdn.cosmicjs.com/5bac7de0-dfb0-11e9-b9e0-f7876ca3179c-jamstack-ed.jpg","imgix_url":"https://imgix.cosmicjs.com/5bac7de0-dfb0-11e9-b9e0-f7876ca3179c-jamstack-ed.jpg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"lnFeQxpjkg","value":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for Jamstack websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"iUeGSg8EbG","value":"Jamstack"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"FFWTcudS8L","value":"Cosmic is the best CMS for Jamstack websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"ywgTYMxrWE","value":"f7ac3d60-dfac-11e9-8e48-eb53c00d5867-jamstack.jpg","url":"https://cdn.cosmicjs.com/f7ac3d60-dfac-11e9-8e48-eb53c00d5867-jamstack.jpg","imgix_url":"https://imgix.cosmicjs.com/f7ac3d60-dfac-11e9-8e48-eb53c00d5867-jamstack.jpg"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"kLC6c49Uej","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"P5iRVQU2Oc","value":"Best Headless CMS for Jamstack"},{"children":[{"type":"repeating_item","children":[{"title":"Title","key":"title","value":"Getting Started with Cosmic CMS and Next.js (Part 1)","type":"text","required":false},{"title":"Link","key":"link","value":"https://www.youtube.com/embed/NZA1dF2IDqQ?showinfo=0&wmode=opaque","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Title","key":"title","value":"Building a Blog with Cosmic CMS and Next.js (Part 2)","type":"text","required":false},{"title":"Link","key":"link","value":"https://www.youtube.com/embed/sdvdwo3g3PE?showinfo=0&wmode=opaque","type":"text","required":false}]}],"type":"repeater","title":"Videos","key":"videos","id":"vEWLrFI0dw","value":"Getting Started with Cosmic CMS and Next.js (Part 1)","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]},{"children":null,"type":"text","title":"Apps Search Term","key":"apps_search_term","id":"v95tq5i2enaf3oreecdk","value":""},{"children":null,"type":"text","title":"Articles Search Term","key":"articles_search_term","id":"apps_search_term_kef9yhcej8gy","value":""},{"children":null,"type":"html-textarea","title":"Page Overview","key":"page_overview","id":"zYuPyDtTWY","value":""},{"children":null,"type":"html-textarea","title":"SEO Content","key":"seo_content","id":"6dT4bcaDeW","value":""}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created":"2018-04-17T22:56:50.372Z","created_at":"2017-10-19T03:50:16.379Z","modified_at":"2020-09-30T14:00:55.928Z","created_by":"5357ef811693be2118000001","modified_by":"5357ef811693be2118000001","status":"published","publish_at":null,"order":11,"published_at":"2020-09-30T14:00:55.928Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/217f0fb0-8eed-11ea-a8ae-93035d8042eb-jamstack-cms.svg","imgix_url":"https://imgix.cosmicjs.com/217f0fb0-8eed-11ea-a8ae-93035d8042eb-jamstack-cms.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/5bac7de0-dfb0-11e9-b9e0-f7876ca3179c-jamstack-ed.jpg","imgix_url":"https://imgix.cosmicjs.com/5bac7de0-dfb0-11e9-b9e0-f7876ca3179c-jamstack-ed.jpg"},"blurb":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for Jamstack websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Jamstack","seo_description":"Cosmic is the best CMS for Jamstack websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/f7ac3d60-dfac-11e9-8e48-eb53c00d5867-jamstack.jpg","imgix_url":"https://imgix.cosmicjs.com/f7ac3d60-dfac-11e9-8e48-eb53c00d5867-jamstack.jpg"},"code_example":"","seo_title":"Best Headless CMS for Jamstack","videos":[{"title":"Getting Started with Cosmic CMS and Next.js (Part 1)","link":"https://www.youtube.com/embed/NZA1dF2IDqQ?showinfo=0&wmode=opaque"},{"title":"Building a Blog with Cosmic CMS and Next.js (Part 2)","link":"https://www.youtube.com/embed/sdvdwo3g3PE?showinfo=0&wmode=opaque"}],"apps_search_term":"","articles_search_term":"","page_overview":"","seo_content":""}},{"_id":"60eddd5e4a0ea00008b3a570","order":12,"slug":"usage-and-overage-policy-updates","title":"Usage and Overage Policy Updates","content":"<p><img src=\"https://cdn.cosmicjs.com/9fa4abe0-e4a8-11eb-aaa7-f94d35ca882e-cosmic-usage.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p style=\"text-align: center;\">New usage graphs in the dashboard 📊</p><p><br>We are thrilled to tell you that Cosmic is growing faster than ever. As we serve an ever-increasing amount of content to billions of users globally we will continue to scale and provide you with the best content management experience in the world. To that end, we are implementing a new usage and overage policy, specifically the usage of our global CDN.</p><p><br><img src=\"https://cdn.cosmicjs.com/fb967680-e4a9-11eb-aaa7-f94d35ca882e-1626270428681.jpg\" class=\"fr-fic fr-dii\" style=\"width: 100%;\">Our global CDN includes several points of presence located around the world to serve API and media resources blazing-fast within milliseconds. Along with our generous usage limits of non-cached API requests and media storage, we have added additional usage verticals of our global CDN which include:</p><ol><li><strong>Cached API requests -</strong> Number of read requests after initial request per month</li><li><strong>Media requests -</strong> Number of media requests per month</li><li><strong>API bandwidth -</strong> Amount of API bandwidth served per month</li><li><strong>Media bandwidth -</strong> Amount of media bandwidth served per month</li></ol><p><br><strong>Pricing page updates</strong><br>Go to the <a href=\"https://www.cosmicjs.com/pricing\">pricing page</a> to see the new overage policy and applicable costs for each usage plan. We have provided very generous limits on all plans and include a new table to inform you about the new overage costs.</p><p><br><strong>New usage graphs</strong><br>To track your Bucket usage, go to <em>Bucket&nbsp;</em><em>Settings &gt; Usage</em> to see new usage graphs.</p><p><br><strong>Overage costs</strong><br>If you are one of the few customers that will have overage costs, you will be charged at the start of the month for the full overage usage of the previous month. The first overage invoices will go out at the start of August for July 2021 usage.</p><p>To see any upcoming month-to-date overage invoices, go to <em>Bucket / Group Plan Settings &gt; Billing&nbsp;</em>(or <em>Account Settings &gt; Billing Details</em> if you added a plan since our <a href=\"https://www.cosmicjs.com/changelog/account-billing-updates\">Billing update</a>)<em>.</em></p><p>To avoid overage charges, you can always upgrade to the next usage plan level at any time. Reach out to <a href=\"mailto:sales@cosmicjs.com\">sales@cosmicjs.com</a> if you need a custom quote.<br><br>We are dedicated to providing you with the best content management experience in the world. And these updates are intended to help you track and scale your global content delivery as your business meets the demands of the growing digital economy.</p><p>If you have any questions about this policy update, you can reach out to me directly in the <a href=\"https://cosmicslack.herokuapp.com/\">Cosmic Slack channel</a> or <a href=\"mailto:tony@cosmicjs.com\">by email</a>.<br><br>Tony Spiro<br>Cosmic CEO</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"nCJ2o0ASL5","value":"2021-07-14"},{"children":null,"type":"object","title":"Author","key":"author","id":"ZkwvueaWcA","value":"5768b253163172890e00002c","object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"bid4hNTfYn","value":"","url":null,"imgix_url":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2021-07-13T18:37:18.578Z","created_by":"5357ef811693be2118000001","modified_at":"2021-07-14T15:57:50.699Z","created":"2021-07-13T18:37:18.578Z","status":"published","thumbnail":"","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2021-07-14T15:57:50.699Z","metadata":{"published_date":"2021-07-14","author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":null,"imgix_url":null}}},{"_id":"5a72248572c6845e0d90b5d5","order":12,"slug":"unleashed-xr-augmented-mixed-and-virtual-realities","title":"Unleashed XR: Augmented, Mixed and Virtual Realities","content":"<p><a href=\"http://www.unleashed-xr.com/\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/913ee1b0-06fd-11e8-a43c-e17c6c324439-ezgif-5-2f720a171b.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></a></p><p><br></p><p>The <a href=\"http://www.unleashed-xr.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Unleashed XR</a> team designs and develops augmented reality, mixed reality and virtual reality solutions for a range of clients across industries. XR (extended reality) is the term referring to the full spectrum from reality to complete virtual environments. Through a structured design thinking process, Unleashed XR designs and develops applications that meet the unique needs of their clients. Unleashed XR is driven by ensuring their services have a tangible positive impact on their clients, making activities, processes and experiences superior, more efficient, cheaper and safer. <br><br>Unleashed XR needed a new blog that allowed developers, editors and contributors to collaborate in the cloud, so they chose Cosmic. They plan on re-vamping the website of their sister business, <a href=\"http://www.unleashed-vr.com/\">Unleashed VR</a>, using Cosmic&#39;s powerful tools in the near future.</p><blockquote><p>&quot;We just launched our new website which utilizes the power of Cosmic. Cosmic was a huge help in the setup of our blog, particularly the Media management, which Cosmic proved invaluable for in respect to optimizing videos and images. Additionally we were able to use Cosmic to stream our videos straight to a Unity Mobile application that we are working on as well. This was great in optimizing the speed of the app, and we&#39;re looking forward to integrating Cosmic in as many ways as possible.&quot;</p><p><cite>&mdash; Tyler Smith, Lead Software Developer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Unleashed XR","key":"company","title":"Company","type":"text","children":null},{"value":"Virtual Reality Software","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"The Unleashed XR team designs and develops augmented reality, mixed reality and virtual reality solutions for a range of clients across industries. Unleashed XR needed a new blog that allowed developers, editors and contributors to collaborate in the cloud, so they chose Cosmic.","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"a9fd29f0-0702-11e8-a43c-e17c6c324439-Logo&Name_PurpleUnleashedXR.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/a9fd29f0-0702-11e8-a43c-e17c6c324439-Logo&Name_PurpleUnleashedXR.png","imgix_url":"https://imgix.cosmicjs.com/a9fd29f0-0702-11e8-a43c-e17c6c324439-Logo&Name_PurpleUnleashedXR.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-01-31T20:18:13.948Z","created_by":"5716b504e9c686d006000073","created":"2018-01-31T20:18:13.948Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"company":"Unleashed XR","industry_type":"Virtual Reality Software","teaser":"The Unleashed XR team designs and develops augmented reality, mixed reality and virtual reality solutions for a range of clients across industries. Unleashed XR needed a new blog that allowed developers, editors and contributors to collaborate in the cloud, so they chose Cosmic.","logo":{"url":"https://cdn.cosmicjs.com/a9fd29f0-0702-11e8-a43c-e17c6c324439-Logo&Name_PurpleUnleashedXR.png","imgix_url":"https://imgix.cosmicjs.com/a9fd29f0-0702-11e8-a43c-e17c6c324439-Logo&Name_PurpleUnleashedXR.png"}}},{"_id":"5efb8ab7f7160f000863457c","slug":"sitefinity-headless-cms","title":"Sitefinity Headless CMS","content":"<p><span style=\"color: rgb(88, 96, 105);\">Sitefinity, from the Progress company, describes itself as a highly extensible, high-performing and easy to use Digital Experience Platform. They offer an all-in-one customer experience marketing solution, also offering headless CMS capabilities. <span style=\"color: rgb(88, 96, 105);\">However, as it tries to keep up with new pure Headless CMS solutions<span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\">.</span></span></span></span></p><p><br></p><h3>Monolithic vs Headless CMS</h3><p><span style=\"color: rgb(88, 96, 105);\">Sitefinity, as a monolithic CMS, and other older installed CMS systems like it, comes with a coupled front end application layer that requires additional development and maintenance. <span style=\"color: rgb(88, 96, 105);\">Cosmic is a Headless CMS meaning that the content API and presentation layer are decoupled which gives your team greater flexibility when it comes to where your content can go.</span></span></p><p><span style=\"color: rgb(88, 96, 105);\">Cosmic provides everything your team of developers and content creators need: powerful and intuitive APIs for developers, and an easy-to-use dashboard for content creators. We&#39;ve removed all complexity and CMS maintenance, so your team can focus on building great products faster, together.</span></p><p><br></p><h3>But can&#39;t Sitefinity go Headless?</h3><p><span style=\"color: rgb(88, 96, 105);\">Although you CAN use <span style=\"color: rgb(88, 96, 105);\">Sitefinity</span> as a Headless CMS or, as they put it, a decoupled CMS, you still have a lot of work to do to bring it up to the level of an optimized CMS system that&#39;s truly headless. And along with<span style=\"color: rgb(88, 96, 105);\">&nbsp;your application,</span> you will need to maintain the CMS itself, adding more development costs and <span style=\"color: rgb(88, 96, 105);\">taking away focus from</span> what really matter<span style=\"color: rgb(88, 96, 105);\">s: creating great content and user experiences in your main website or app.</span></span></p>","metafields":[{"children":null,"type":"file","title":"Logo","key":"logo","id":"dK5YcBzaz6","value":"93b0aee0-bb02-11ea-8170-e7fb6745eb70-sitefinity-headless-cms.jpg","url":"https://cdn.cosmicjs.com/93b0aee0-bb02-11ea-8170-e7fb6745eb70-sitefinity-headless-cms.jpg","imgix_url":"https://imgix.cosmicjs.com/93b0aee0-bb02-11ea-8170-e7fb6745eb70-sitefinity-headless-cms.jpg"},{"children":null,"type":"textarea","title":"Tech","key":"tech","id":"uf8JEqw5U0","value":".NET. Microsoft SQL Server."},{"children":null,"type":"textarea","title":"Scalability","key":"scalability","id":"fpoVElDk1D","value":"Does not scale easily. Limited by servers."},{"children":null,"type":"textarea","title":"Security","key":"security","id":"w1pV9DMBIT","value":"You maintain the security yourself."},{"children":null,"type":"textarea","title":"Maintenance","key":"maintenance","id":"QKypNAibKN","value":"They deploy, host, and maintain everything for you. Along with your application and content, you need to maintain updates and security for your CMS system."},{"children":null,"type":"textarea","title":"Caching","key":"caching","id":"6EtXr70AjH","value":"No caching included out of the box."},{"children":null,"type":"textarea","title":"Media CDN","key":"media_cdn","id":"g4iIK5jMib","value":"No CDN included out of the box."},{"children":null,"type":"textarea","title":"Image Processing","key":"image_processing","id":"tebPe4e2zr","value":"Manually manage your own image sizes and optimizations."},{"children":null,"type":"textarea","title":"Extendability","key":"extendability","id":"S1E14k0Qvq","value":"Possible. Limited. Complicated."},{"children":null,"type":"textarea","title":"Front end","key":"front_end","id":"wTxPnHZdK1","value":"Front end is coupled with backend CMS. Can be made to be Headless."},{"children":null,"type":"textarea","title":"Number of Projects","key":"number_of_projects","id":"ETLpHX7PCw","value":"One login, multiple websites."},{"children":null,"type":"html-textarea","title":"Costs","key":"costs","id":"ZuIw0sRUG1","value":"<p>You will need to hire developer resources as this system is WAY complicated and outdated. Average salary of a full-stack developer is <a href=\"https://neuvoo.com/salary/?job=Full+Stack+Developer\" target=\"_blank\">$111,600 per year</a>. You may need to hire 1-3 developers to maintain the CMS. Plus the cost of licensing Adobe Experience Manager (AEM) can be astronomical.</p>"},{"children":null,"type":"text","title":"Vendor Name","key":"vendor_name","id":"Wbn9npEBNv","value":"Sitefinity"},{"children":null,"type":"switch","title":"Include in link list","key":"include_in_link_list","id":"6SWKfLhRH4","value":true,"options":"yes,no"},{"children":null,"type":"text","title":"Cost Value","key":"cost_value","id":"kRKNb5vcR2","value":"$523,200+"},{"children":null,"type":"text","title":"Cost Text","key":"cost_text","id":"NkE8HBIdS9","value":"per year"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"cms-competitors","created":"2020-06-30T18:55:51.152Z","created_at":"2020-06-30T18:55:51.152Z","modified_at":"2020-06-30T18:55:56.338Z","status":"published","locale":null,"modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-30T18:55:56.338Z","unpublish_at":null,"order":12,"metadata":{"logo":{"url":"https://cdn.cosmicjs.com/93b0aee0-bb02-11ea-8170-e7fb6745eb70-sitefinity-headless-cms.jpg","imgix_url":"https://imgix.cosmicjs.com/93b0aee0-bb02-11ea-8170-e7fb6745eb70-sitefinity-headless-cms.jpg"},"tech":".NET. Microsoft SQL Server.","scalability":"Does not scale easily. Limited by servers.","security":"You maintain the security yourself.","maintenance":"They deploy, host, and maintain everything for you. Along with your application and content, you need to maintain updates and security for your CMS system.","caching":"No caching included out of the box.","media_cdn":"No CDN included out of the box.","image_processing":"Manually manage your own image sizes and optimizations.","extendability":"Possible. Limited. Complicated.","front_end":"Front end is coupled with backend CMS. Can be made to be Headless.","number_of_projects":"One login, multiple websites.","costs":"<p>You will need to hire developer resources as this system is WAY complicated and outdated. Average salary of a full-stack developer is <a href=\"https://neuvoo.com/salary/?job=Full+Stack+Developer\" target=\"_blank\">$111,600 per year</a>. You may need to hire 1-3 developers to maintain the CMS. Plus the cost of licensing Adobe Experience Manager (AEM) can be astronomical.</p>","vendor_name":"Sitefinity","include_in_link_list":true,"cost_value":"$523,200+","cost_text":"per year"}},{"_id":"5ee51827c7b54b0007a3f884","order":12,"slug":"enterprise-cms","title":"Enterprise CMS","content":"","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"ExAbOVFlso","value":"2d5ad540-af30-11ea-a27a-2338c38b0016-enterprise-cms.svg","url":"https://cdn.cosmicjs.com/2d5ad540-af30-11ea-a27a-2338c38b0016-enterprise-cms.svg","imgix_url":"https://imgix.cosmicjs.com/2d5ad540-af30-11ea-a27a-2338c38b0016-enterprise-cms.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"aS2X6OF0sj","value":"2d5ad540-af30-11ea-a27a-2338c38b0016-enterprise-cms.svg","url":"https://cdn.cosmicjs.com/2d5ad540-af30-11ea-a27a-2338c38b0016-enterprise-cms.svg","imgix_url":"https://imgix.cosmicjs.com/2d5ad540-af30-11ea-a27a-2338c38b0016-enterprise-cms.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"44crRVcuzD","value":"<p>Cosmic is the best CMS for Enterprise websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"VXvFNU87y1","value":"Enterprise"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"G6lNb35cNh","value":"Cosmic is the best CMS for Enterprise websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"JshZFkSTIp","value":"35ce6070-af30-11ea-a27a-2338c38b0016-enterprise-cms.jpg","url":"https://cdn.cosmicjs.com/35ce6070-af30-11ea-a27a-2338c38b0016-enterprise-cms.jpg","imgix_url":"https://imgix.cosmicjs.com/35ce6070-af30-11ea-a27a-2338c38b0016-enterprise-cms.jpg"},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"27LDhfOaEA","value":"Best Headless CMS for Enterprise"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"zRbMS5n8oO","value":""},{"children":[{"type":"repeating_item","children":[{"title":"Title","key":"title","value":"Using Cosmic as a Headless CMS with Gatsby","type":"text","required":false},{"title":"Link","key":"link","value":"https://www.youtube.com/embed/Qls5frYlJeI?showinfo=0&wmode=opaque&widget_referrer=https%3A%2F%2Fwww.cosmicjs.com%2Fknowledge-base%2Freact-cms&enablejsapi=1&origin=https%3A%2F%2Fcdn.embedly.com&widgetid=1","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Title","key":"title","value":"Build a Cosmic-powered blog using Gatsby","type":"text","required":false},{"title":"Link","key":"link","value":"https://www.youtube.com/embed/mGcAWs1xRnY?showinfo=0&wmode=opaque&widget_referrer=https%3A%2F%2Fwww.cosmicjs.com%2Fknowledge-base%2Freact-cms&enablejsapi=1&origin=https%3A%2F%2Fcdn.embedly.com&widgetid=1","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Title","key":"title","value":"Webinar: Localization with Cosmic and Gatsby","type":"text","required":false},{"title":"Link","key":"link","value":"https://www.youtube.com/embed/16m3wRFPGAY?showinfo=0&wmode=opaque&widget_referrer=https%3A%2F%2Fwww.cosmicjs.com%2Fknowledge-base%2Freact-cms&enablejsapi=1&origin=https%3A%2F%2Fcdn.embedly.com&widgetid=1","type":"text","required":false}]}],"type":"repeater","title":"Videos","key":"videos","id":"Ew7afWPUhS","value":"Using Cosmic as a Headless CMS with Gatsby","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2020-06-13T18:17:11.526Z","created_by":"5357ef811693be2118000001","created":"2020-06-13T18:17:11.526Z","status":"published","modified_at":"2020-06-27T19:15:15.654Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2020-06-27T19:15:15.654Z","metadata":{"image":{"url":"https://cdn.cosmicjs.com/2d5ad540-af30-11ea-a27a-2338c38b0016-enterprise-cms.svg","imgix_url":"https://imgix.cosmicjs.com/2d5ad540-af30-11ea-a27a-2338c38b0016-enterprise-cms.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/2d5ad540-af30-11ea-a27a-2338c38b0016-enterprise-cms.svg","imgix_url":"https://imgix.cosmicjs.com/2d5ad540-af30-11ea-a27a-2338c38b0016-enterprise-cms.svg"},"blurb":"<p>Cosmic is the best CMS for Enterprise websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Enterprise","seo_description":"Cosmic is the best CMS for Enterprise websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/35ce6070-af30-11ea-a27a-2338c38b0016-enterprise-cms.jpg","imgix_url":"https://imgix.cosmicjs.com/35ce6070-af30-11ea-a27a-2338c38b0016-enterprise-cms.jpg"},"seo_title":"Best Headless CMS for Enterprise","code_example":"","videos":[{"title":"Using Cosmic as a Headless CMS with Gatsby","link":"https://www.youtube.com/embed/Qls5frYlJeI?showinfo=0&wmode=opaque&widget_referrer=https%3A%2F%2Fwww.cosmicjs.com%2Fknowledge-base%2Freact-cms&enablejsapi=1&origin=https%3A%2F%2Fcdn.embedly.com&widgetid=1"},{"title":"Build a Cosmic-powered blog using Gatsby","link":"https://www.youtube.com/embed/mGcAWs1xRnY?showinfo=0&wmode=opaque&widget_referrer=https%3A%2F%2Fwww.cosmicjs.com%2Fknowledge-base%2Freact-cms&enablejsapi=1&origin=https%3A%2F%2Fcdn.embedly.com&widgetid=1"},{"title":"Webinar: Localization with Cosmic and Gatsby","link":"https://www.youtube.com/embed/16m3wRFPGAY?showinfo=0&wmode=opaque&widget_referrer=https%3A%2F%2Fwww.cosmicjs.com%2Fknowledge-base%2Freact-cms&enablejsapi=1&origin=https%3A%2F%2Fcdn.embedly.com&widgetid=1"}]}},{"_id":"5d49dcfacb90f81897c5870c","order":12,"slug":"cms-software-for-marketing-campaigns","title":"CMS Software for Marketing Campaigns","content":"<p>Cosmic JS provides flexible CMS Software for teams managing marketing campaigns. Companies manage their marketing content with Cosmic JS CMS Software because the Dashboard is simple to use, adding marketing contributors is easy and Cosmic JS Webhooks allow you to create powerful workflows.&nbsp;</p><p>Teams using CMS Software to power marketing content don&#39;t have to maintain their own server and content management system. By focusing on apps and not infrastructure, teams are able to publish press content faster, together.&nbsp;</p><h3><br>What is Headless CMS Software?</h3><p>Headless CMS Software works by providing non-technical editors with a Dashboard UI to model, create and publish content while providing developers with API tools and resources to integrate content with any website or app. By decoupling content from code, teams create a central content repository that can power all of their content-powered applications.&nbsp;</p>","metafields":[{"value":"CMS Software for Marketing Campaigns ","key":"solution_name","title":"Solution Name","type":"text","children":null},{"value":"67c97d50-b885-11e9-b1f9-b9470ded605a-63cd02c0-9f54-11e9-ac09-4be8a5631b5e-91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen-Shot-2017-11-16-at-1.59.39-PM.png","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/67c97d50-b885-11e9-b1f9-b9470ded605a-63cd02c0-9f54-11e9-ac09-4be8a5631b5e-91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen-Shot-2017-11-16-at-1.59.39-PM.png","imgix_url":"https://imgix.cosmicjs.com/67c97d50-b885-11e9-b1f9-b9470ded605a-63cd02c0-9f54-11e9-ac09-4be8a5631b5e-91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen-Shot-2017-11-16-at-1.59.39-PM.png"},{"object_type":"case-studies","value":"5b743e111a739a78a5f0725b,59f49a7cee2adb545c0005bc,5be9ca96cc3f3e2ce66ce511","key":"case_studies","title":"Case Studies","type":"objects","children":null,"objects":[{"_id":"5b743e111a739a78a5f0725b","slug":"hostmaker-manages-localized-content","title":"Hostmaker Manages Localized Content ","content":"<p><a href=\"https://hostmaker.com/gb/london/\" rel=\"noopener noreferrer\" target=\"_blank\">Hostmaker</a> is a property management company that operates across 9 cities in 6 countries. Hostmaker manages properties that are being rented to vacationers and lodgers from around the world. They take the hosts&#39; home and provide cleaning and decor services prior to listing the location on up to 15 various travel booking platforms. Hostmaker&#39;s hosts love the service for the superior volume that they continue to deliver compared to their competitors, which are driven by proprietary pricing strategies, local market expertise and global industry experience.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/18ece0f0-a64d-11e8-a7de-db2e81aae7c3-IMG_4191.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Hostmaker&#39;s tech team needed a solution for their product marketing managers to update Landing Pages, Case Studies, Press Releases and FAQs for the various markets they manage, including cities such as Rome, London and Barcelona. Localizing content for Hostmaker&#39;s audiences is a mission-critical piece of the marketing strategy that is driving such tremendous growth. Hostmaker chose Cosmic to give their cross-functional team the tools they need to perform their jobs. Now Hostmaker&#39;s developers can build reusable components and scalable content models while their marketers can manage content specific to a particular locale.&nbsp;</p><p style=\"text-align: center;\"><br></p><p><br></p><div class=\"fr-embedly      \" data-original-embed=\"<a href='https://twitter.com/HOSTMAKERCo/status/1035198450739097600' class='embedly-card'></a>\"><a href=\"https://twitter.com/HOSTMAKERCo/status/1035198450739097600\" class=\"embedly-card\"></a></div><p><br></p><p><br></p><blockquote><p>&quot;We&rsquo;ve been using Cosmic for around a year. At first there were some issues with components that prohibited us from performing all our desired tasks, but all those issues were quickly solved by the Cosmic Team. As of now, the tools are great, and have even improved during our use of the platform. It does all the things we need at the moment. As a tool Cosmic has been not only ideal for managing components on the site but adaptive enough for our non-tech users to create landing pages and modify existing content, saving us precious dev time.&rdquo;</p><p><br></p><p><cite>&mdash; Hostmaker Digital Team</cite></p></blockquote>","metafields":[{"value":"Hostmaker","key":"company","title":"Company","type":"text","children":null},{"value":"Hospitality ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Hostmaker is a property management company that operates across 9 cities in 6 countries. Hostmaker manages properties that are being rented to vacationers and lodgers from around the world. They take the hosts' home and provide cleaning and decor services prior to listing the location on up to 15 various travel booking platforms. Hostmaker's hosts love the service for the superior volume that they continue to deliver compared to their competitors, which are driven by proprietary pricing strategies, local market expertise and global industry experience. \n\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-01T22:26:36.367Z","created_by":"5716b504e9c686d006000073","created":"2018-08-15T14:52:01.115Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-09-25T15:10:44.600Z"},{"_id":"59f49a7cee2adb545c0005bc","slug":"life-is-good-shares-gratitude","title":"Life is Good Shares Gratitude","content":"<p>The <a href=\"https://www.lifeisgood.com/?utm_source=cosmicjs.com&utm_medium=referral&utm_campaign=gratitudewall\" rel=\"noopener noreferrer\" target=\"_blank\">Life is Good</a> community shares one simple, unifying mission: to spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add &quot;sticky notes&quot; with their name and what they are grateful for to the gratitude board.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7dbdb6b0-c59a-11e7-a9fd-155dbd0b0a76-Optimism_Tree_default.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Gratitude Wall is adapted from the Cosmic <a href=\"https://cosmicjs.com/apps/sticky-notes\" rel=\"noopener noreferrer\" target=\"_blank\">Sticky Notes App</a>, built on <a href=\"https://cosmicjs.com/knowledge-base/react-cms\" rel=\"noopener noreferrer\" target=\"_blank\">React</a>, Redux and <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a>. The Wall is currently running on Heroku and is i-framed into WordPress on its landing page. The Life is Good team also built a simple moderation application so that their team can easily approve or delete User Generated Content as it flows in. They also built client-side moderation during content entry, which checks against a banned list of words and blocks submission.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen Shot 2017-11-16 at 1.59.39 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a robust scaffolding to accept, store, and moderate User Generated Content and display it in a custom web app in real time. With Cosmic, we were able to develop an MVP in a matter of hours and focus our resources on UX and design versus content management. The Cosmic Support Team was extremely helpful throughout the process. We&rsquo;re excited to leverage these tools again for future projects.&rdquo;</p><p><cite>&mdash; Chris Schwab, Front End Engineer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Life is Good","key":"company","title":"Company","type":"text","children":null},{"value":"Ecommerce | Apparel","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-28T14:55:56.103Z","created_by":"5716b504e9c686d006000073","created":"2017-10-28T14:55:56.103Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-07-25T21:53:35.289Z"},{"_id":"5be9ca96cc3f3e2ce66ce511","slug":"road-redemption-launches-a-marketing-microsite","title":"Road Redemption Launches a Marketing Microsite","content":"<p dir=\"ltr\"><a href=\"http://www.tripwireinteractive.com\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a>, a leading entertainment software developer and publisher founded in 2005, recently launched its corporate website on Cosmic. The Tripwire Interactive team can now easily manage microsite content for each game with a dedicated studio manager as its content creator. This is important as Tripwire is always debuting new marketing campaigns to accompany game launches.&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/88ed0170-e6ab-11e8-93f0-a94cde6f34a7-22181530_1681202368577875_2605572198226217292_o.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><a href=\"http://roadredemption.tripwireinteractive.com\" rel=\"noopener noreferrer\" target=\"_blank\">Road Redemption</a> is the first of many games to have innovative content creator access provided via a headless CMS API that delivers the best of both worlds for cross-functional teams. <a href=\"https://cosmicjs.com/case-studies/tripwire-interactive-builds-a-react-corporate-website\" rel=\"noopener noreferrer\" target=\"_blank\">Read more</a> about how Tripwire Interactive builds apps faster using Cosmic.</p><p dir=\"ltr\"><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team\r\nhas been enjoying the ease of use with the new system.&quot;</p><p><cite>&mdash; Owen Liversidge, Lead Developer</cite></p></blockquote><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1395df80-e6ad-11e8-93f0-a94cde6f34a7-BIJMnRzCcAAcEDC.png-large.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"Road Redemption ","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Tripwire Interactive, a leading entertainment software developer and publisher founded in 2005, recently launched its corporate website on Cosmic. The Tripwire Interactive team can now easily manage microsite content for each game with a dedicated studio manager as its content creator. This is important as Tripwire is always debuting new marketing campaigns to accompany game launches. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png","imgix_url":"https://imgix.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-11-12T18:46:46.371Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-11-13T21:30:43.964Z"}]},{"repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}],"value":"react-cosmedium-blog","key":"app_slugs","title":"App Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"react-cosmedium-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"simple-vue-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"nextjs-tour-diary","type":"text","required":false}]}]},{"repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}],"value":"twitter-search","key":"extension_slugs","title":"Extension SLugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"twitter-search","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"export-to-csv","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"unsplash-photos","type":"text","required":false}]}]},{"value":"\"Cosmic JS provided us with a robust scaffolding to accept, store, and moderate User Generated Content and display it in a custom web app in real time. With Cosmic, we were able to develop an MVP in a matter of hours and focus our resources on UX and design versus content management.”","key":"testimonial","title":"Testimonial","type":"textarea","children":null},{"value":"Chris Schwab, Front End Engineer at Life is Good","key":"testimonial_credit","title":"Testimonial Credit","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created_at":"2019-08-05T20:18:17.006Z","created_by":"5716b504e9c686d006000073","modified_at":"2019-08-06T20:45:06.043Z","created":"2019-08-06T20:03:06.041Z","status":"published","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-08-06T20:45:06.043Z","metadata":{"solution_name":"CMS Software for Marketing Campaigns ","image":{"url":"https://cdn.cosmicjs.com/67c97d50-b885-11e9-b1f9-b9470ded605a-63cd02c0-9f54-11e9-ac09-4be8a5631b5e-91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen-Shot-2017-11-16-at-1.59.39-PM.png","imgix_url":"https://imgix.cosmicjs.com/67c97d50-b885-11e9-b1f9-b9470ded605a-63cd02c0-9f54-11e9-ac09-4be8a5631b5e-91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen-Shot-2017-11-16-at-1.59.39-PM.png"},"case_studies":[{"_id":"5b743e111a739a78a5f0725b","slug":"hostmaker-manages-localized-content","title":"Hostmaker Manages Localized Content ","content":"<p><a href=\"https://hostmaker.com/gb/london/\" rel=\"noopener noreferrer\" target=\"_blank\">Hostmaker</a> is a property management company that operates across 9 cities in 6 countries. Hostmaker manages properties that are being rented to vacationers and lodgers from around the world. They take the hosts&#39; home and provide cleaning and decor services prior to listing the location on up to 15 various travel booking platforms. Hostmaker&#39;s hosts love the service for the superior volume that they continue to deliver compared to their competitors, which are driven by proprietary pricing strategies, local market expertise and global industry experience.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/18ece0f0-a64d-11e8-a7de-db2e81aae7c3-IMG_4191.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Hostmaker&#39;s tech team needed a solution for their product marketing managers to update Landing Pages, Case Studies, Press Releases and FAQs for the various markets they manage, including cities such as Rome, London and Barcelona. Localizing content for Hostmaker&#39;s audiences is a mission-critical piece of the marketing strategy that is driving such tremendous growth. Hostmaker chose Cosmic to give their cross-functional team the tools they need to perform their jobs. Now Hostmaker&#39;s developers can build reusable components and scalable content models while their marketers can manage content specific to a particular locale.&nbsp;</p><p style=\"text-align: center;\"><br></p><p><br></p><div class=\"fr-embedly      \" data-original-embed=\"<a href='https://twitter.com/HOSTMAKERCo/status/1035198450739097600' class='embedly-card'></a>\"><a href=\"https://twitter.com/HOSTMAKERCo/status/1035198450739097600\" class=\"embedly-card\"></a></div><p><br></p><p><br></p><blockquote><p>&quot;We&rsquo;ve been using Cosmic for around a year. At first there were some issues with components that prohibited us from performing all our desired tasks, but all those issues were quickly solved by the Cosmic Team. As of now, the tools are great, and have even improved during our use of the platform. It does all the things we need at the moment. As a tool Cosmic has been not only ideal for managing components on the site but adaptive enough for our non-tech users to create landing pages and modify existing content, saving us precious dev time.&rdquo;</p><p><br></p><p><cite>&mdash; Hostmaker Digital Team</cite></p></blockquote>","metafields":[{"value":"Hostmaker","key":"company","title":"Company","type":"text","children":null},{"value":"Hospitality ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Hostmaker is a property management company that operates across 9 cities in 6 countries. Hostmaker manages properties that are being rented to vacationers and lodgers from around the world. They take the hosts' home and provide cleaning and decor services prior to listing the location on up to 15 various travel booking platforms. Hostmaker's hosts love the service for the superior volume that they continue to deliver compared to their competitors, which are driven by proprietary pricing strategies, local market expertise and global industry experience. \n\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-01T22:26:36.367Z","created_by":"5716b504e9c686d006000073","created":"2018-08-15T14:52:01.115Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-09-25T15:10:44.600Z","metadata":{"company":"Hostmaker","industry_type":"Hospitality ","teaser":"Hostmaker is a property management company that operates across 9 cities in 6 countries. Hostmaker manages properties that are being rented to vacationers and lodgers from around the world. They take the hosts' home and provide cleaning and decor services prior to listing the location on up to 15 various travel booking platforms. Hostmaker's hosts love the service for the superior volume that they continue to deliver compared to their competitors, which are driven by proprietary pricing strategies, local market expertise and global industry experience. \n\n\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg"}}},{"_id":"59f49a7cee2adb545c0005bc","slug":"life-is-good-shares-gratitude","title":"Life is Good Shares Gratitude","content":"<p>The <a href=\"https://www.lifeisgood.com/?utm_source=cosmicjs.com&utm_medium=referral&utm_campaign=gratitudewall\" rel=\"noopener noreferrer\" target=\"_blank\">Life is Good</a> community shares one simple, unifying mission: to spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add &quot;sticky notes&quot; with their name and what they are grateful for to the gratitude board.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7dbdb6b0-c59a-11e7-a9fd-155dbd0b0a76-Optimism_Tree_default.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Gratitude Wall is adapted from the Cosmic <a href=\"https://cosmicjs.com/apps/sticky-notes\" rel=\"noopener noreferrer\" target=\"_blank\">Sticky Notes App</a>, built on <a href=\"https://cosmicjs.com/knowledge-base/react-cms\" rel=\"noopener noreferrer\" target=\"_blank\">React</a>, Redux and <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a>. The Wall is currently running on Heroku and is i-framed into WordPress on its landing page. The Life is Good team also built a simple moderation application so that their team can easily approve or delete User Generated Content as it flows in. They also built client-side moderation during content entry, which checks against a banned list of words and blocks submission.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen Shot 2017-11-16 at 1.59.39 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a robust scaffolding to accept, store, and moderate User Generated Content and display it in a custom web app in real time. With Cosmic, we were able to develop an MVP in a matter of hours and focus our resources on UX and design versus content management. The Cosmic Support Team was extremely helpful throughout the process. We&rsquo;re excited to leverage these tools again for future projects.&rdquo;</p><p><cite>&mdash; Chris Schwab, Front End Engineer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Life is Good","key":"company","title":"Company","type":"text","children":null},{"value":"Ecommerce | Apparel","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-28T14:55:56.103Z","created_by":"5716b504e9c686d006000073","created":"2017-10-28T14:55:56.103Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-07-25T21:53:35.289Z","metadata":{"company":"Life is Good","industry_type":"Ecommerce | Apparel","teaser":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","logo":{"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}}},{"_id":"5be9ca96cc3f3e2ce66ce511","slug":"road-redemption-launches-a-marketing-microsite","title":"Road Redemption Launches a Marketing Microsite","content":"<p dir=\"ltr\"><a href=\"http://www.tripwireinteractive.com\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a>, a leading entertainment software developer and publisher founded in 2005, recently launched its corporate website on Cosmic. The Tripwire Interactive team can now easily manage microsite content for each game with a dedicated studio manager as its content creator. This is important as Tripwire is always debuting new marketing campaigns to accompany game launches.&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/88ed0170-e6ab-11e8-93f0-a94cde6f34a7-22181530_1681202368577875_2605572198226217292_o.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><a href=\"http://roadredemption.tripwireinteractive.com\" rel=\"noopener noreferrer\" target=\"_blank\">Road Redemption</a> is the first of many games to have innovative content creator access provided via a headless CMS API that delivers the best of both worlds for cross-functional teams. <a href=\"https://cosmicjs.com/case-studies/tripwire-interactive-builds-a-react-corporate-website\" rel=\"noopener noreferrer\" target=\"_blank\">Read more</a> about how Tripwire Interactive builds apps faster using Cosmic.</p><p dir=\"ltr\"><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team\r\nhas been enjoying the ease of use with the new system.&quot;</p><p><cite>&mdash; Owen Liversidge, Lead Developer</cite></p></blockquote><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1395df80-e6ad-11e8-93f0-a94cde6f34a7-BIJMnRzCcAAcEDC.png-large.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"Road Redemption ","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Tripwire Interactive, a leading entertainment software developer and publisher founded in 2005, recently launched its corporate website on Cosmic. The Tripwire Interactive team can now easily manage microsite content for each game with a dedicated studio manager as its content creator. This is important as Tripwire is always debuting new marketing campaigns to accompany game launches. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png","imgix_url":"https://imgix.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-11-12T18:46:46.371Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-11-13T21:30:43.964Z","metadata":{"company":"Road Redemption ","industry_type":"Gaming","teaser":"Tripwire Interactive, a leading entertainment software developer and publisher founded in 2005, recently launched its corporate website on Cosmic. The Tripwire Interactive team can now easily manage microsite content for each game with a dedicated studio manager as its content creator. This is important as Tripwire is always debuting new marketing campaigns to accompany game launches. \n","logo":{"url":"https://cdn.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png","imgix_url":"https://imgix.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png"}}}],"app_slugs":[{"slug":"react-cosmedium-blog"},{"slug":"simple-vue-blog"},{"slug":"nextjs-tour-diary"}],"extension_slugs":[{"slug":"twitter-search"},{"slug":"export-to-csv"},{"slug":"unsplash-photos"}],"testimonial":"\"Cosmic JS provided us with a robust scaffolding to accept, store, and moderate User Generated Content and display it in a custom web app in real time. With Cosmic, we were able to develop an MVP in a matter of hours and focus our resources on UX and design versus content management.”","testimonial_credit":"Chris Schwab, Front End Engineer at Life is Good"}},{"_id":"61f865b610829f000884e4a8","order":12,"slug":"new-dashboard-updates-search-and-filter","title":"New Dashboard Updates: Search and Filter","content":"<p>We have some exciting updates to share with you on the new Cosmic dashboard: global search and Object table filtering is now available!</p><p><strong>TL;DR</strong><br><a href=\"https://app-v2.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Sign up for the alpha preview</a> to check out the new features.</p><h3><strong>Global Search</strong></h3><p>You can now press <code>CMD+K</code> on any page (or click the link in the left hand sidebar for you mouse-click maximalists) and pull up a handy command pallet to search by Object, Object Type, or Media, as well as find quick links to helpful resources.</p><p><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout\" data-action=\"zoom\" data-video=\"https://cdn.cosmicjs.com/c66b09c0-844b-11ec-8e12-4f611a7927fa-global-single-theme.mp4\" loop=\"\" muted=\"\" playsinline=\"\" src=\"https://cdn.cosmicjs.com/c66b09c0-844b-11ec-8e12-4f611a7927fa-global-single-theme.mp4\">Your browser does not support HTML5 video.</video></span></p><h3><br><strong>Objects Table Filtering</strong></h3><p>One of features that sets Cosmic apart from other content solutions is our programmatic querying. Along with being very powerful in the API, this querying approach also comes in handy when you want to do content filtering and organization in the dashboard\r\n(especially when saving smart views).</p><p>We&#39;re happy to say that you can now use queries to do Object filtering from the table view with even more capabilities!</p><p>How it works: click the filter button in the Objects table view and use the UI form builder to build your filtering logic. Filter by value matches, negative operators as well as use powerful numeric operators like greater than, less than, and more. And\r\nyou can even build your own code queries using the available &quot;Raw&quot; tab!</p><p>Check out the docs for more information on how to do <a href=\"https://docs.cosmicjs.com/api-reference/queries#query-selectors\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Object querying</a> and follow these examples:</p><p><strong>Filter by specific Object Relationship like author or category (showing Single Object Metafield below)</strong></p><p><strong><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout\" data-video=\"https://imgix.cosmicjs.com/6dd880e0-83b4-11ec-8e12-4f611a7927fa-filter-author.mp4\" loop=\"\" muted=\"\" playsinline=\"\" src=\"https://imgix.cosmicjs.com/6dd880e0-83b4-11ec-8e12-4f611a7927fa-filter-author.mp4\">Your browser does not support HTML5 video.</video></span></strong></p><p><br><strong>Filter by string search in Object content (showing contains below)</strong></p><p><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout\" data-video=\"https://imgix.cosmicjs.com/ee0f6120-83b4-11ec-8e12-4f611a7927fa-filter-needle.mp4\" loop=\"\" muted=\"\" playsinline=\"\" src=\"https://imgix.cosmicjs.com/ee0f6120-83b4-11ec-8e12-4f611a7927fa-filter-needle.mp4\">Your browser does not support HTML5 video.</video></span></p><p><br><strong>Filter by tags (showing checkbox Metafield below)</strong></p><p><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout\" data-video=\"https://cdn.cosmicjs.com/94258990-83b5-11ec-8e12-4f611a7927fa-filter-tags.mp4\" loop=\"\" muted=\"\" playsinline=\"\" src=\"https://cdn.cosmicjs.com/94258990-83b5-11ec-8e12-4f611a7927fa-filter-tags.mp4\">Your browser does not support HTML5 video.</video></span></p><p><br><strong>Filter by tags and numeric operators (showing less than or equal to below)</strong></p><p><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout\" data-video=\"https://cdn.cosmicjs.com/6c202d10-83b5-11ec-8e12-4f611a7927fa-filter-price.mp4\" loop=\"\" muted=\"\" playsinline=\"\" src=\"https://cdn.cosmicjs.com/6c202d10-83b5-11ec-8e12-4f611a7927fa-filter-price.mp4\">Your browser does not support HTML5 video.</video></span></p><p><br></p><h3><strong>Developer Tools Query Examples</strong></h3><p>After setting your query in the table filter, you can grab the query from the Developer Tools drawer and plug it into your application (showing filtering Objects by Multiple Object Metafield below)</p><p><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout\" data-video=\"https://cdn.cosmicjs.com/c9eb4100-83b5-11ec-8e12-4f611a7927fa-filter-get-query.mp4\" loop=\"\" muted=\"\" playsinline=\"\" src=\"https://cdn.cosmicjs.com/c9eb4100-83b5-11ec-8e12-4f611a7927fa-filter-get-query.mp4\">Your browser does not support HTML5 video.</video></span></p><p><br></p><h3><strong>Join the Alpha</strong></h3><p>We are on a mission to build the best content management solution in the world. We are excited to offer you these new features during our alpha release of the new dashboard. If you haven&#39;t joined, <a href=\"https://app-v2.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">sign up to get on the waitlist</a> to preview the new dashboard including these new features. It is our hope that we can enable your team with even greater flexibility and control over your Cosmic-powered content and hopefully get some feedback from you!</p><h3><strong>Get Some Swag <span class=\"fr-emoticon fr-deletable\">😎</span>&nbsp;</strong></h3><p>After joining the waitlist, share your personal link in the confirmation email on social media to be entered to receive free Cosmic swag including hoodies, tshirts, coffee mugs, and stickers (makes great Valentine&#39;s gifts for friends and significant\r\nothers!).</p><p>Stay tuned for more exciting updates! Follow us <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">on Twitter</a>, and join our team <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">on Slack</a> to get the latest on the new dashboard progress.</p><p>The Cosmic Team</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"1MLCnFk9kG","value":"5ffa1d1e0046b0000799cb7b","required":true,"object_type":"authors","object":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"PlZpb7SWpy","value":"<p>We have some exciting updates to share with you on the new Cosmic dashboard: global search and Object table filtering is now available!</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"pqVWe32Ff9","value":"c2a90ba0-843e-11ec-8e12-4f611a7927fa-Alpha-Preview2x.png","url":"https://cdn.cosmicjs.com/c2a90ba0-843e-11ec-8e12-4f611a7927fa-Alpha-Preview2x.png","imgix_url":"https://imgix.cosmicjs.com/c2a90ba0-843e-11ec-8e12-4f611a7927fa-Alpha-Preview2x.png"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"PfMAkhJis0","value":"We have some exciting updates to share with you on the new Cosmic dashboard: global search and Object table filtering is now available!"},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"58HHAeXWa5","value":"2022-02-02"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2022-01-31T22:41:58.488Z","created_by":"5357ef811693be2118000001","modified_at":"2022-02-02T18:15:27.312Z","created":"2022-01-31T22:41:58.488Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/c2a90ba0-843e-11ec-8e12-4f611a7927fa-Alpha-Preview2x.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2022-02-02T18:15:27.312Z","metadata":{"author":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}}},"teaser":"<p>We have some exciting updates to share with you on the new Cosmic dashboard: global search and Object table filtering is now available!</p>","featured_image":{"url":"https://cdn.cosmicjs.com/c2a90ba0-843e-11ec-8e12-4f611a7927fa-Alpha-Preview2x.png","imgix_url":"https://imgix.cosmicjs.com/c2a90ba0-843e-11ec-8e12-4f611a7927fa-Alpha-Preview2x.png"},"seo_meta_description":"We have some exciting updates to share with you on the new Cosmic dashboard: global search and Object table filtering is now available!","published_date":"2022-02-02"}},{"_id":"53e822f1d75852ba08000001","slug":"plugins-developers","title":"Plugins | Developers","content":"<h1>Developing Plugins with Cosmic JS</h1><div>Plugins are applications that offers users an extension of the Cosmic JS object management system.</div><div><br></div><div>1. Plugins must be uploaded as a zip file format.</div><div>2.&nbsp;<span style=\"line-height: 1.428571429;\">The zip file, once upzipped must have the following tree with exact file names:</span></div><div><span style=\"line-height: 1.428571429;\"><br></span></div><div><span style=\"line-height: 1.428571429;\">plugin</span></div><div><span style=\"color: inherit; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: inherit; white-space: pre-wrap; line-height: 1.428571429; background-color: transparent;\">├── </span><span style=\"line-height: 1.428571429;\">index.html</span></div><div><span style=\"color: inherit; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: inherit; white-space: pre-wrap; line-height: 1.428571429; background-color: transparent;\">├── </span><span style=\"line-height: 1.428571429;\">app.js</span></div><div><span style=\"line-height: 1.428571429;\"><br></span></div><div>The contents of the files need to contain the following:</div><div><br></div><div>1. The index.html file:</div><div>- This file is the front-end display for your Cosmic JS Plugin</div><div><br></div><div>2. An app.js file.</div><div>- This will tell the Cosmic JS system what to do with your plugin once it is installed into a user's bucket.</div><div><br></div><div>After you have created your plugin and uploaded the zip file, your plugin will be ready to add to your bucket. &nbsp;Click the \"Plugins\" link in the left-side nav when inside your bucket. &nbsp;Your plugin will also be available to other users. &nbsp;Aren't you generous!</div>","metafields":[],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"pages","created":"2014-08-11T01:57:05.797Z","order":12,"modified":"2015-03-25T22:18:31.538Z","files":"","metadata":null},{"_id":"5919aa2ee5e17073690057b6","order":12,"slug":"kofo-okesola","title":"Kofo Okesola","content":"","metafields":[{"value":"b3fecc70-3970-11e7-8b8c-299270efeba9-kofo.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/b3fecc70-3970-11e7-8b8c-299270efeba9-kofo.jpg","imgix_url":"https://imgix.cosmicjs.com/b3fecc70-3970-11e7-8b8c-299270efeba9-kofo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-15T13:16:29.985Z","created_by":"5357ef811693be2118000001","created":"2017-05-15T13:16:29.985Z","status":"published","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/b3fecc70-3970-11e7-8b8c-299270efeba9-kofo.jpg","imgix_url":"https://imgix.cosmicjs.com/b3fecc70-3970-11e7-8b8c-299270efeba9-kofo.jpg"}}},{"_id":"5bad1c11f394147a6754be76","slug":"github","title":"GitHub","content":"","metafields":[{"children":null,"type":"text","title":"Link","key":"link","id":"owS27xTQGJ","value":"https://app.cosmicjs.com/auth/github"},{"children":null,"type":"file","title":"Image","key":"image","id":"FyNMGhJqOC","value":"a0885240-c279-11e8-988a-37ba9c6b7f9d-github.jpg","url":"https://cdn.cosmicjs.com/a0885240-c279-11e8-988a-37ba9c6b7f9d-github.jpg","imgix_url":"https://imgix.cosmicjs.com/a0885240-c279-11e8-988a-37ba9c6b7f9d-github.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"integrations","created":"2018-09-27T18:06:09.089Z","created_at":"2018-09-27T18:06:09.089Z","modified_at":"2020-02-25T19:28:52.433Z","status":"published","locale":null,"published_at":"2020-02-25T19:28:52.433Z","created_by":"5357ef811693be2118000001","order":12,"modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"link":"https://app.cosmicjs.com/auth/github","image":{"url":"https://cdn.cosmicjs.com/a0885240-c279-11e8-988a-37ba9c6b7f9d-github.jpg","imgix_url":"https://imgix.cosmicjs.com/a0885240-c279-11e8-988a-37ba9c6b7f9d-github.jpg"}}},{"_id":"61cc8ac9fbc3c000082cb078","order":13,"slug":"cosmic-year-in-review-2021","title":"Cosmic Year in Review","content":"<p>2021 was a big year for Cosmic and we are pumped for what 2022 will bring. Here&#39;s a list of some of the things that we achieved over the past 12 months:</p><h2>2021 Highlights</h2><p><strong>Merge Requests</strong><br>Earlier this year we released <a href=\"https://www.cosmicjs.com/blog/introducing-merge-requests\" rel=\"noopener noreferrer\" target=\"_blank\">Merge Requests</a> to <a href=\"https://twitter.com/CosmicJS/status/1349046108526403586/retweets/with_comments\" rel=\"noopener noreferrer\" target=\"_blank\">much fanfare</a>. Content development is a team sport and we believe Merge Requests is a game-changer. By enabling Git-like version control workflows, Merge Requests enables greater confidence and collaboration to help\r\nteams increase content productivity.</p><p><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout\" data-video=\"https://cdn.cosmicjs.com/de4dc920-51f1-11eb-9dee-df51ce912356-add-merge-request.mp4\" loop=\"\" muted=\"\" playsinline=\"\" src=\"https://cdn.cosmicjs.com/de4dc920-51f1-11eb-9dee-df51ce912356-add-merge-request.mp4\">Your browser does not support HTML5 video.</video></span><br><br></p><p><strong>New Documentation</strong><br>Every good development platform needs easy-to-follow and thorough documentation. We released <a href=\"https://docs.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">our new docs site</a> to provide a better experience when diving into the possibilities that Cosmic offers with our API tools and resources.</p><p><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"card-shadow fr-draggable fr-fvc fr-dvi video-popout\" data-video=\"https://cdn.cosmicjs.com/309d8980-6af3-11eb-afd3-010bb5d66a3e-Docs-v2.mp4\" loop=\"\" muted=\"\" playsinline=\"\" src=\"https://cdn.cosmicjs.com/309d8980-6af3-11eb-afd3-010bb5d66a3e-Docs-v2.mp4\">Your browser does not support HTML5 video.</video></span><br><br></p><p><strong>New REST API v2</strong><br>At Cosmic, we pride ourselves on providing the best API for content management. And it got even better this year with the <a href=\"https://www.cosmicjs.com/changelog/announcing-cosmic-rest-api-v2-new-docs\" rel=\"noopener noreferrer\" target=\"_blank\">release of version 2 of our REST API</a>. We doubled down on the features that make our API the most straightforward API out there. Flexible queries, declarative API response properties, and millisecond response times make our API second to none.<br><br><strong>New Billing Organization</strong><br>We released an <a href=\"https://www.cosmicjs.com/changelog/account-billing-updates\" rel=\"noopener noreferrer\" target=\"_blank\">update to billing details</a> that enables you to consolidate your billing for your user account (versus on each resource) which enables easier onboarding and accounting for paying customers.<br><br><strong>New CDN Usage Policies</strong><br>We are serving an ever-increasing amount of mission-critical content to billions of users globally. With this growth comes a responsibility to be clear whenever policies change that affect account management. We announced <a href=\"https://www.cosmicjs.com/changelog/usage-and-overage-policy-updates\" rel=\"noopener noreferrer\" target=\"_blank\">new policies to our CDN usage and overages</a> to further assure customers that our service is pay-as-you-go and your billing scales with your usage fairly and transparently. New metrics were made available in the dashboard to enable users to monitor and predict any overages on plan usage.</p><p><img src=\"https://imgix.cosmicjs.com/fb967680-e4a9-11eb-aaa7-f94d35ca882e-1626270428681.jpg\" data-name=\"1626270428681.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"><br><br><strong>New Dashboard</strong><br>Finally, our biggest undertaking this year was the new Cosmic dashboard. We sent teasers and previews a <a href=\"https://www.cosmicjs.com/blog/sneak-peek-brand-new-dashboard\" rel=\"noopener noreferrer\" target=\"_blank\">couple</a> of <a href=\"https://www.cosmicjs.com/blog/new-dashboard-progress\" rel=\"noopener noreferrer\" target=\"_blank\">times</a>, ultimately releasing the new dashboard in <a href=\"https://www.cosmicjs.com/blog/new-dashboard-alpha-release\" rel=\"noopener noreferrer\" target=\"_blank\">a private alpha</a>. It&#39;s now available for early access and we encourage you to <a href=\"https://app-v2.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">sign up</a> to be a part of the next evolution of Cosmic!</p><p><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"card-shadow video-popout fr-draggable fr-fvc fr-dvi video-popout\" loop=\"\" muted=\"\" playsinline=\"\" src=\"https://cdn.cosmicjs.com/94b7de60-5469-11ec-88b1-5377807b2a13-alpha-preview.mp4\">Your browser does not support HTML5 video.</video></span></p><h2>What&#39;s to come in 2022</h2><p>Cosmic is on a mission to be the best content management system in the world. Along with building a world-class product, we have assembled a world-class team to achieve our ambitious mission. I am extremely grateful for our amazing team and customers that have made this a stellar year for Cosmic. Cheers to a productive 2021 and looking forward to an exciting 2022! 🥂<br><br>Tony Spiro<br>Cosmic CEO</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"O3liKG4xp2","value":"5768b253163172890e00002c","required":true,"object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"lAMAbTlWVq","value":"<p>2021 was a big year for Cosmic and we are pumped for what 2022 will bring. Here&#39;s a list of some of the things that we achieved over the past 12 months</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"L6vIaNlNIA","value":"16b4e350-68dc-11ec-a48b-8d3e15049091-Cosmic-Year-in-Review1x.png","url":"https://cdn.cosmicjs.com/16b4e350-68dc-11ec-a48b-8d3e15049091-Cosmic-Year-in-Review1x.png","imgix_url":"https://imgix.cosmicjs.com/16b4e350-68dc-11ec-a48b-8d3e15049091-Cosmic-Year-in-Review1x.png"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"9c5qR1ry4o","value":"2021 was a big year for Cosmic and we are pumped for what 2022 will bring. Here's a list of some of the things that we achieved over the past 12 months"},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"70Ht5NkEPQ","value":"2021-12-30"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2021-12-29T16:20:25.838Z","created_by":"5357ef811693be2118000001","modified_at":"2022-01-07T22:53:29.358Z","created":"2021-12-29T16:20:25.838Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/16b4e350-68dc-11ec-a48b-8d3e15049091-Cosmic-Year-in-Review1x.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2022-01-07T22:53:29.358Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>2021 was a big year for Cosmic and we are pumped for what 2022 will bring. Here&#39;s a list of some of the things that we achieved over the past 12 months</p>","featured_image":{"url":"https://cdn.cosmicjs.com/16b4e350-68dc-11ec-a48b-8d3e15049091-Cosmic-Year-in-Review1x.png","imgix_url":"https://imgix.cosmicjs.com/16b4e350-68dc-11ec-a48b-8d3e15049091-Cosmic-Year-in-Review1x.png"},"seo_meta_description":"2021 was a big year for Cosmic and we are pumped for what 2022 will bring. Here's a list of some of the things that we achieved over the past 12 months","published_date":"2021-12-30"}},{"_id":"60b10525f01ad2000890a85a","order":13,"slug":"account-billing-updates","title":"Account Billing Updates","content":"<p>We&#39;ve made some dashboard updates that should make managing account information, billing, and payment methods on your Cosmic account much easier. To get started, go to <a href=\"https://app.cosmicjs.com/account/billing-details\"><em>Account Settings &gt; Billing Details</em></a> to set up your payment methods and manage your global billing for your Cosmic products and services.<br><br><strong>New Payment Methods Manager</strong><br>You can now add and manage payment methods directly on your user account from your account settings area. Before, billing for Buckets was handled on the Bucket settings page. Now, with payment methods managed by your user account, you can manage billing for multiple Buckets and add-ons without re-entering payment information. Plus, you can now use Google Pay!</p><p>Go to <a href=\"https://app.cosmicjs.com/account/billing-details\" rel=\"noopener noreferrer\" target=\"_blank\"><em>Account Settings &gt; Billing Details</em></a> to set up your payment methods.</p><p><br><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi\" loop=\"\" muted=\"\" playsinline=\"\" src=\"https://cdn.cosmicjs.com/0a7aec70-bfc6-11eb-a51b-e5bc9c143c99-add-payment.mp4\" style=\"width: 100%;\">Your browser does not support HTML5 video.</video></span></p><p><strong>Add Billing Details</strong><br>Along with this new way of managing your billing and payment methods, you can now update the name, email, and additional information that will be available on your invoices. Payment history will also be available on your account Billing Details page. (For the old Bucket billing, you will still see payment history on the Bucket billing page)</p><p><br><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi\" loop=\"\" muted=\"\" playsinline=\"\" src=\"https://cdn.cosmicjs.com/ec484080-bfc6-11eb-a51b-e5bc9c143c99-billing-details.mp4\" style=\"width: 100%;\">Your browser does not support HTML5 video.</video></span></p><p><strong>Group Plans for Bulk Rate</strong><br>Group plans (formally called Billing Packages) are available for grouping Bucket usage plans onto a single cost-savings bulk-rate plan. Choose between 5 and 10 Buckets, plus a 10% discount for yearly plans.<br><br><strong>Transfer Billing</strong><br>Transfering billing between members of your team is now easier than ever. To have another team member take over billing, simply have them click &quot;Transfer Billing&quot; and the billing will switch to their account. (Team members must have admin access on the Bucket\r\nto transfer billing). See screenshot below.<img src=\"https://cdn.cosmicjs.com/71a567a0-bfc5-11eb-a51b-e5bc9c143c99-Screen-Shot-2021-05-28-at-9.57.25-AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>We hope you enjoy these updates to make it easier to manage your account and billing details. If you have any questions, you can reach out to us at <a href=\"//support@cosmicjs.com\">support@cosmicjs.com</a></p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"Wj9htTQEdD","value":"2021-06-02"},{"children":null,"type":"object","title":"Author","key":"author","id":"rY9IqsvxRG","value":"5ffa1d1e0046b0000799cb7b","object_type":"authors","object":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"U3O4UVaMJY","value":"","url":null,"imgix_url":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2021-05-28T14:58:45.824Z","created_by":"5357ef811693be2118000001","modified_at":"2021-06-02T13:16:39.394Z","created":"2021-05-28T14:58:45.824Z","status":"published","thumbnail":"","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2021-06-02T13:16:39.394Z","metadata":{"published_date":"2021-06-02","author":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}}},"featured_image":{"url":null,"imgix_url":null}}},{"_id":"5bad1cd0dd42057ecb90054d","slug":"typeform","title":"Typeform","content":"","metafields":[{"value":"https://cosmicjs.com/articles/integrating-typeform-data-into-cosmic-js-jmjmkoyz","key":"link","title":"Link","type":"text","children":false,"has_length_edit":true,"parent":false},{"value":"a1903da0-c27f-11e8-956f-0b9a61326f1b-typeform.png","key":"image","title":"Image","type":"file","children":false,"has_length_edit":false,"parent":false,"url":"https://cdn.cosmicjs.com/a1903da0-c27f-11e8-956f-0b9a61326f1b-typeform.png","imgix_url":"https://imgix.cosmicjs.com/a1903da0-c27f-11e8-956f-0b9a61326f1b-typeform.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"integrations","created":"2018-09-27T18:09:20.042Z","created_at":"2018-09-27T18:09:20.042Z","modified_at":"2018-09-27T18:09:20.042Z","status":"published","locale":null,"published_at":"2018-09-27T18:09:20.042Z","created_by":"5357ef811693be2118000001","order":13,"metadata":{"link":"https://cosmicjs.com/articles/integrating-typeform-data-into-cosmic-js-jmjmkoyz","image":{"url":"https://cdn.cosmicjs.com/a1903da0-c27f-11e8-956f-0b9a61326f1b-typeform.png","imgix_url":"https://imgix.cosmicjs.com/a1903da0-c27f-11e8-956f-0b9a61326f1b-typeform.png"}}},{"_id":"5a73423ee520776813591ee2","order":13,"slug":"rocket-radio-builds-a-podcast-streaming-website","title":"Rocket Radio Builds a Podcast-Streaming Website","content":"<p dir=\"ltr\"><a href=\"http://www.rocketradio.com\" rel=\"noopener noreferrer\" target=\"_blank\">Rocket Radio</a> is a San Francisco Bay Area Music Network that creates podcasts featuring music and interviews with established and rising stars in the music industry. With shows covering all music genres, they needed a new website that allowed for numerous content editors and developers representing a blended team. See how Rocket Radio &nbsp;built their new podcast website using <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a>, <a href=\"https://cosmicjs.com/knowledge-base/react-cms\" rel=\"noopener noreferrer\" target=\"_blank\">React.js</a>, Redux and Cosmic.</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://cosmic-s3.imgix.net/15880780-270b-11e8-9dc5-e74ed0ce0965-29177246_412275625864297_3165994124966057316_n.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Rocket Radio tech team built out a single page application with Node, React and Redux using <a href=\"https://cosmicjs.com/apps\" rel=\"noopener noreferrer\" target=\"_blank\">Example Apps</a> from the <a href=\"https://cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a>. The team was able to leverage the Cosmic API to build out core components from Authentication to a news gallery to podcast listening features.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/67c166a0-27d7-11e8-97d1-3747ad2387c0-rocketradio_casestudy.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;From Docs to Example Apps and Service, it was all there. Cosmic provided a huge boost in cutting development time all while helping our team meet its goals. I would certainly recommend Cosmic to anyone seeking to build out a website using some of the latest technology while looking to stay ahead of the game.&quot;</p><p><cite>&mdash; Gus A., Senior Software Engineer&nbsp;</cite></p></blockquote><p><br></p><div class=\"fr-embedly \" data-original-embed=\"<a href='https://twitter.com/RocketRadio_/status/1035254459251580928' class='embedly-card'></a>\"><a href=\"https://twitter.com/RocketRadio_/status/1035254459251580928\" class=\"embedly-card\"></a></div>","metafields":[{"value":"Rocket Radio","key":"company","title":"Company","type":"text","children":null},{"value":"Music and Entertainment","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Rocket Radio is a San Francisco Bay Area Music Network that creates podcasts featuring music and interviews with established and rising stars in the music industry. With shows covering all music genres, they needed a new website that allowed for numerous content editors and developers representing a blended team. See how Rocket Radio  built their new podcast website using Node.js React.js, Redux and Cosmic.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"acbb5cf0-076d-11e8-a43c-e17c6c324439-IMG_0380.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/acbb5cf0-076d-11e8-a43c-e17c6c324439-IMG_0380.jpg","imgix_url":"https://imgix.cosmicjs.com/acbb5cf0-076d-11e8-a43c-e17c6c324439-IMG_0380.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-02-01T16:37:18.070Z","created_by":"5716b504e9c686d006000073","created":"2018-02-01T16:37:18.070Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-08-30T20:32:56.765Z","metadata":{"company":"Rocket Radio","industry_type":"Music and Entertainment","teaser":"Rocket Radio is a San Francisco Bay Area Music Network that creates podcasts featuring music and interviews with established and rising stars in the music industry. With shows covering all music genres, they needed a new website that allowed for numerous content editors and developers representing a blended team. See how Rocket Radio  built their new podcast website using Node.js React.js, Redux and Cosmic.\n","logo":{"url":"https://cdn.cosmicjs.com/acbb5cf0-076d-11e8-a43c-e17c6c324439-IMG_0380.jpg","imgix_url":"https://imgix.cosmicjs.com/acbb5cf0-076d-11e8-a43c-e17c6c324439-IMG_0380.jpg"}}},{"_id":"5eea6f01d8159f00070e615e","order":13,"slug":"gridsome-cms","title":"Gridsome CMS","content":"","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"YRRV9IPguf","value":"4aebc400-b0d1-11ea-832f-713ccfd1a841-gridsome-cms.svg","url":"https://cdn.cosmicjs.com/4aebc400-b0d1-11ea-832f-713ccfd1a841-gridsome-cms.svg","imgix_url":"https://imgix.cosmicjs.com/4aebc400-b0d1-11ea-832f-713ccfd1a841-gridsome-cms.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"ZX3GHvgatv","value":"45d7b780-b0d1-11ea-832f-713ccfd1a841-gridsome-cms-icon.svg","url":"https://cdn.cosmicjs.com/45d7b780-b0d1-11ea-832f-713ccfd1a841-gridsome-cms-icon.svg","imgix_url":"https://imgix.cosmicjs.com/45d7b780-b0d1-11ea-832f-713ccfd1a841-gridsome-cms-icon.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"sBP8hDCb9U","value":"<p>Cosmic is the best CMS for Gridsome websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"VSY5aLiRIh","value":"Gridsome"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"ZnsMYxZXag","value":"Cosmic is the best CMS for Gridsome websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"fWQzt4GkM8","value":"2766e690-b0d1-11ea-832f-713ccfd1a841-gridsome-cms.jpg","url":"https://cdn.cosmicjs.com/2766e690-b0d1-11ea-832f-713ccfd1a841-gridsome-cms.jpg","imgix_url":"https://imgix.cosmicjs.com/2766e690-b0d1-11ea-832f-713ccfd1a841-gridsome-cms.jpg"},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"0HUHHtEgLq","value":"Best Headless CMS for Gridsome"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"2WRpy4gfJO","value":""},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"lVESbek3Cp","value":"Using Cosmic as a Headless CMS with Gatsby","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2020-06-17T19:29:05.242Z","created_by":"5357ef811693be2118000001","created":"2020-06-17T19:29:05.242Z","status":"published","modified_at":"2020-06-27T19:12:59.695Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2020-06-27T19:12:59.695Z","metadata":{"image":{"url":"https://cdn.cosmicjs.com/4aebc400-b0d1-11ea-832f-713ccfd1a841-gridsome-cms.svg","imgix_url":"https://imgix.cosmicjs.com/4aebc400-b0d1-11ea-832f-713ccfd1a841-gridsome-cms.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/45d7b780-b0d1-11ea-832f-713ccfd1a841-gridsome-cms-icon.svg","imgix_url":"https://imgix.cosmicjs.com/45d7b780-b0d1-11ea-832f-713ccfd1a841-gridsome-cms-icon.svg"},"blurb":"<p>Cosmic is the best CMS for Gridsome websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Gridsome","seo_description":"Cosmic is the best CMS for Gridsome websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/2766e690-b0d1-11ea-832f-713ccfd1a841-gridsome-cms.jpg","imgix_url":"https://imgix.cosmicjs.com/2766e690-b0d1-11ea-832f-713ccfd1a841-gridsome-cms.jpg"},"seo_title":"Best Headless CMS for Gridsome","code_example":"","videos":[]}},{"_id":"5efb8ad2b0efb900072e2a94","slug":"kentico-kontent","title":"Kentico Kontent","content":"<p><span style=\"color: rgb(88, 96, 105);\">Kentico Kontent is a Headless CMS that positions itself as a cloud-based content management platform that streamlines content production and delivery while offering developers all the benefits of a headless CMS.</span></p><h3><br>Developers and Creators</h3><p><span style=\"color: rgb(88, 96, 105);\">Kentico <span style=\"color: rgb(88, 96, 105);\">Kontent</span></span><span style=\"color: rgb(88, 96, 105);\">, like Cosmic, offers both a REST and GraphQL API. Check out the&nbsp;</span><a href=\"https://docs.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic API docs<span style=\"color: rgb(88, 96, 105);\">&nbsp;</span></a><span style=\"color: rgb(88, 96, 105);\">and the&nbsp;</span><a href=\"https://docs.kontent.ai/\" rel=\"noopener noreferrer\" target=\"_blank\">Kentico Kontent API docs</a>\r\n<span style=\"color: rgb(88, 96, 105);\">to see the difference in approach.</span></p><p><span style=\"color: rgb(88, 96, 105);\">Cosmic provides everything your team of developers and content creators need: powerful and intuitive APIs for developers, and an easy-to-use dashboard for content creators. <span style=\"color: rgb(88, 96, 105);\"><span style=\"color: rgb(88, 96, 105);\">We&#39;ve removed all complexity and CMS maintenance, so your team can focus on building great products faster, together.</span></span></span></p><h3><br>Limitations</h3><p><span style=\"color: rgb(88, 96, 105);\">With <span style=\"color: rgb(88, 96, 105);\">Kentico Kontent</span>, you will see that they put some pretty hard limits on content item count, localization, user roles, and more.</span></p>","metafields":[{"children":null,"type":"switch","title":"Include in link list","key":"include_in_link_list","id":"ZJnyWi8UpB","value":true,"options":"yes,no"},{"children":null,"type":"text","title":"Vendor Name","key":"vendor_name","id":"3b5Xzknfue","value":"Kentico Kontent Headless CMS"},{"children":null,"type":"file","title":"Logo","key":"logo","id":"cv9SoyKguh","value":"4c02d6b0-bb00-11ea-8170-e7fb6745eb70-kentico-kontent-headless-cms.svg","url":"https://cdn.cosmicjs.com/4c02d6b0-bb00-11ea-8170-e7fb6745eb70-kentico-kontent-headless-cms.svg","imgix_url":"https://imgix.cosmicjs.com/4c02d6b0-bb00-11ea-8170-e7fb6745eb70-kentico-kontent-headless-cms.svg"},{"children":null,"type":"textarea","title":"Tech","key":"tech","id":"JEZJjtQnRu","value":"Technology not indicated."},{"children":null,"type":"textarea","title":"Scalability","key":"scalability","id":"UC5p7NCu1w","value":"Managed scalability."},{"children":null,"type":"textarea","title":"Security","key":"security","id":"8qTwZ6WcMZ","value":"They manage your dashboard."},{"children":null,"type":"textarea","title":"Maintenance","key":"maintenance","id":"BylJFskHnK","value":"They manage your CMS."},{"children":null,"type":"textarea","title":"Caching","key":"caching","id":"a0aXfEWN5Q","value":"Caching included on the API."},{"children":null,"type":"textarea","title":"Media CDN","key":"media_cdn","id":"IKnB3kQgTf","value":"CDN included."},{"children":null,"type":"textarea","title":"Image Processing","key":"image_processing","id":"k9AddztMLh","value":"Image sizes and optimization capabilities."},{"children":null,"type":"textarea","title":"Extendability","key":"extendability","id":"ja2YtSr65z","value":"UI extensions."},{"children":null,"type":"textarea","title":"Front end","key":"front_end","id":"oIOfiJQtVj","value":"Front end is decoupled from the backend CMS."},{"children":null,"type":"textarea","title":"Number of Projects","key":"number_of_projects","id":"BCHZsuLfLa","value":"One login, multiple projects."},{"children":null,"type":"html-textarea","title":"Costs","key":"costs","id":"YsTrG4ESgG","value":"<p>Watch out for a large price cliff to climb from an entry plan to anything larger. You&#39;ll be at an Enterprise level taking out a second mortgage on your house before you know it.</p>"},{"children":null,"type":"text","title":"Cost Value","key":"cost_value","id":"6Unj7liFx7","value":"HIGH"},{"children":null,"type":"text","title":"Cost Text","key":"cost_text","id":"bJdEfnxTYN","value":""}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"cms-competitors","created":"2020-06-30T18:56:18.023Z","created_at":"2020-06-30T18:56:18.023Z","modified_at":"2020-06-30T18:56:22.730Z","status":"published","locale":null,"modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-30T18:56:22.730Z","unpublish_at":null,"order":13,"metadata":{"include_in_link_list":true,"vendor_name":"Kentico Kontent Headless CMS","logo":{"url":"https://cdn.cosmicjs.com/4c02d6b0-bb00-11ea-8170-e7fb6745eb70-kentico-kontent-headless-cms.svg","imgix_url":"https://imgix.cosmicjs.com/4c02d6b0-bb00-11ea-8170-e7fb6745eb70-kentico-kontent-headless-cms.svg"},"tech":"Technology not indicated.","scalability":"Managed scalability.","security":"They manage your dashboard.","maintenance":"They manage your CMS.","caching":"Caching included on the API.","media_cdn":"CDN included.","image_processing":"Image sizes and optimization capabilities.","extendability":"UI extensions.","front_end":"Front end is decoupled from the backend CMS.","number_of_projects":"One login, multiple projects.","costs":"<p>Watch out for a large price cliff to climb from an entry plan to anything larger. You&#39;ll be at an Enterprise level taking out a second mortgage on your house before you know it.</p>","cost_value":"HIGH","cost_text":""}},{"_id":"53e821960635df3708000001","slug":"apps-developers","title":"Apps | Developers","content":"<h1>Developing Apps with Cosmic JS</h1><div>Developing apps with Cosmic JS is easy. &nbsp;<a href=\"https://cosmicjs.com/docs/\">Follow the documentation</a> for references to the API calls. &nbsp;An example of a Cosmic JS App is <a href=\"https://cosmicjs.com/appstore/cosmic-scale-angular\" target=\"\">Cosmic Scale Angular</a>, a single page website built on the Angular front-end framework that plugs into a bucket on Cosmic JS to host it's content.</div><div><br></div><div>You can build anything using Cosmic JS as the content platform. &nbsp;Feel free to build your app on Ruby on Rails, Node.js, PHP, Angular JS, iOS apps or Android apps. &nbsp;It's up to you! &nbsp;<span style=\"line-height: 1.428571429;\">Add as many apps as you want, i</span><span style=\"line-height: 1.428571429;\">t is completely free to add your app to the Cosmic JS App Store. &nbsp;A small fee of 25% is taken from each app sale. &nbsp;You will be paid at the end of the month by check when you account balance is over $100.</span><br></div><div><br></div><div>Cosmic JS Apps have only a few guidelines:</div><div>1. Apps must be in zip file format.</div><div>2.&nbsp;<span style=\"line-height: 1.428571429;\">Apps must use Cosmic JS to host it's content.</span></div><div><span style=\"line-height: 1.428571429;\">3. Apps may not contain any vulgar or graphic material.</span></div><div><span style=\"line-height: 1.428571429;\"><br></span></div><div><div>Optional items that will make the App more likely to be approved:</div><div><br></div><div>1. The App contains a thorough Readme.txt file detailing how to use the App.</div><div>2. The App has a content bucket on Cosmic JS&nbsp;<span style=\"line-height: 1.428571429;\">for demonstration&nbsp;</span><span style=\"line-height: 1.428571429;\">that can be copied to another users account.</span></div></div>","metafields":[],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"pages","created":"2014-08-11T01:51:18.507Z","order":13,"modified":"2014-08-17T21:54:59.446Z","files":"","metadata":null},{"_id":"5914999aa57d9d4b390034d5","order":13,"slug":"dmytro-kutsaniuk","title":"Dmytro Kutsaniuk","content":"","metafields":[{"value":"e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg","imgix_url":"https://imgix.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-11T17:04:26.061Z","created_by":"5357ef811693be2118000001","created":"2017-05-11T17:04:26.061Z","status":"published","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg","imgix_url":"https://imgix.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg"}}},{"_id":"5d49dee7171a3305b38875d1","order":13,"slug":"cms-software-for-native-apps","title":"CMS Software for Native Apps","content":"<p>Cosmic JS provides flexible CMS Software for teams managing content for native apps. Teams choose to manage content using Cosmic JS CMS Software because the CMS Dashboard is simple and intuitive to manage content, and integration with your native app is fast and easy.</p><p>Teams using CMS Software to power content for their native apps don&#39;t have to maintain their own server and content management system. By focusing on apps and not infrastructure, teams are able to publish content to their native apps faster, together.&nbsp;</p><h3><br>What is Headless CMS Software?</h3><p>Headless CMS Software works by providing non-technical editors with a Dashboard UI to model, create and publish content while providing developers with API tools and resources to integrate content with any website or app. By decoupling content from code, teams create a central content repository that can power all of their content-powered applications.&nbsp;</p>","metafields":[{"value":"CMS Software for Native Apps ","key":"solution_name","title":"Solution Name","type":"text","children":null},{"value":"b5c58520-b886-11e9-b1f9-b9470ded605a-633ad600-9dc1-11e9-a5b4-e5df9f8049d3-Plato.png","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/b5c58520-b886-11e9-b1f9-b9470ded605a-633ad600-9dc1-11e9-a5b4-e5df9f8049d3-Plato.png","imgix_url":"https://imgix.cosmicjs.com/b5c58520-b886-11e9-b1f9-b9470ded605a-633ad600-9dc1-11e9-a5b4-e5df9f8049d3-Plato.png"},{"object_type":"case-studies","value":"5bd889bf80b80325461575c5,5c3774946bcb7526c0bddbe7","key":"case_studies","title":"Case Studies","type":"objects","children":null,"objects":[{"_id":"5bd889bf80b80325461575c5","slug":"plato-delivers-mobile-news-feed-content-with-cosmic-js","title":"Plato Delivers Mobile News Feed Content with Cosmic","content":"<p dir=\"ltr\">Plato&#39;s mission is to bring people together through meaningful &amp; social games. <a href=\"http://www.platoapp.com\" rel=\"noopener noreferrer\" target=\"_blank\">Plato</a> combines chat &amp; games seamlessly, as the first messenger built from the ground up to support full multiplayer games. With a team comprised of Yahoo and gaming veterans plus backing from WhatsApp, Plato is available now on iOS &amp; Android.<br><br></p><p><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b09c33a0-dc63-11e8-a63d-c7054455c7d9-ice_screenshot_20181030-114842.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">Plato had a home-built CMS that, between operational costs and the engineering salaries to maintain it, was costing far too much. The team decided to replace their internal system with Cosmic to allow their developers to build new content models when they need to while empowering editors to manage content without bottlenecking the development team.&nbsp;</p><p dir=\"ltr\">Plato&#39;s new tech stack is Golang based and hosted on AWS. Plato&#39;s mobile clients, written in Swift and Kotlin, access their news feed content, which is ATOM Syndication Format. The application uses the Cosmic REST API to pull articles and package them into an ATOM-compliant feed.&nbsp;</p><p dir=\"ltr\"><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/42e9ed20-dc63-11e8-9019-332e53831a9a-14963156_1599170143430300_6292826317590698217_n.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;It is refreshing to use an API-first CMS, rather than trying to integrate with a complex, monolithic system and adapt it to our specific use case.&rdquo;</p><p><cite>&mdash; Jesse Macnish, Chief Technology Officer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Plato","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Plato's mission is to bring people together through meaningful & social games. Plato combines chat & games seamlessly, as the first messenger built from the ground up to support full multiplayer games. With a team comprised of Yahoo and gaming veterans plus backing from WhatsApp, Plato is available now on iOS & Android.\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-30T16:41:35.346Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-01-08T23:23:29.527Z"},{"_id":"5c3774946bcb7526c0bddbe7","slug":"dreamwalks-decoupled-approach-to-content-management","title":"DreamWalk's Decoupled Approach to Content Management","content":"<p>With a list of chart-topping apps to their name and a long history of mobile innovation, <a href=\"https://dreamwalk.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">DreamWalk</a> is the App Development agency trusted by some of the world&rsquo;s biggest brands and most ambitious startups. With clients like Coca-Cola&reg;, New Mexico Tourism and BP, DreamWalk is among the longest standing and most trusted app development firms in Australia.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/73d7c690-1562-11e9-829a-87a2ed6f5067-dreamwalk-cosmic-case-study-banner.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">The team at DreamWalk was in search of a headless CMS that would speed up their development cycles. They needed to empower their developers with flexibility out-of-the-box while enabling their content managers to manage content in a web-based Dashboard. They chose Cosmic due to its easy content modeling tools that allowed them to set up client projects more quickly and easily than before, adding to their bottom line and expanding the tools available in their digital toolkit.</p><p dir=\"ltr\"><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/5013b550-14f6-11e9-b55d-3354984e810c-DreamWalk.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;At DreamWalk we always strive to give our clients the best possible customer experience. Cosmic enables us to work within tight budgets without compromising on that great experience.&quot;</p><cite>&mdash; Karl Graf, Director and Mobile App Strategist</cite></blockquote>","metafields":[{"value":"DreamWalk","key":"company","title":"Company","type":"text","children":null},{"value":"App Development Agency","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"With a list of chart-topping apps to their name and a long history of mobile innovation, DreamWalk is the App Development agency trusted by some of the world’s biggest brands and most ambitious startups. With clients like Coca-Cola®, New Mexico Tourism and BP, DreamWalk is among the longest standing and most trusted app development firms in Australia. \n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"f891dd10-14f6-11e9-ac3b-29773f4ac49e-A0Vz6NqU_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f891dd10-14f6-11e9-ac3b-29773f4ac49e-A0Vz6NqU_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/f891dd10-14f6-11e9-ac3b-29773f4ac49e-A0Vz6NqU_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2019-01-10T16:36:36.690Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-01-11T16:56:26.753Z"}]},{"repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}],"value":"react-native-twitter-clone","key":"app_slugs","title":"App Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"react-native-twitter-clone","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"cross-platform-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"product-catelog-app","type":"text","required":false}]}]},{"repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}],"value":"twitter-search","key":"extension_slugs","title":"Extension SLugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"twitter-search","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"export-to-csv","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"imgix-editor ","type":"text","required":false}]}]},{"value":"\"It is refreshing to use an API-first CMS, rather than trying to integrate with a complex, monolithic system and adapt it to our specific use case.”\n","key":"testimonial","title":"Testimonial","type":"textarea","children":null},{"value":"Jesse Macnish, Chief Technology Officer at Plato Chat","key":"testimonial_credit","title":"Testimonial Credit","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created_at":"2019-08-05T20:18:17.006Z","created_by":"5716b504e9c686d006000073","modified_at":"2019-08-06T21:43:39.558Z","created":"2019-08-06T20:11:19.362Z","status":"published","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-08-06T21:43:39.558Z","metadata":{"solution_name":"CMS Software for Native Apps ","image":{"url":"https://cdn.cosmicjs.com/b5c58520-b886-11e9-b1f9-b9470ded605a-633ad600-9dc1-11e9-a5b4-e5df9f8049d3-Plato.png","imgix_url":"https://imgix.cosmicjs.com/b5c58520-b886-11e9-b1f9-b9470ded605a-633ad600-9dc1-11e9-a5b4-e5df9f8049d3-Plato.png"},"case_studies":[{"_id":"5bd889bf80b80325461575c5","slug":"plato-delivers-mobile-news-feed-content-with-cosmic-js","title":"Plato Delivers Mobile News Feed Content with Cosmic","content":"<p dir=\"ltr\">Plato&#39;s mission is to bring people together through meaningful &amp; social games. <a href=\"http://www.platoapp.com\" rel=\"noopener noreferrer\" target=\"_blank\">Plato</a> combines chat &amp; games seamlessly, as the first messenger built from the ground up to support full multiplayer games. With a team comprised of Yahoo and gaming veterans plus backing from WhatsApp, Plato is available now on iOS &amp; Android.<br><br></p><p><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b09c33a0-dc63-11e8-a63d-c7054455c7d9-ice_screenshot_20181030-114842.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">Plato had a home-built CMS that, between operational costs and the engineering salaries to maintain it, was costing far too much. The team decided to replace their internal system with Cosmic to allow their developers to build new content models when they need to while empowering editors to manage content without bottlenecking the development team.&nbsp;</p><p dir=\"ltr\">Plato&#39;s new tech stack is Golang based and hosted on AWS. Plato&#39;s mobile clients, written in Swift and Kotlin, access their news feed content, which is ATOM Syndication Format. The application uses the Cosmic REST API to pull articles and package them into an ATOM-compliant feed.&nbsp;</p><p dir=\"ltr\"><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/42e9ed20-dc63-11e8-9019-332e53831a9a-14963156_1599170143430300_6292826317590698217_n.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;It is refreshing to use an API-first CMS, rather than trying to integrate with a complex, monolithic system and adapt it to our specific use case.&rdquo;</p><p><cite>&mdash; Jesse Macnish, Chief Technology Officer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Plato","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Plato's mission is to bring people together through meaningful & social games. Plato combines chat & games seamlessly, as the first messenger built from the ground up to support full multiplayer games. With a team comprised of Yahoo and gaming veterans plus backing from WhatsApp, Plato is available now on iOS & Android.\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-30T16:41:35.346Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-01-08T23:23:29.527Z","metadata":{"company":"Plato","industry_type":"Gaming ","teaser":"Plato's mission is to bring people together through meaningful & social games. Plato combines chat & games seamlessly, as the first messenger built from the ground up to support full multiplayer games. With a team comprised of Yahoo and gaming veterans plus backing from WhatsApp, Plato is available now on iOS & Android.\n\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg"}}},{"_id":"5c3774946bcb7526c0bddbe7","slug":"dreamwalks-decoupled-approach-to-content-management","title":"DreamWalk's Decoupled Approach to Content Management","content":"<p>With a list of chart-topping apps to their name and a long history of mobile innovation, <a href=\"https://dreamwalk.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">DreamWalk</a> is the App Development agency trusted by some of the world&rsquo;s biggest brands and most ambitious startups. With clients like Coca-Cola&reg;, New Mexico Tourism and BP, DreamWalk is among the longest standing and most trusted app development firms in Australia.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/73d7c690-1562-11e9-829a-87a2ed6f5067-dreamwalk-cosmic-case-study-banner.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">The team at DreamWalk was in search of a headless CMS that would speed up their development cycles. They needed to empower their developers with flexibility out-of-the-box while enabling their content managers to manage content in a web-based Dashboard. They chose Cosmic due to its easy content modeling tools that allowed them to set up client projects more quickly and easily than before, adding to their bottom line and expanding the tools available in their digital toolkit.</p><p dir=\"ltr\"><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/5013b550-14f6-11e9-b55d-3354984e810c-DreamWalk.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;At DreamWalk we always strive to give our clients the best possible customer experience. Cosmic enables us to work within tight budgets without compromising on that great experience.&quot;</p><cite>&mdash; Karl Graf, Director and Mobile App Strategist</cite></blockquote>","metafields":[{"value":"DreamWalk","key":"company","title":"Company","type":"text","children":null},{"value":"App Development Agency","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"With a list of chart-topping apps to their name and a long history of mobile innovation, DreamWalk is the App Development agency trusted by some of the world’s biggest brands and most ambitious startups. With clients like Coca-Cola®, New Mexico Tourism and BP, DreamWalk is among the longest standing and most trusted app development firms in Australia. \n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"f891dd10-14f6-11e9-ac3b-29773f4ac49e-A0Vz6NqU_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f891dd10-14f6-11e9-ac3b-29773f4ac49e-A0Vz6NqU_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/f891dd10-14f6-11e9-ac3b-29773f4ac49e-A0Vz6NqU_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2019-01-10T16:36:36.690Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-01-11T16:56:26.753Z","metadata":{"company":"DreamWalk","industry_type":"App Development Agency","teaser":"With a list of chart-topping apps to their name and a long history of mobile innovation, DreamWalk is the App Development agency trusted by some of the world’s biggest brands and most ambitious startups. With clients like Coca-Cola®, New Mexico Tourism and BP, DreamWalk is among the longest standing and most trusted app development firms in Australia. \n\n\n","logo":{"url":"https://cdn.cosmicjs.com/f891dd10-14f6-11e9-ac3b-29773f4ac49e-A0Vz6NqU_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/f891dd10-14f6-11e9-ac3b-29773f4ac49e-A0Vz6NqU_400x400.jpg"}}}],"app_slugs":[{"slug":"react-native-twitter-clone"},{"slug":"cross-platform-blog"},{"slug":"product-catelog-app"}],"extension_slugs":[{"slug":"twitter-search"},{"slug":"export-to-csv"},{"slug":"imgix-editor "}],"testimonial":"\"It is refreshing to use an API-first CMS, rather than trying to integrate with a complex, monolithic system and adapt it to our specific use case.”\n","testimonial_credit":"Jesse Macnish, Chief Technology Officer at Plato Chat"}},{"_id":"5d4af1d5c360bd38c502f12d","order":14,"slug":"cms-software-for-ecommerce-websites","title":"CMS Software for Ecommerce Websites","content":"<p>Cosmic JS provides flexible CMS Software for teams managing ecommerce content. Whether they&#39;re creating content models for products, promotions or FAQs, teams choose to manage content using Cosmic JS CMS Software because the CMS Dashboard is intuitive and developers can build their ecommerce app however they want.&nbsp;</p><p>Teams using CMS Software to power content for their ecommerce websites don&#39;t have to maintain their own server and content management system. By focusing on apps and not infrastructure, teams are able to build modern apps faster, together.&nbsp;</p><h3><br>What is Headless CMS Software?</h3><p>Headless CMS Software works by providing non-technical editors with a Dashboard UI to model, create and publish content while providing developers with API tools and resources to integrate content with any website or app. By decoupling content from code, teams create a central content repository that can power all of their content-powered applications.&nbsp;</p>","metafields":[{"value":"CMS Software for Ecommerce Websites","key":"solution_name","title":"Solution Name","type":"text","children":null},{"value":"5b8db790-b92a-11e9-bf89-df8d6377231e-d03eb2f0-9f54-11e9-ac09-4be8a5631b5e-6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen-Shot-2018-04-17-at-6.48.12-AM.png","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/5b8db790-b92a-11e9-bf89-df8d6377231e-d03eb2f0-9f54-11e9-ac09-4be8a5631b5e-6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen-Shot-2018-04-17-at-6.48.12-AM.png","imgix_url":"https://imgix.cosmicjs.com/5b8db790-b92a-11e9-bf89-df8d6377231e-d03eb2f0-9f54-11e9-ac09-4be8a5631b5e-6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen-Shot-2018-04-17-at-6.48.12-AM.png"},{"object_type":"case-studies","value":"59663607a6a3f55962000e40,5aa7cd8c3078516dd48d6ad2,59f49a7cee2adb545c0005bc","key":"case_studies","title":"Case Studies","type":"objects","children":null,"objects":[{"_id":"59663607a6a3f55962000e40","slug":"big-fish-launches-marketing-and-tutorial-content-for-games","title":"Big Fish Launches Marketing and Tutorial Content for Games","content":"<p>When <a href=\"http://www.bigfishgames.com\" rel=\"noopener noreferrer\" target=\"_blank\">Big Fish</a> launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch. Big Fish wanted their game studios to have the ability to curate and update content on each of their landing pages. Other CMS systems weren&rsquo;t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b671fa80-ba81-11e7-9419-d7ce2df8354d-Screen Shot 2017-10-26 at 2.12.42 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/bf97f050-ba82-11e7-b96e-3b4c8df8fb98-Screen Shot 2017-10-26 at 2.20.03 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><blockquote><p>&quot;We use Cosmic buckets for each of our mobile game landing pages. While our API and storage usage is low, the number of buckets we need is high, which makes the new Clusters Feature a perfect solution for our company use cases. It allows us to\r\nhave a single consolidated invoice, with an overall API and data-limit, but up to 35 buckets for our use.&quot;</p><p><cite>&mdash; Jessica Chappell, Web Developer&nbsp;</cite></p></blockquote><p>Read <a href=\"http://www.bigfishgames.com/blog\" rel=\"noopener noreferrer\" target=\"_blank\">more</a> about Big Fish and their games.</p>","metafields":[{"value":"Big Fish","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T14:45:27.402Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-11-08T23:15:38.911Z"},{"_id":"5aa7cd8c3078516dd48d6ad2","slug":"bookabus-builds-a-localized-transportation-website","title":"Bookabus Builds a Localized Transportation Website","content":"<p><a href=\"https://www.bookabus.eu\" rel=\"noopener noreferrer\" target=\"_blank\">Bookabus</a> is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it&rsquo;s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen Shot 2018-04-17 at 6.48.12 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Bookabus needed a new website to communicate their transport routes, terms and marketing materials. &nbsp;A big requirement was the ability to localize their content into different languages for the different areas they&#39;re servicing, including the UK, Netherlands, Germany, Spain, and Belgium. &nbsp;They chose to build their new transportation website with Cosmic because of the ease of use and powerful localization capabilities.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/be1ed900-4236-11e8-bd9f-93df74f6ae30-Screen Shot 2018-04-17 at 6.59.27 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate dynamic content into our website. The product is a great value for your money. This is especially true given that their customer service is top-notch.&quot;</p><p><cite>&mdash; Harrie Pieters, Web Developer&nbsp;</cite></p></blockquote>","metafields":[{"value":"Bookabus","key":"company","title":"Company","type":"text","children":null},{"value":"Transportation","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Bookabus is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it’s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","imgix_url":"https://imgix.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-13T13:09:32.089Z","created_by":"5716b504e9c686d006000073","created":"2018-03-13T13:09:32.089Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-04-19T21:23:26.384Z"},{"_id":"59f49a7cee2adb545c0005bc","slug":"life-is-good-shares-gratitude","title":"Life is Good Shares Gratitude","content":"<p>The <a href=\"https://www.lifeisgood.com/?utm_source=cosmicjs.com&utm_medium=referral&utm_campaign=gratitudewall\" rel=\"noopener noreferrer\" target=\"_blank\">Life is Good</a> community shares one simple, unifying mission: to spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add &quot;sticky notes&quot; with their name and what they are grateful for to the gratitude board.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7dbdb6b0-c59a-11e7-a9fd-155dbd0b0a76-Optimism_Tree_default.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Gratitude Wall is adapted from the Cosmic <a href=\"https://cosmicjs.com/apps/sticky-notes\" rel=\"noopener noreferrer\" target=\"_blank\">Sticky Notes App</a>, built on <a href=\"https://cosmicjs.com/knowledge-base/react-cms\" rel=\"noopener noreferrer\" target=\"_blank\">React</a>, Redux and <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a>. The Wall is currently running on Heroku and is i-framed into WordPress on its landing page. The Life is Good team also built a simple moderation application so that their team can easily approve or delete User Generated Content as it flows in. They also built client-side moderation during content entry, which checks against a banned list of words and blocks submission.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen Shot 2017-11-16 at 1.59.39 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a robust scaffolding to accept, store, and moderate User Generated Content and display it in a custom web app in real time. With Cosmic, we were able to develop an MVP in a matter of hours and focus our resources on UX and design versus content management. The Cosmic Support Team was extremely helpful throughout the process. We&rsquo;re excited to leverage these tools again for future projects.&rdquo;</p><p><cite>&mdash; Chris Schwab, Front End Engineer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Life is Good","key":"company","title":"Company","type":"text","children":null},{"value":"Ecommerce | Apparel","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-28T14:55:56.103Z","created_by":"5716b504e9c686d006000073","created":"2017-10-28T14:55:56.103Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-07-25T21:53:35.289Z"}]},{"repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}],"value":"vue-ecommerce-app","key":"app_slugs","title":"App Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"vue-ecommerce-app","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"gatsby-ecommerce-website","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"ecommerce-personalization","type":"text","required":false}]}]},{"repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}],"value":"amazon-product-search","key":"extension_slugs","title":"Extension SLugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"amazon-product-search","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"export-to-csv","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"product-manager","type":"text","required":false}]}]},{"value":"\"Cosmic JS allowed us to easily integrate dynamic content into our website. The product is a great value for your money. This is especially true given that their customer service is top-notch.\"","key":"testimonial","title":"Testimonial","type":"textarea","children":null},{"value":"Harrie Pieters, Web Developer at Bookabus","key":"testimonial_credit","title":"Testimonial Credit","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created_at":"2019-08-05T20:18:17.006Z","created_by":"5716b504e9c686d006000073","modified_at":"2019-08-07T15:51:55.480Z","created":"2019-08-07T15:44:21.947Z","status":"published","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-08-07T15:51:55.480Z","metadata":{"solution_name":"CMS Software for Ecommerce Websites","image":{"url":"https://cdn.cosmicjs.com/5b8db790-b92a-11e9-bf89-df8d6377231e-d03eb2f0-9f54-11e9-ac09-4be8a5631b5e-6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen-Shot-2018-04-17-at-6.48.12-AM.png","imgix_url":"https://imgix.cosmicjs.com/5b8db790-b92a-11e9-bf89-df8d6377231e-d03eb2f0-9f54-11e9-ac09-4be8a5631b5e-6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen-Shot-2018-04-17-at-6.48.12-AM.png"},"case_studies":[{"_id":"59663607a6a3f55962000e40","slug":"big-fish-launches-marketing-and-tutorial-content-for-games","title":"Big Fish Launches Marketing and Tutorial Content for Games","content":"<p>When <a href=\"http://www.bigfishgames.com\" rel=\"noopener noreferrer\" target=\"_blank\">Big Fish</a> launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch. Big Fish wanted their game studios to have the ability to curate and update content on each of their landing pages. Other CMS systems weren&rsquo;t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b671fa80-ba81-11e7-9419-d7ce2df8354d-Screen Shot 2017-10-26 at 2.12.42 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/bf97f050-ba82-11e7-b96e-3b4c8df8fb98-Screen Shot 2017-10-26 at 2.20.03 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><blockquote><p>&quot;We use Cosmic buckets for each of our mobile game landing pages. While our API and storage usage is low, the number of buckets we need is high, which makes the new Clusters Feature a perfect solution for our company use cases. It allows us to\r\nhave a single consolidated invoice, with an overall API and data-limit, but up to 35 buckets for our use.&quot;</p><p><cite>&mdash; Jessica Chappell, Web Developer&nbsp;</cite></p></blockquote><p>Read <a href=\"http://www.bigfishgames.com/blog\" rel=\"noopener noreferrer\" target=\"_blank\">more</a> about Big Fish and their games.</p>","metafields":[{"value":"Big Fish","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T14:45:27.402Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-11-08T23:15:38.911Z","metadata":{"company":"Big Fish","industry_type":"Gaming","teaser":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","logo":{"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}}},{"_id":"5aa7cd8c3078516dd48d6ad2","slug":"bookabus-builds-a-localized-transportation-website","title":"Bookabus Builds a Localized Transportation Website","content":"<p><a href=\"https://www.bookabus.eu\" rel=\"noopener noreferrer\" target=\"_blank\">Bookabus</a> is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it&rsquo;s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen Shot 2018-04-17 at 6.48.12 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Bookabus needed a new website to communicate their transport routes, terms and marketing materials. &nbsp;A big requirement was the ability to localize their content into different languages for the different areas they&#39;re servicing, including the UK, Netherlands, Germany, Spain, and Belgium. &nbsp;They chose to build their new transportation website with Cosmic because of the ease of use and powerful localization capabilities.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/be1ed900-4236-11e8-bd9f-93df74f6ae30-Screen Shot 2018-04-17 at 6.59.27 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate dynamic content into our website. The product is a great value for your money. This is especially true given that their customer service is top-notch.&quot;</p><p><cite>&mdash; Harrie Pieters, Web Developer&nbsp;</cite></p></blockquote>","metafields":[{"value":"Bookabus","key":"company","title":"Company","type":"text","children":null},{"value":"Transportation","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Bookabus is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it’s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","imgix_url":"https://imgix.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-13T13:09:32.089Z","created_by":"5716b504e9c686d006000073","created":"2018-03-13T13:09:32.089Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-04-19T21:23:26.384Z","metadata":{"company":"Bookabus","industry_type":"Transportation","teaser":"Bookabus is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it’s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events. \n","logo":{"url":"https://cdn.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","imgix_url":"https://imgix.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png"}}},{"_id":"59f49a7cee2adb545c0005bc","slug":"life-is-good-shares-gratitude","title":"Life is Good Shares Gratitude","content":"<p>The <a href=\"https://www.lifeisgood.com/?utm_source=cosmicjs.com&utm_medium=referral&utm_campaign=gratitudewall\" rel=\"noopener noreferrer\" target=\"_blank\">Life is Good</a> community shares one simple, unifying mission: to spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add &quot;sticky notes&quot; with their name and what they are grateful for to the gratitude board.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7dbdb6b0-c59a-11e7-a9fd-155dbd0b0a76-Optimism_Tree_default.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Gratitude Wall is adapted from the Cosmic <a href=\"https://cosmicjs.com/apps/sticky-notes\" rel=\"noopener noreferrer\" target=\"_blank\">Sticky Notes App</a>, built on <a href=\"https://cosmicjs.com/knowledge-base/react-cms\" rel=\"noopener noreferrer\" target=\"_blank\">React</a>, Redux and <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a>. The Wall is currently running on Heroku and is i-framed into WordPress on its landing page. The Life is Good team also built a simple moderation application so that their team can easily approve or delete User Generated Content as it flows in. They also built client-side moderation during content entry, which checks against a banned list of words and blocks submission.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen Shot 2017-11-16 at 1.59.39 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a robust scaffolding to accept, store, and moderate User Generated Content and display it in a custom web app in real time. With Cosmic, we were able to develop an MVP in a matter of hours and focus our resources on UX and design versus content management. The Cosmic Support Team was extremely helpful throughout the process. We&rsquo;re excited to leverage these tools again for future projects.&rdquo;</p><p><cite>&mdash; Chris Schwab, Front End Engineer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Life is Good","key":"company","title":"Company","type":"text","children":null},{"value":"Ecommerce | Apparel","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-28T14:55:56.103Z","created_by":"5716b504e9c686d006000073","created":"2017-10-28T14:55:56.103Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-07-25T21:53:35.289Z","metadata":{"company":"Life is Good","industry_type":"Ecommerce | Apparel","teaser":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","logo":{"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}}}],"app_slugs":[{"slug":"vue-ecommerce-app"},{"slug":"gatsby-ecommerce-website"},{"slug":"ecommerce-personalization"}],"extension_slugs":[{"slug":"amazon-product-search"},{"slug":"export-to-csv"},{"slug":"product-manager"}],"testimonial":"\"Cosmic JS allowed us to easily integrate dynamic content into our website. The product is a great value for your money. This is especially true given that their customer service is top-notch.\"","testimonial_credit":"Harrie Pieters, Web Developer at Bookabus"}},{"_id":"538a102b3ff8db6d77000001","slug":"features","title":"Features","content":"<h1>Cosmic JS Features<br></h1><h4><span style=\"line-height: 1.1;\">Built for developers</span></h4><p><span style=\"line-height: 1.42857143;\">It's the job of the developer to create an easy content management system and Cosmic JS makes the developer's job so much easier. &nbsp;Structure the content with ease, label fields, and let the client sing your praises for how easy it is to update their site's content.<br><br></span></p><h4>Develop in any language</h4><p>Developers will love our openness and simple API and clients will love the easy-to-use backend to manage their content.</p><p><span style=\"line-height: 1.42857143;\">Using the Cosmic JS API, content can be accessed from anywhere and written in any language Angular, Node.js, Ruby on Rails, PHP.</span></p><h4><br></h4><h4>Media library</h4><p>Drag and drop your files into your bucket's objects and media library. &nbsp;All file formats are accepted.<br><br></p><h4>Metafields</h4><p>Objects in your Cosmic JS buckets are able to handle nested metafields. &nbsp;Great for storing arrays and loops of items.</p><p><br></p><h4>Multiple Users</h4><p>Add multiple users to your buckets to manage your content within your team.<br><br></p><h4>Copy Buckets</h4><p>Copy your existing bucket to a new bucket instantly for development, staging or production instances.</p>","metafields":[],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"pages","created":"2014-05-31T17:23:55.351Z","order":14,"modified":"2015-04-03T03:20:01.775Z","files":"","metadata":null},{"_id":"5b86a2c6016461100076e5c7","order":14,"slug":"consolidating-the-content-chaos-tac-switches-from-wordpress-to-cosmic-js","title":"Consolidating the Content Chaos: TAC Switches from WordPress to Cosmic","content":"<p>TAC - <a href=\"https://thearnoldcos.com\" rel=\"noopener noreferrer\" target=\"_blank\">The Arnold Companies</a> is among the largest fuel wholesalers and aviation service providers in the country. Steady growth, positive financial results and a diverse industry base consistently make TAC one of the top private companies in the US. TAC is made up of many separate brands under one corporate identity, including <a href=\"https://thearnoldcos.com/tac-energy\" rel=\"noopener noreferrer\" target=\"_blank\">TAC Energy</a>, <a href=\"https://thearnoldcos.com/tac-air\" rel=\"noopener noreferrer\" target=\"_blank\">TAC Air</a> and <a href=\"https://thearnoldcos.com/keystone-aviation\" rel=\"noopener noreferrer\" target=\"_blank\">Keystone Aviation</a>.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1edc4420-03d5-11e9-b2e6-ef985cd5a622-TAC_Air.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>With TAC&#39;s old website built as stand-alone sites that linked to each other on a WordPress foundation, the user experience was over-complicated and required too many steps for visitors to find what they were looking for. Being WordPress-based, it did not allow for clear information architecture to promote the different business lines within the portfolio.&nbsp;</p><p>Through a structured RFP process to identify a partner in re-thinking the customer experience and content management system, interactive agency <a href=\"https://simplemedia.co\" rel=\"noopener noreferrer\" target=\"_blank\">Simple Media</a> and Cosmic were selected. Other platform options included WordPress, Drupal, and Joomla.&nbsp;</p><p>Focused on building with a mobile-first approach and consolidating the chaos of the existing number of brand sites to bring harmony to the four brands and ease-of-use in content management, TAC found an outstanding and simple solution in Cosmic.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/28c0eb80-03d5-11e9-b2e6-ef985cd5a622-TAC_Air2.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>To learn more about the development, Brandon Reid, Lead Developer on the project breaks down the stack:&nbsp;</p><p><strong>Development Team:</strong> &quot;TAC&rsquo;s backend is powered by Node, Next.js, and Express. Next.js is used for server side rendering capabilities for SEO optimization as well as site routing. Next.js also makes it easy to integrate with Babel and Webpack since they are built right in. The team used Next.js routing API to rendering page templates for pages that have the same design layouts. TAC&rsquo;s frontend is powered by React.js and the world&#39;s most popular react UI framework, Material UI. In order to use Material UI with SSR, the team had to wrap the site in a JSSProvider and use CSSBaseline. For development they used Eslint as a linter for a cleaner and more consistent codebase.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/9bc8cba0-03e6-11e9-9a9a-9b696b7d5c75-Fuel-Tanker-Truck.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Since TAC uses ES6 JavaScript, the team had to also implement a very small amount of polyfill to transpile ES6 to ES5 in order for the site to work with IE11. Some notable node modules used were:&nbsp;</p><ul><li>React-Image-Gallery for the image galleries across the site</li><li>React-Masonry-Component for the newsroom</li><li>Fetch for API requests</li><li>For email services/API the team used Nodemailer and Mailgun</li></ul><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7c547000-b079-11e8-966b-171c4c72e338-IMG_4405.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>TAC&#39;s development team started building the site by using Cosmic&rsquo;s React Starter, which helped them get jump-started right away. Building TAC started with implementing all globals for the site (Header, Footer, Favicon, etc), so the developers quickly created some JavaScript request functions to pull data from the Cosmic Buckets using Cosmic&rsquo;s Node API. The team added those global components to the sites main _app layout, so every page would be wrapped and rendered with those globals. From there they analyzed what pages would have reusable components across multiple pages or the site, and created component views for those pages based off their analysis.&nbsp;</p><p>TAC was then able to efficiently knock out page designs and implement object types in the Cosmic bucket on the fly. As TAC got closer to site launch, they noticed compatibility issues with IE11 and had to come up with a solution. At first, they were going to do a browser sniff in the codebase to display something that would work on IE. Instead, the team implemented Babel and some polyfills to solve their &nbsp;compatibility issues.&quot;</p><p style=\"text-align: center;\"><br></p><p><br></p><p style=\"text-align: center;\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7d6520b0-b04d-11e8-8760-cbfd96ceee1a-ezgif-4-42d2daea45.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&quot;Our goal in this project was not to reinvent the brands, but to simplify the communication and process for website content management. Cosmic has allowed us to become current in our presentation and relevant in our content push. Plus, the site is easier to use for visitors and staff alike.&quot;</p><p><cite>&mdash; Tad Perryman, VP of Marketing, TAC - The Arnold Companies</cite></p></blockquote>","metafields":[{"value":"The Arnold Companies","key":"company","title":"Company","type":"text","children":null},{"value":"Energy / Aviation","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"TAC - The Arnold Companies is among the largest fuel wholesalers and aviation service providers in the country. Steady growth, positive financial results and a diverse industry base consistently make TAC one of the top private companies in the US. TAC is made up of many separate brands under one corporate identity, including TAC Energy, TAC Air and Keystone Aviation. \n\n\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg","imgix_url":"https://imgix.cosmicjs.com/9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-01T22:26:36.367Z","created_by":"5716b504e9c686d006000073","created":"2018-08-29T13:42:30.982Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-12-20T14:40:21.379Z","metadata":{"company":"The Arnold Companies","industry_type":"Energy / Aviation","teaser":"TAC - The Arnold Companies is among the largest fuel wholesalers and aviation service providers in the country. Steady growth, positive financial results and a diverse industry base consistently make TAC one of the top private companies in the US. TAC is made up of many separate brands under one corporate identity, including TAC Energy, TAC Air and Keystone Aviation. \n\n\n\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg","imgix_url":"https://imgix.cosmicjs.com/9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg"}}},{"_id":"590b73ff200ca2723f002d01","order":14,"slug":"freddie-ridell","title":"Freddie Ridell","content":"","metafields":[{"value":"2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg","imgix_url":"https://imgix.cosmicjs.com/2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-04T18:33:35.138Z","created_by":"5357ef811693be2118000001","created":"2017-05-04T18:33:35.138Z","status":"published","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg","imgix_url":"https://imgix.cosmicjs.com/2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg"}}},{"_id":"5f38301c03a87500083c2b88","order":14,"slug":"image-api-and-cdn","title":"Image API and CDN","content":"","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"SAYlN9ZKxJ","value":"57632530-df29-11ea-be1a-2fbf26518583-image-api-cdn.svg","url":"https://cdn.cosmicjs.com/57632530-df29-11ea-be1a-2fbf26518583-image-api-cdn.svg","imgix_url":"https://imgix.cosmicjs.com/57632530-df29-11ea-be1a-2fbf26518583-image-api-cdn.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"DMwEbHAkSz","value":"7d9f8180-df29-11ea-be1a-2fbf26518583-image-api-cdn.png","url":"https://cdn.cosmicjs.com/7d9f8180-df29-11ea-be1a-2fbf26518583-image-api-cdn.png","imgix_url":"https://imgix.cosmicjs.com/7d9f8180-df29-11ea-be1a-2fbf26518583-image-api-cdn.png"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"9lYBGinRrX","value":"<p>Cosmic provides the best image API and CDN for your websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"0S89B9aDxR","value":"Image API and CDN"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"PHK2A1iqkJ","value":"Cosmic provides the best image API and CDN for your websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"nL0hsXTcu7","value":"7d9f8180-df29-11ea-be1a-2fbf26518583-image-api-cdn.png","url":"https://cdn.cosmicjs.com/7d9f8180-df29-11ea-be1a-2fbf26518583-image-api-cdn.png","imgix_url":"https://imgix.cosmicjs.com/7d9f8180-df29-11ea-be1a-2fbf26518583-image-api-cdn.png"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"drtHtq2t0L","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"R5R6rq2Rd5","value":"Best Headless CMS Image API and CDN"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"7AMwlbABO6","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]},{"children":null,"type":"html-textarea","title":"Page Overview","key":"page_overview","id":"IGvJlHUd4j","value":"<p>Cosmic <a href=\"https://www.cosmicjs.com/headless-cms\">headless CMS</a> makes it easy to manage and deliver images reliably via our API and global CDN. Use the Cosmic API and&nbsp;<a href=\"https://www.cosmicjs.com/headless-cms/media-management\">media management dashboard</a> to manage media to be delivered to various websites, applications, and platforms using our global CDN. Cosmic headless CMS API is cross-compatible, future-proof, extensible, scalable, and robust. We provide coded Image API and CDN examples as starters to facilitate different purposes and use cases. Cosmic resources also provide more in-depth guidance on getting the most out of Cosmic headless CMS to facilitate specific Image API and CDN needs.</p>"},{"children":null,"type":"html-textarea","title":"SEO Content","key":"seo_content","id":"qXeb6lleXB","value":""},{"children":null,"type":"text","title":"Apps Search Term","key":"apps_search_term","id":"v95tq5i2enaf3oreecdk","value":"react"},{"children":null,"type":"text","title":"Articles Search Term","key":"articles_search_term","id":"apps_search_term_kef9yhcej8gy","value":"react"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2020-08-15T18:57:32.609Z","created_by":"5357ef811693be2118000001","created":"2020-08-15T18:57:32.609Z","status":"published","modified_at":"2020-08-15T19:23:54.771Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2020-08-15T19:23:54.771Z","metadata":{"image":{"url":"https://cdn.cosmicjs.com/57632530-df29-11ea-be1a-2fbf26518583-image-api-cdn.svg","imgix_url":"https://imgix.cosmicjs.com/57632530-df29-11ea-be1a-2fbf26518583-image-api-cdn.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/7d9f8180-df29-11ea-be1a-2fbf26518583-image-api-cdn.png","imgix_url":"https://imgix.cosmicjs.com/7d9f8180-df29-11ea-be1a-2fbf26518583-image-api-cdn.png"},"blurb":"<p>Cosmic provides the best image API and CDN for your websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Image API and CDN","seo_description":"Cosmic provides the best image API and CDN for your websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/7d9f8180-df29-11ea-be1a-2fbf26518583-image-api-cdn.png","imgix_url":"https://imgix.cosmicjs.com/7d9f8180-df29-11ea-be1a-2fbf26518583-image-api-cdn.png"},"code_example":"","seo_title":"Best Headless CMS Image API and CDN","videos":[],"page_overview":"<p>Cosmic <a href=\"https://www.cosmicjs.com/headless-cms\">headless CMS</a> makes it easy to manage and deliver images reliably via our API and global CDN. Use the Cosmic API and&nbsp;<a href=\"https://www.cosmicjs.com/headless-cms/media-management\">media management dashboard</a> to manage media to be delivered to various websites, applications, and platforms using our global CDN. Cosmic headless CMS API is cross-compatible, future-proof, extensible, scalable, and robust. We provide coded Image API and CDN examples as starters to facilitate different purposes and use cases. Cosmic resources also provide more in-depth guidance on getting the most out of Cosmic headless CMS to facilitate specific Image API and CDN needs.</p>","seo_content":"","apps_search_term":"react","articles_search_term":"react"}},{"_id":"60426fa16036bf0007d6f464","order":14,"slug":"graphql-npm-cli-dashboard-updates-and-more","title":"Docs updates + GraphQL + NPM + CLI updates","content":"<p>We have some exciting updates to share with you which includes:</p><ol><li>Documentation improvements: Client tabs, better nav, and more</li><li>New versions of the GraphQL, NPM, and CLI clients</li><li>New GraphQL API Postman collection</li><li>Ability to ignore the cache (handy for real-time updates)</li><li>Dashboard updates</li></ol><p>Read more about the updates below, or jump over to the updated docs to get started. <a href=\"https://docs.cosmicjs.com\">Go to the docs &rarr;</a></p><p><br></p><h2>Updates</h2><p><strong>1. Documentation</strong><br>Our new documentation website just got a lot better. We&#39;ve added new tabs to show you the multiple methods for each resource including REST, Node.js, GraphQL, and the CLI.<span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi\" loop=\"\" muted=\"\" playsinline=\"\" src=\"https://cdn.cosmicjs.com/52a1ec40-7ddd-11eb-bca3-dfdf3200bafd-tabs.mp4\" style=\"width: 100%;\">Your browser does not support HTML5 video.</video></span></p><p><br></p><p><strong>2. New client versions</strong><br>We have new GraphQL API (v3), NPM (v4), and CLI (v2) versions available that parallel the new features in the REST API v2 and follow the same request and response formats. See the docs changelog for the updates.</p><p><br></p><p><strong>3. Postman collection for GraphQL API</strong><br>Along with the REST API, we now have a <a href=\"https://docs.cosmicjs.com/api-reference/getting-started/introduction#install-and-configure\" rel=\"noopener noreferrer\" target=\"_blank\">Postman collection for the GraphQL API</a>.</p><p><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi\" loop=\"\" muted=\"\" playsinline=\"\" src=\"https://cdn.cosmicjs.com/c0118470-7ddd-11eb-bca3-dfdf3200bafd-postman.mp4\" style=\"width: 100%;\">Your browser does not support HTML5 video.</video></span></p><p><strong>4. Ignore cache (real-time updates)</strong><br>You can now ignore the cache for your API requests by setting <code>use_cache=false</code> as a query parameter in your GET requests. Why would you want to ignore our globally-fast CDN? This is helpful if you are doing real-time updates. For example, if you make an update to Object and immediately want to return the updated Object (as the cache takes ~200ms to purge).</p><p><br></p><p><strong>5. Dashboard quality of life improvements</strong><br>We&#39;ve updated the Bucket settings page to include links to each section. We think this is a more helpful way to organize your Bucket settings.<img src=\"https://cdn.cosmicjs.com/c1d629c0-7ddb-11eb-bca3-dfdf3200bafd-Screen-Shot-2021-03-05-at-11.53.36-AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>We hope you enjoy these new updates. Head over to the new documentation site to check out all of these updates. And ping us in Slack if you have any questions.</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"pytNiRUzfw","value":"2021-03-16"},{"children":null,"type":"object","title":"Author","key":"author","id":"OY63TNMwxv","value":"5ffa1d1e0046b0000799cb7b","object_type":"authors","object":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"1h1W4hvtNz","value":"","url":null,"imgix_url":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2021-03-05T17:51:29.326Z","created_by":"5357ef811693be2118000001","modified_at":"2021-03-16T17:02:28.330Z","created":"2021-03-05T17:51:29.326Z","status":"published","thumbnail":"","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2021-03-16T17:02:28.330Z","metadata":{"published_date":"2021-03-16","author":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}}},"featured_image":{"url":null,"imgix_url":null}}},{"_id":"5bad1cbd8cf9137794f3c4b1","slug":"google-sheets","title":"Google Sheets","content":"","metafields":[{"children":null,"type":"text","title":"Link","key":"link","id":"vdvxNNzdk5","value":"https://cosmicjs.com/articles/integrating-cosmic-powered-content-with-your-favorite-apps-using-zapier-jmm49t8k"},{"children":null,"type":"file","title":"Image","key":"image","id":"L3kVyHbARz","value":"5954ef00-8ed8-11ea-910b-435199f15a39-sheets.jpg","url":"https://cdn.cosmicjs.com/5954ef00-8ed8-11ea-910b-435199f15a39-sheets.jpg","imgix_url":"https://imgix.cosmicjs.com/5954ef00-8ed8-11ea-910b-435199f15a39-sheets.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"integrations","created":"2018-09-27T18:09:01.496Z","created_at":"2018-09-27T18:09:01.496Z","modified_at":"2020-05-05T13:57:27.923Z","status":"published","locale":null,"published_at":"2020-05-05T13:57:27.923Z","created_by":"5357ef811693be2118000001","order":14,"modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"link":"https://cosmicjs.com/articles/integrating-cosmic-powered-content-with-your-favorite-apps-using-zapier-jmm49t8k","image":{"url":"https://cdn.cosmicjs.com/5954ef00-8ed8-11ea-910b-435199f15a39-sheets.jpg","imgix_url":"https://imgix.cosmicjs.com/5954ef00-8ed8-11ea-910b-435199f15a39-sheets.jpg"}}},{"_id":"61abfcf080e39b0008e12be6","order":14,"slug":"new-dashboard-alpha-release","title":"New Dashboard Alpha Release","content":"<p>After months of painstaking design, development, and testing, we are excited to announce the release of the new Cosmic Dashboard! We have rebuilt the dashboard from the ground up and you can now be one of the first to test it in a private alpha release. See the preview below.<br><br></p><p><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"card-shadow video-popout fr-draggable fr-fvc fr-dvi\" loop=\"\" muted=\"\" playsinline=\"\" src=\"https://cdn.cosmicjs.com/94b7de60-5469-11ec-88b1-5377807b2a13-alpha-preview.mp4\">Your browser does not support HTML5 video.</video></span></p><p style=\"text-align: center;\">The new Cosmic Dashboard 😍</p><p>To get started, go to the<a href=\"https://app-v2.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">&nbsp;Cosmic Dashboard Alpha Landing Page</a> and add your email to join the waiting list. After joining, you can then share your special referral link with friends and colleagues to get bumped up the list!</p><p>Once we let you in, there are some important things to keep in mind...</p><p><strong>The new dashboard is connected to a staging database</strong><br>You will be able to create new accounts and test the dashboard functionality, but you should not use this for any production website or apps. Though the data may be removed at any time, we will be sure to let you know if / when this happens so it&#39;s\r\nnot a surprise.</p><p><strong>Some features are not available yet</strong><br>We will be keeping a list in <a href=\"https://scratched-seeder-8a2.notion.site/Cosmic-Dashboard-v2-f5339511a8f24320966a2b483328b4d8\" rel=\"noopener noreferrer\" target=\"_blank\">a Notion document</a> for you to learn about available features, limitations, and progress on the latest additions.</p><p><strong>You can import your Buckets from the old dashboard into the new one</strong><br>To make testing your current workflows straightforward, we have enabled the Import feature in the Bucket settings area. This way you can test your current Bucket use cases and provide us feedback on how it&#39;s working for you so we can make sure it&#39;s\r\ngoing to be a smooth transition!</p><p>We are excited to share with you the next evolution of Cosmic. The dashboard reflects the hard work and detail we put into making Cosmic the best content management solution in the world. We are grateful for your support, patience, and feedback as we continue to provide you with the best tools to collaborate around your content.</p><p>The next step is to sign up on the<a href=\"https://app-v2.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">&nbsp;Cosmic Dashboard Alpha Landing Page</a>. After that, we will let you know when you&#39;re ready to get in. If you have any questions, please <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">join our community on Slack</a>.</p><p>Thank you,<br>The Cosmic Team</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"17RoFZdu0E","value":"5ffa1d1e0046b0000799cb7b","required":true,"object_type":"authors","object":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"x2ugNCc2JE","value":"<p>After months of painstaking design, development, and testing, we are excited to announce the release of the new Cosmic Dashboard! We have rebuilt the dashboard from the ground up and you can now be one of the first to test it in a private alpha release.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"Jixxyqo18n","value":"630be980-555c-11ec-a190-2972d74ddd9f-cosmic-alpha.png","url":"https://cdn.cosmicjs.com/630be980-555c-11ec-a190-2972d74ddd9f-cosmic-alpha.png","imgix_url":"https://imgix.cosmicjs.com/630be980-555c-11ec-a190-2972d74ddd9f-cosmic-alpha.png"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"V2Zng32oK6","value":"After months of painstaking design, development, and testing, we are excited to announce the release of the new Cosmic Dashboard!"},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"eBjUuMbuol","value":"2021-12-07"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2021-12-04T23:42:40.076Z","created_by":"5357ef811693be2118000001","modified_at":"2021-12-07T17:14:12.925Z","created":"2021-12-04T23:42:40.076Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/630be980-555c-11ec-a190-2972d74ddd9f-cosmic-alpha.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2021-12-07T17:14:12.925Z","metadata":{"author":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}}},"teaser":"<p>After months of painstaking design, development, and testing, we are excited to announce the release of the new Cosmic Dashboard! We have rebuilt the dashboard from the ground up and you can now be one of the first to test it in a private alpha release.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/630be980-555c-11ec-a190-2972d74ddd9f-cosmic-alpha.png","imgix_url":"https://imgix.cosmicjs.com/630be980-555c-11ec-a190-2972d74ddd9f-cosmic-alpha.png"},"seo_meta_description":"After months of painstaking design, development, and testing, we are excited to announce the release of the new Cosmic Dashboard!","published_date":"2021-12-07"}},{"_id":"5dca00d2eb43f80008471677","slug":"cms-for-netlify-websites","title":"CMS for Netlify Websites","content":"<p>Cosmic JS integrates brilliantly with your <a href=\"https://www.netlify.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Netlify</a>-powered <a href=\"https://jamstack.org\" rel=\"noopener noreferrer\" target=\"_blank\">JAMstack</a> website. We offer lots of options to integrate Cosmic JS content into your static website. Browse some of our <a href=\"https://www.cosmicjs.com/apps\" rel=\"noopener noreferrer\" target=\"_blank\">example websites</a> and see helpful resources below.<br><br><strong>About JAMstack</strong><a href=\"https://jamstack.org\" rel=\"noopener noreferrer\" target=\"_blank\"></a><br><a href=\"https://jamstack.org\" rel=\"noopener noreferrer\" target=\"_blank\">JAMstack</a> is comprised of a JavaScript-powered frontend for page interactions (J), APIs to connect to various APIs to get 3rd party functionality (A) and plain old Markup (HTML) which gets deployed to your instance (M).</p><p>Cosmic JS is the leading CMS for modern digital projects, including JAMstack apps and static websites. Install the <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Official Cosmic JS JavaScript Client</a> to integrate content into your app in minutes. &nbsp;Get a feel for Cosmic JS by taking a spin through <a href=\"https://cosmicjs.com/apps\" rel=\"noopener noreferrer\" target=\"_blank\">our apps</a> and check out the tutorials below</p><h3><br>Static Website + Cosmic JS Videos</h3><h4><br></h4><h4>Using Cosmic JS as a Headless CMS with Gatsby</h4><div class=\"fr-embedly                           \" data-original-embed=\"<a href='https://www.youtube.com/watch?v=Qls5frYlJeI' class='embedly-card'></a>\"><a href=\"https://www.youtube.com/watch?v=Qls5frYlJeI\" class=\"embedly-card\"></a></div><h4>Build a Cosmic JS-powered blog using Gatsby</h4><div class=\"fr-embedly                           \" data-original-embed=\"<a href='https://www.youtube.com/watch?v=mGcAWs1xRnY' class='embedly-card'></a>\"><a href=\"https://www.youtube.com/watch?v=mGcAWs1xRnY\" class=\"embedly-card\"></a></div><h4>Webinar: Localization with Cosmic JS and Gatsby</h4><div class=\"fr-embedly                           \" data-original-embed=\"<a href='https://www.youtube.com/watch?v=16m3wRFPGAY' class='embedly-card'></a>\"><a href=\"https://www.youtube.com/watch?v=16m3wRFPGAY\" class=\"embedly-card\"></a></div><p><br></p><h3>Netlify Articles</h3><p><a href=\"https://www.cosmicjs.com/articles/netlify-gatsby-cosmic-js-automatic-builds-with-webhooks-ji3fhda9\" rel=\"noopener noreferrer\" target=\"_blank\">Netlify + Gatsby + Cosmic JS + Automatic builds with Webhooks</a><br><a href=\"https://www.cosmicjs.com/articles/how-to-deploy-a-blog-using-cosmic-js-vuetify-to-netlify-jrbir85x\" rel=\"noopener noreferrer\" target=\"_blank\">How to deploy a blog using Cosmic JS + Vuetify to Netlify</a><a href=\"https://cosmicjs.com/articles?q=jamstack\" rel=\"noopener noreferrer\" target=\"_blank\"></a><br><a href=\"https://cosmicjs.com/articles?q=jamstack\" rel=\"noopener noreferrer\" target=\"_blank\">JAMstack articles</a> in the Cosmic JS Community<br><a href=\"https://cosmicjs.com/blog/how-to-build-a-jamstack-website\" rel=\"noopener noreferrer\" target=\"_blank\">How to Build a JAMstack Website</a><br><a href=\"https://cosmicjs.com/apps/static-website\" rel=\"noopener noreferrer\" target=\"_blank\">API-Powered Static Website</a><br><a href=\"https://cosmicjs.com/blog/how-to-build-an-api-powered-static-website-the-best-of-both-worlds\" rel=\"noopener noreferrer\" target=\"_blank\">How to Build an API-Powered Static Website</a></p><h3>Netlify Resources</h3><p><a href=\"https://cosmicjs.com/docs/\" rel=\"noopener noreferrer\" target=\"_blank\"></a><a href=\"https://templates.netlify.com/tags/CosmicJS/\"></a><a href=\"https://templates.netlify.com/tags/CosmicJS/\" rel=\"noopener noreferrer\" target=\"_blank\">Netlify Cosmic JS template</a><br><a href=\"https://headlesscms.org/projects/cosmic-js/\" rel=\"noopener noreferrer\" target=\"_blank\">HeadlessCMS.org Docs</a><br><a href=\"https://cosmicjs.com/docs/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic JS Docs</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\"></a><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official JavaScript Client</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3>Examples</h3><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><code style=' font-size: inherit; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: 0px 0px; text-align: left;'>npm i cosmicjs</code></pre><p>Then in your JavaScript file, get your content:</p><div class=\"fr-embedly                   \" data-original-embed=\"<a href='https://runkit.com/tonyspiro/5ad9109c320cd6001286359c' class='embedly-card'></a>\"><a href=\"https://runkit.com/tonyspiro/5ad9109c320cd6001286359c\" class=\"embedly-card\"></a></div>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"wPioRfJuSa","value":"8951fe30-04e7-11ea-944c-cfd32d7bf8a6-full-logo-light.jpg","url":"https://cdn.cosmicjs.com/8951fe30-04e7-11ea-944c-cfd32d7bf8a6-full-logo-light.jpg","imgix_url":"https://imgix.cosmicjs.com/8951fe30-04e7-11ea-944c-cfd32d7bf8a6-full-logo-light.jpg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"tlDTyAPGhC","value":"5f42c7f0-04e7-11ea-95fe-01afbd7f5f3b-logomark.jpg","url":"https://cdn.cosmicjs.com/5f42c7f0-04e7-11ea-95fe-01afbd7f5f3b-logomark.jpg","imgix_url":"https://imgix.cosmicjs.com/5f42c7f0-04e7-11ea-95fe-01afbd7f5f3b-logomark.jpg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"WsaWBeIh6X","value":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for Netlify websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"4FPJLdn7bO","value":"Netlify"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"qwuiNbkgCC","value":"Cosmic is the best CMS for Netlify websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"1iMaUIVHg4","value":"8ec78ba0-04e7-11ea-944c-cfd32d7bf8a6-full-logo-light.jpg","url":"https://cdn.cosmicjs.com/8ec78ba0-04e7-11ea-944c-cfd32d7bf8a6-full-logo-light.jpg","imgix_url":"https://imgix.cosmicjs.com/8ec78ba0-04e7-11ea-944c-cfd32d7bf8a6-full-logo-light.jpg"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"Uzi3BHM82h","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"NprpWo8O0V","value":"Best Headless CMS for Netlify Websites"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"frgtgqfrpylludl8pnsi","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created":"2019-11-12T00:46:10.148Z","created_at":"2017-10-19T03:50:16.379Z","modified_at":"2020-06-27T19:16:09.954Z","created_by":"5357ef811693be2118000001","modified_by":"5357ef811693be2118000001","status":"published","publish_at":null,"order":15,"published_at":"2020-06-27T19:16:09.954Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/8951fe30-04e7-11ea-944c-cfd32d7bf8a6-full-logo-light.jpg","imgix_url":"https://imgix.cosmicjs.com/8951fe30-04e7-11ea-944c-cfd32d7bf8a6-full-logo-light.jpg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/5f42c7f0-04e7-11ea-95fe-01afbd7f5f3b-logomark.jpg","imgix_url":"https://imgix.cosmicjs.com/5f42c7f0-04e7-11ea-95fe-01afbd7f5f3b-logomark.jpg"},"blurb":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for Netlify websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Netlify","seo_description":"Cosmic is the best CMS for Netlify websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/8ec78ba0-04e7-11ea-944c-cfd32d7bf8a6-full-logo-light.jpg","imgix_url":"https://imgix.cosmicjs.com/8ec78ba0-04e7-11ea-944c-cfd32d7bf8a6-full-logo-light.jpg"},"code_example":"","seo_title":"Best Headless CMS for Netlify Websites","videos":[]}},{"_id":"5d4a0e7a7b300f1becd985af","order":15,"slug":"cms-software-for-modern-stack-websites","title":"CMS Software for Modern Stack Websites","content":"<p>Cosmic JS provides flexible CMS Software for teams building modern stack websites. Whether you&#39;re building with GraphQL, Serverless technologies or the JAMstack, teams choose to manage content using Cosmic JS CMS Software because the CMS Dashboard is intuitive and developers can build their app however they want.&nbsp;</p><p>Teams using CMS Software to power content for their modern stack websites don&#39;t have to maintain their own server and content management system. By focusing on apps and not infrastructure, teams are able to build modern apps faster, together.&nbsp;</p><h3><br>What is Headless CMS Software?</h3><p>Headless CMS Software works by providing non-technical editors with a Dashboard UI to model, create and publish content while providing developers with API tools and resources to integrate content with any website or app. By decoupling content from code, teams create a central content repository that can power all of their content-powered applications.&nbsp;</p>","metafields":[{"value":"CMS Software for Modern Stack Websites","key":"solution_name","title":"Solution Name","type":"text","children":null},{"value":"cb75f9b0-b8a2-11e9-9c18-07a340c60471-abe9e700-9dc2-11e9-a5b4-e5df9f8049d3-tripwire.png","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/cb75f9b0-b8a2-11e9-9c18-07a340c60471-abe9e700-9dc2-11e9-a5b4-e5df9f8049d3-tripwire.png","imgix_url":"https://imgix.cosmicjs.com/cb75f9b0-b8a2-11e9-9c18-07a340c60471-abe9e700-9dc2-11e9-a5b4-e5df9f8049d3-tripwire.png"},{"object_type":"case-studies","value":"59663607a6a3f55962000e40,596663e8880d69fb6c000194,5aa7cd8c3078516dd48d6ad2","key":"case_studies","title":"Case Studies","type":"objects","children":null,"objects":[{"_id":"59663607a6a3f55962000e40","slug":"big-fish-launches-marketing-and-tutorial-content-for-games","title":"Big Fish Launches Marketing and Tutorial Content for Games","content":"<p>When <a href=\"http://www.bigfishgames.com\" rel=\"noopener noreferrer\" target=\"_blank\">Big Fish</a> launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch. Big Fish wanted their game studios to have the ability to curate and update content on each of their landing pages. Other CMS systems weren&rsquo;t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b671fa80-ba81-11e7-9419-d7ce2df8354d-Screen Shot 2017-10-26 at 2.12.42 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/bf97f050-ba82-11e7-b96e-3b4c8df8fb98-Screen Shot 2017-10-26 at 2.20.03 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><blockquote><p>&quot;We use Cosmic buckets for each of our mobile game landing pages. While our API and storage usage is low, the number of buckets we need is high, which makes the new Clusters Feature a perfect solution for our company use cases. It allows us to\r\nhave a single consolidated invoice, with an overall API and data-limit, but up to 35 buckets for our use.&quot;</p><p><cite>&mdash; Jessica Chappell, Web Developer&nbsp;</cite></p></blockquote><p>Read <a href=\"http://www.bigfishgames.com/blog\" rel=\"noopener noreferrer\" target=\"_blank\">more</a> about Big Fish and their games.</p>","metafields":[{"value":"Big Fish","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T14:45:27.402Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-11-08T23:15:38.911Z"},{"_id":"596663e8880d69fb6c000194","slug":"joblift-elevates-their-stack","title":"Joblift Elevates Their Stack ","content":"<p>In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, <a href=\"https://joblift.co.uk\" rel=\"noopener noreferrer\" target=\"_blank\">Joblift</a> seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/16ac66c0-03d7-11e9-a9c3-c1326db90b81-DrzF-2BX0AA0WTE.jpg-large.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Joblift manages localized content to serve Job, Press and Blog feeds to its various markets, including the UK, Netherlands and Germany. Easy user roles and permissions equip their team with the tools they need to seamlessly run a global organization.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic has completely sped up our ability to upload our content easily and efficiently. With Cosmic we now have a smooth process for uploading press releases which reflects the quality content on our website.&rdquo;</p><p><cite>&mdash; Ashleigh Grady, Content Editor and Marketing Manager</cite></p></blockquote>","metafields":[{"value":"Joblift","key":"company","title":"Company","type":"text","children":null},{"value":"Career Services","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T18:01:12.194Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-12-19T21:44:38.361Z"},{"_id":"5aa7cd8c3078516dd48d6ad2","slug":"bookabus-builds-a-localized-transportation-website","title":"Bookabus Builds a Localized Transportation Website","content":"<p><a href=\"https://www.bookabus.eu\" rel=\"noopener noreferrer\" target=\"_blank\">Bookabus</a> is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it&rsquo;s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen Shot 2018-04-17 at 6.48.12 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Bookabus needed a new website to communicate their transport routes, terms and marketing materials. &nbsp;A big requirement was the ability to localize their content into different languages for the different areas they&#39;re servicing, including the UK, Netherlands, Germany, Spain, and Belgium. &nbsp;They chose to build their new transportation website with Cosmic because of the ease of use and powerful localization capabilities.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/be1ed900-4236-11e8-bd9f-93df74f6ae30-Screen Shot 2018-04-17 at 6.59.27 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate dynamic content into our website. The product is a great value for your money. This is especially true given that their customer service is top-notch.&quot;</p><p><cite>&mdash; Harrie Pieters, Web Developer&nbsp;</cite></p></blockquote>","metafields":[{"value":"Bookabus","key":"company","title":"Company","type":"text","children":null},{"value":"Transportation","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Bookabus is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it’s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","imgix_url":"https://imgix.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-13T13:09:32.089Z","created_by":"5716b504e9c686d006000073","created":"2018-03-13T13:09:32.089Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-04-19T21:23:26.384Z"}]},{"repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}],"value":"react-graphql-blog","key":"app_slugs","title":"App Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"react-graphql-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"jamstack-fitness-website","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"gatsby-blog","type":"text","required":false}]}]},{"repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}],"value":"imgix-editor","key":"extension_slugs","title":"Extension SLugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"imgix-editor","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"export-to-csv","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"mux-videos","type":"text","required":false}]}]},{"value":"Cosmic JS allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team has been enjoying the ease of use with the new system.\"\n","key":"testimonial","title":"Testimonial","type":"textarea","children":null},{"value":"Owen Liversidge, Lead Developer at Tripwire Interactive","key":"testimonial_credit","title":"Testimonial Credit","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created_at":"2019-08-05T20:18:17.006Z","created_by":"5716b504e9c686d006000073","modified_at":"2019-08-06T23:47:00.449Z","created":"2019-08-06T23:34:18.378Z","status":"published","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-08-06T23:47:00.449Z","metadata":{"solution_name":"CMS Software for Modern Stack Websites","image":{"url":"https://cdn.cosmicjs.com/cb75f9b0-b8a2-11e9-9c18-07a340c60471-abe9e700-9dc2-11e9-a5b4-e5df9f8049d3-tripwire.png","imgix_url":"https://imgix.cosmicjs.com/cb75f9b0-b8a2-11e9-9c18-07a340c60471-abe9e700-9dc2-11e9-a5b4-e5df9f8049d3-tripwire.png"},"case_studies":[{"_id":"59663607a6a3f55962000e40","slug":"big-fish-launches-marketing-and-tutorial-content-for-games","title":"Big Fish Launches Marketing and Tutorial Content for Games","content":"<p>When <a href=\"http://www.bigfishgames.com\" rel=\"noopener noreferrer\" target=\"_blank\">Big Fish</a> launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch. Big Fish wanted their game studios to have the ability to curate and update content on each of their landing pages. Other CMS systems weren&rsquo;t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b671fa80-ba81-11e7-9419-d7ce2df8354d-Screen Shot 2017-10-26 at 2.12.42 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/bf97f050-ba82-11e7-b96e-3b4c8df8fb98-Screen Shot 2017-10-26 at 2.20.03 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><blockquote><p>&quot;We use Cosmic buckets for each of our mobile game landing pages. While our API and storage usage is low, the number of buckets we need is high, which makes the new Clusters Feature a perfect solution for our company use cases. It allows us to\r\nhave a single consolidated invoice, with an overall API and data-limit, but up to 35 buckets for our use.&quot;</p><p><cite>&mdash; Jessica Chappell, Web Developer&nbsp;</cite></p></blockquote><p>Read <a href=\"http://www.bigfishgames.com/blog\" rel=\"noopener noreferrer\" target=\"_blank\">more</a> about Big Fish and their games.</p>","metafields":[{"value":"Big Fish","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T14:45:27.402Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-11-08T23:15:38.911Z","metadata":{"company":"Big Fish","industry_type":"Gaming","teaser":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","logo":{"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}}},{"_id":"596663e8880d69fb6c000194","slug":"joblift-elevates-their-stack","title":"Joblift Elevates Their Stack ","content":"<p>In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, <a href=\"https://joblift.co.uk\" rel=\"noopener noreferrer\" target=\"_blank\">Joblift</a> seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/16ac66c0-03d7-11e9-a9c3-c1326db90b81-DrzF-2BX0AA0WTE.jpg-large.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Joblift manages localized content to serve Job, Press and Blog feeds to its various markets, including the UK, Netherlands and Germany. Easy user roles and permissions equip their team with the tools they need to seamlessly run a global organization.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic has completely sped up our ability to upload our content easily and efficiently. With Cosmic we now have a smooth process for uploading press releases which reflects the quality content on our website.&rdquo;</p><p><cite>&mdash; Ashleigh Grady, Content Editor and Marketing Manager</cite></p></blockquote>","metafields":[{"value":"Joblift","key":"company","title":"Company","type":"text","children":null},{"value":"Career Services","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T18:01:12.194Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-12-19T21:44:38.361Z","metadata":{"company":"Joblift","industry_type":"Career Services","teaser":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","logo":{"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}}},{"_id":"5aa7cd8c3078516dd48d6ad2","slug":"bookabus-builds-a-localized-transportation-website","title":"Bookabus Builds a Localized Transportation Website","content":"<p><a href=\"https://www.bookabus.eu\" rel=\"noopener noreferrer\" target=\"_blank\">Bookabus</a> is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it&rsquo;s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen Shot 2018-04-17 at 6.48.12 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Bookabus needed a new website to communicate their transport routes, terms and marketing materials. &nbsp;A big requirement was the ability to localize their content into different languages for the different areas they&#39;re servicing, including the UK, Netherlands, Germany, Spain, and Belgium. &nbsp;They chose to build their new transportation website with Cosmic because of the ease of use and powerful localization capabilities.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/be1ed900-4236-11e8-bd9f-93df74f6ae30-Screen Shot 2018-04-17 at 6.59.27 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate dynamic content into our website. The product is a great value for your money. This is especially true given that their customer service is top-notch.&quot;</p><p><cite>&mdash; Harrie Pieters, Web Developer&nbsp;</cite></p></blockquote>","metafields":[{"value":"Bookabus","key":"company","title":"Company","type":"text","children":null},{"value":"Transportation","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Bookabus is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it’s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","imgix_url":"https://imgix.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-13T13:09:32.089Z","created_by":"5716b504e9c686d006000073","created":"2018-03-13T13:09:32.089Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-04-19T21:23:26.384Z","metadata":{"company":"Bookabus","industry_type":"Transportation","teaser":"Bookabus is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it’s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events. \n","logo":{"url":"https://cdn.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","imgix_url":"https://imgix.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png"}}}],"app_slugs":[{"slug":"react-graphql-blog"},{"slug":"jamstack-fitness-website"},{"slug":"gatsby-blog"}],"extension_slugs":[{"slug":"imgix-editor"},{"slug":"export-to-csv"},{"slug":"mux-videos"}],"testimonial":"Cosmic JS allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team has been enjoying the ease of use with the new system.\"\n","testimonial_credit":"Owen Liversidge, Lead Developer at Tripwire Interactive"}},{"_id":"5bd88cc2dcf8c4248f3ccc4b","order":15,"slug":"tripwire-interactive-builds-a-react-corporate-website","title":"Tripwire Interactive Builds a React Corporate Website","content":"<p dir=\"ltr\">Tripwire Interactive is an entertainment software developer and publisher founded in 2005 by the award-winning mod team and winners of the 2004 edition of the &ldquo;$1,000,000 Make Something Unreal&rdquo; competition.</p><p dir=\"ltr\"><br><img src=\"https://cosmic-s3.imgix.net/1e7ac570-e363-11e8-8e9f-c7fa3cdb2209-Tripwire.png?w=1200\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"><br></p><p dir=\"ltr\">Gamers want games that grab their attention and will keep them coming back for more. <a href=\"https://www.tripwireinteractive.com/#/#top\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a> has been producing those types of games since the first Red Orchestra mod that won the &quot;Make Something Unreal&quot; competition in 2004. Since then Tripwire has won numerous Multiplayer and FPS Game of the Year awards from top editorial sites and millions have played a Red Orchestra or Killing Floor game, with an average play time of over 40 hours, per player, per game!&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://cosmic-s3.imgix.net/ec4f9940-dc64-11e8-9094-a112ce16fea9-40953819_2090843480937681_5517411053975109632_o.jpg?w=1200&quot;\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"><br></p><p dir=\"ltr\">Historically using an Umbraco system, The Tripwire Interactive team needed an easy way for their marketers to maintain marketing website content for their games&#39; parent brand. Each new game needed a dedicated landing page with marketing content. Blog,\r\nCareer and Press feeds needed to be managed by the marketing team without bottlenecking the developers. The Tripwire Interactive team chose Cosmic as their dynamic content management solution as they built their new corporate website on a modern React\r\nstack.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team\r\nhas been enjoying the ease of use with the new system.&quot;</p><p><cite>&mdash; Owen Liversidge, Lead Developer</cite></p></blockquote><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/297454e0-e387-11e8-89c3-0b430965f348-ezgif-4-5e5da2b90b13.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"Tripwire Interactive","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Gamers want games that grab their attention and will keep them coming back for more. Tripwire Interactive has been producing those types of games since the first Red Orchestra mod that won the \"Make Something Unreal\" competition in 2004. Since then Tripwire has won numerous Multiplayer and FPS Game of the Year awards from top editorial sites and millions have played a Red Orchestra or Killing Floor game, with an average play time of over 40 hours, per player, per game! \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-30T16:54:26.538Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-11-08T20:12:40.566Z","metadata":{"company":"Tripwire Interactive","industry_type":"Gaming","teaser":"Gamers want games that grab their attention and will keep them coming back for more. Tripwire Interactive has been producing those types of games since the first Red Orchestra mod that won the \"Make Something Unreal\" competition in 2004. Since then Tripwire has won numerous Multiplayer and FPS Game of the Year awards from top editorial sites and millions have played a Red Orchestra or Killing Floor game, with an average play time of over 40 hours, per player, per game! \n","logo":{"url":"https://cdn.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg"}}},{"_id":"60184d81600c7600081262c6","order":15,"slug":"announcing-cosmic-rest-api-v2-new-docs","title":"Announcing the Cosmic REST API v2, New Docs","content":"<p>We are excited to introduce Cosmic REST API v2 (alpha). The API has been rebuilt from the ground up to be lighter, faster, with lots of new features to make building Cosmic-powered apps even better.</p><p>Along with this release, we&#39;ve built a <a href=\"https://docs-v2.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">brand new documentation site</a> to help you learn more about all the new features. We recommend you start there to get all the latest and greatest in this release. Read below to get a breakdown of the new features, improvements, and changes.</p><p><br></p><p><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"card-shadow fr-draggable lazy-load fr-fvc fr-dvi\" data-video=\"https://cdn.cosmicjs.com/309d8980-6af3-11eb-afd3-010bb5d66a3e-Docs-v2.mp4\" loop=\"\" muted=\"\" playsinline=\"\" style=\"width: 100%;\">Your browser does not support HTML5 video.</video></span></p><h3><br>New Features</h3><ul><li>Nested <code>metadata</code> props are now possible without limit. See <a href=\"https://docs-v2.cosmicjs.com/api-reference/objects#using-props\" rel=\"noopener noreferrer\" target=\"_blank\">examples of nested props</a>.</li><li>No depth limit for Object relationships. The only limit is the prevention of infinite recursion.</li><li>We now offer a <a href=\"https://docs-v2.cosmicjs.com/api-reference/getting-started/introduction#postman\" rel=\"noopener noreferrer\" target=\"_blank\">Postman collection</a> to review and demo all REST API methods.</li><li>You can now use the <code>after</code> param for Object pagination.</li><li>We now have endpoints for <code>Metafields</code> and <code>Media Folders</code> to do CRUD operations directly.</li></ul><h3>Improvements</h3><ul><li>Lighter codebase, faster endpoints. In some cases, endpoint response times are up to 50% faster (non-cached).</li><li>Better endpoint structures that follow standard REST conventions such as <code>POST /resources</code>, <code>GET /resources/:resource_id</code>, etc.</li><li>Consistent error responses with verbose messages.</li><li>The Select Dropdown Metafield now includes both <code>key</code> and <code>value</code> in the API response.</li></ul><h3>Changes</h3><ul><li><code>_id</code> has been changed to <code>id</code>.</li><li><code>type_slug</code> has been changed to <code>type</code>.</li><li><code>status</code> can now either be <code>published</code> or <code>any</code> (which returns latest Object version draft or published).</li><li><code>query</code> is now the primary method for fetching and filtering Objects (Advanced Queries from v1). See <a href=\"https://docs-v2.cosmicjs.com/api-reference/queries\" rel=\"noopener noreferrer\" target=\"_blank\">Queries and Logic</a> for examples.</li><li>Single Objects must now be fetched using <code>id</code>. To fetch by <code>slug</code>, you will need to use <code>query</code>.</li><li><code>write_key</code> will now be required in the request header as <code>Authorization Bearer</code>.</li><li><code>metafields</code> are hidden by default.</li><li>Stricter user input requirements. No additional fields are possible in the body for <code>POST</code> and <code>PATCH</code> requests.</li><li>There is a new, more secure token authentication strategy.</li></ul><h3><br></h3><h3>Next Steps</h3><p><a href=\"https://docs-v2.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Read the docs</a> to learn more about all the updates and improvements. We would appreciate your input as we get the REST API v2 ready for production. If you have any comments or questions, please drop them in the comments below or in <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">our Slack channel</a>.</p><p>- Cosmic Team</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"HgqTbppqpc","value":"2021-02-09"},{"children":null,"type":"object","title":"Author","key":"author","id":"vswyprxXJ8","value":"5ffa1d1e0046b0000799cb7b","object_type":"authors","object":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"j2wEjr3739","value":"","url":null,"imgix_url":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2021-02-01T18:50:41.411Z","created_by":"5357ef811693be2118000001","modified_at":"2021-02-09T16:26:57.295Z","created":"2021-02-01T18:50:41.411Z","status":"published","thumbnail":"","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2021-02-09T16:26:57.295Z","metadata":{"published_date":"2021-02-09","author":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}}},"featured_image":{"url":null,"imgix_url":null}}},{"_id":"59092a411d2b961e2c000524","order":15,"slug":"ryan-skinner","title":"Ryan Skinner","content":"","metafields":[{"value":"0ca31460-2f9b-11e7-8a4c-11dbea3cc073-ryan.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0ca31460-2f9b-11e7-8a4c-11dbea3cc073-ryan.jpeg","imgix_url":"https://imgix.cosmicjs.com/0ca31460-2f9b-11e7-8a4c-11dbea3cc073-ryan.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-03T00:54:25.186Z","created_by":"5357ef811693be2118000001","created":"2017-05-03T00:54:25.186Z","status":"published","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/0ca31460-2f9b-11e7-8a4c-11dbea3cc073-ryan.jpeg","imgix_url":"https://imgix.cosmicjs.com/0ca31460-2f9b-11e7-8a4c-11dbea3cc073-ryan.jpeg"}}},{"_id":"5bad228b68df580b01d04acf","order":15,"slug":"twitter","title":"Twitter","content":"","metafields":[{"children":null,"type":"text","title":"Link","key":"link","id":"BvQyxliNfj","value":"https://cosmicjs.com/extensions/twitter-search"},{"children":null,"type":"file","title":"Image","key":"image","id":"wicBGJwpNW","value":"9c644ac0-8ed8-11ea-910b-435199f15a39-twitter.jpg","url":"https://cdn.cosmicjs.com/9c644ac0-8ed8-11ea-910b-435199f15a39-twitter.jpg","imgix_url":"https://imgix.cosmicjs.com/9c644ac0-8ed8-11ea-910b-435199f15a39-twitter.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"integrations","created_at":"2018-09-27T18:33:47.101Z","created_by":"5716b504e9c686d006000073","created":"2018-09-27T18:33:47.101Z","status":"published","modified_at":"2020-05-05T13:59:19.603Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-05-05T13:59:19.603Z","unpublish_at":null,"metadata":{"link":"https://cosmicjs.com/extensions/twitter-search","image":{"url":"https://cdn.cosmicjs.com/9c644ac0-8ed8-11ea-910b-435199f15a39-twitter.jpg","imgix_url":"https://imgix.cosmicjs.com/9c644ac0-8ed8-11ea-910b-435199f15a39-twitter.jpg"}}},{"_id":"538a0d468ceb85ee75000002","slug":"blog","title":"Cosmic JS Blog","content":"<p><span style=\"font-size: 14px; line-height: 1.428571429;\">This is the blog with lots of good posts about Cosmic JS.  These thoughts are my own and not affiliated with those of partners, friends or family. - Tony</span></p>","metafields":[],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"pages","created":"2014-05-31T17:11:34.136Z","order":15,"modified":"2014-06-07T06:11:05.644Z","files":"","metadata":null},{"_id":"61688b0e75b2f40008cf5d6d","order":15,"slug":"new-dashboard-progress","title":"New Dashboard Progress","content":"<p>We are excited to share more dashboard progress with you. Since <a href=\"https://www.cosmicjs.com/blog/sneak-peek-brand-new-dashboard\" rel=\"noopener noreferrer\" target=\"_blank\">our last update</a> we&#39;ve been focused on building out the main Cosmic user flows for developers and content creators. Here&#39;s a sneak peak of some recently completed features:</p><p><strong>1. Add Project</strong><br>The onboarding process is simple and easy. Choose between starting with a template, or starting from scratch.</p><p><strong><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"card-shadow video-popout fr-draggable fr-fvc fr-dvi\" loop=\"\" muted=\"\" playsinline=\"\" src=\"https://cdn.cosmicjs.com/3d821600-2d28-11ec-a256-9f386f540f3a-dashboard-add-project.mp4\">Your browser does not support HTML5 video.</video></span></strong></p><p><br></p><p><strong>2. Add Object Type</strong><br>Creating your content model is easier than ever. Setting up localization is a breeze and we&#39;ve completely reimagined the Metafield model building process. You now have a drag and drop palette to create your Metafield models and sorting is easy too!</p><p><strong><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"card-shadow video-popout fr-draggable fr-fvc fr-dvi\" loop=\"\" muted=\"\" playsinline=\"\" src=\"https://cdn.cosmicjs.com/494c9460-2d28-11ec-a256-9f386f540f3a-dashboard-metafields.mp4\">Your browser does not support HTML5 video.</video></span></strong></p><p><strong><br></strong></p><p><strong><strong>3. Adding Content</strong></strong><br>Adding content to your Objects is now easier than ever. To relate Objects to one another, you now have an easy access search and select Object drawer.</p><p><strong><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"card-shadow video-popout fr-draggable fr-fvc fr-dvi\" loop=\"\" muted=\"\" playsinline=\"\" src=\"https://cdn.cosmicjs.com/c8b37a70-2d28-11ec-a256-9f386f540f3a-dashboard-single-object.mov\">Your browser does not support HTML5 video.</video></span></strong></p><p><br></p><p><strong><strong>4. Developer Tools</strong></strong><br>The new developer tools drawer makes accessing your code to implement into your app a snap.</p><p><strong><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"card-shadow video-popout fr-draggable fr-fvc fr-dvi\" loop=\"\" muted=\"\" playsinline=\"\" src=\"https://cdn.cosmicjs.com/c77aac50-2d28-11ec-a256-9f386f540f3a-dashboard-dev-tools.mp4\">Your browser does not support HTML5 video.</video></span></strong></p><p><br></p><p>We can&#39;t wait to show you more! We are on track to release the new dashboard in a private alpha soon. In the meantime, <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">join us on Twitter</a> and in <a href=\"https://www.cosmicjs.com/community\">our Slack channel</a> to be the first to hear more about the latest updates.</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"LYIdoE8AMJ","value":"5ffa1d1e0046b0000799cb7b","required":true,"object_type":"authors","object":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"O1DHyZHvV6","value":"<p>We are excited to share more dashboard progress with you. Since <a href=\"https://www.cosmicjs.com/blog/sneak-peek-brand-new-dashboard\" rel=\"noopener noreferrer\" target=\"_blank\">our last update</a> we&#39;ve been focused on building out the main Cosmic user flows for developers and content creators. Here&#39;s a sneak peak of some recently completed features.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"ZIiChbMWJR","value":"2f399f50-2d28-11ec-a256-9f386f540f3a-dash.png","url":"https://cdn.cosmicjs.com/2f399f50-2d28-11ec-a256-9f386f540f3a-dash.png","imgix_url":"https://imgix.cosmicjs.com/2f399f50-2d28-11ec-a256-9f386f540f3a-dash.png"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"wEwFrCedx9","value":"We're really excited to share more dashboard progress with you."},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"DdSGxaeDcn","value":"2021-10-15"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2021-10-14T19:54:53.925Z","created_by":"5357ef811693be2118000001","modified_at":"2021-10-15T15:57:19.363Z","created":"2021-10-14T19:54:53.925Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/2f399f50-2d28-11ec-a256-9f386f540f3a-dash.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2021-10-15T15:57:19.363Z","metadata":{"author":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}}},"teaser":"<p>We are excited to share more dashboard progress with you. Since <a href=\"https://www.cosmicjs.com/blog/sneak-peek-brand-new-dashboard\" rel=\"noopener noreferrer\" target=\"_blank\">our last update</a> we&#39;ve been focused on building out the main Cosmic user flows for developers and content creators. Here&#39;s a sneak peak of some recently completed features.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/2f399f50-2d28-11ec-a256-9f386f540f3a-dash.png","imgix_url":"https://imgix.cosmicjs.com/2f399f50-2d28-11ec-a256-9f386f540f3a-dash.png"},"seo_meta_description":"We're really excited to share more dashboard progress with you.","published_date":"2021-10-15"}},{"_id":"60d4eb7191c3630008aba45a","order":16,"slug":"sneak-peek-brand-new-dashboard","title":"Sneak Peek: Brand New Dashboard","content":"<p>We may have seemed a little quiet lately. That&#39;s because, for the last few months, we&#39;ve been hard at work building a completely new Cosmic dashboard!</p><p>Built from the ground up, our new dashboard promises to be faster, easier to use, and more beautiful than any CMS dashboard you have ever seen.</p><p>Though it&#39;s not quite ready yet, we are really excited to show you a sneak peek. Check out the screenshots below, and make sure to follow the links to be the first to get exclusive preview access before we release to the general public.</p><p><br></p><p style=\"text-align: center;\"><strong>Blazing Fast Page Loads ⚡</strong><br><br><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"card-shadow video-popout fr-draggable fr-fvc fr-dvi\" loop=\"\" muted=\"\" playsinline=\"\" src=\"https://cdn.cosmicjs.com/e44ad3e0-d829-11eb-a1a6-c3f080da6c53-fast-dash.mp4\">Your browser does not support HTML5 video.</video></span></p><p><br></p><p style=\"text-align: center;\"><strong>Beautiful Media Management 😍</strong></p><p style=\"text-align: center;\"><span class=\"fr-video fr-fvc fr-dvi fr-draggable fr-active\" contenteditable=\"false\"><video autoplay=\"\" class=\"card-shadow video-popout fr-draggable fr-fvc fr-dvi\" loop=\"\" muted=\"\" playsinline=\"\" src=\"https://cdn.cosmicjs.com/a0a530f0-d5cb-11eb-9016-a7d86b9322db-media-upload.mp4\">Your browser does not support HTML5 video.</video></span></p><p><br></p><p style=\"text-align: center;\"><strong>Dark Mode 🌑</strong><br><br><img src=\"https://cdn.cosmicjs.com/cd5de6a0-d8dc-11eb-a1a6-c3f080da6c53-dark-mode.png\" data-action=\"zoom\" class=\"fr-fic fr-dii card-shadow image-popout\"></p><p style=\"text-align: center;\"><br><strong>And much, much more!!!</strong></p><p>At Cosmic, we are committed to providing your team with the best content management solution, and we think our new dashboard will make your experience second to none.<br><br></p><p><strong>Moar Previews Please!</strong><br>We can&#39;t wait to show you more when it&#39;s ready! If you&#39;re not onboard yet, <a href=\"https://app.cosmicjs.com/signup\" rel=\"noopener noreferrer\" target=\"_blank\">sign up</a> for Cosmic and we&#39;ll be sure to notify you when the new dashboard is available for you to get your hands on. Also, <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a> and <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">join our Slack channel</a> for more updates.</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"npBQrRSOMI","value":"5ffa1d1e0046b0000799cb7b","required":true,"object_type":"authors","object":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"H7LJiuSJyz","value":"<p>For the last few months, we&#39;ve been hard at work building an entirely new Cosmic dashboard. Built from the ground up, our new dashboard promises to be faster, easier to use, and more beautiful than any CMS dashboard you have ever seen.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"E5jer2AwkK","value":"90b66f60-d5ee-11eb-8f97-d52cfe93864a-dash-table.png","url":"https://cdn.cosmicjs.com/90b66f60-d5ee-11eb-8f97-d52cfe93864a-dash-table.png","imgix_url":"https://imgix.cosmicjs.com/90b66f60-d5ee-11eb-8f97-d52cfe93864a-dash-table.png"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"CeKRyWGPVb","value":"For the last few months, we've been hard at work building an entirely new Cosmic dashboard. Built from the ground up, our new dashboard promises to be faster, easier to use, and more beautiful than any CMS dashboard you have ever seen."},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"db1KdiFODk","value":"2021-06-29"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2021-06-24T20:30:41.818Z","created_by":"5357ef811693be2118000001","modified_at":"2021-06-29T15:02:21.635Z","created":"2021-06-24T20:30:41.818Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/cd5de6a0-d8dc-11eb-a1a6-c3f080da6c53-dark-mode.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2021-06-29T15:02:21.635Z","metadata":{"author":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}}},"teaser":"<p>For the last few months, we&#39;ve been hard at work building an entirely new Cosmic dashboard. Built from the ground up, our new dashboard promises to be faster, easier to use, and more beautiful than any CMS dashboard you have ever seen.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/90b66f60-d5ee-11eb-8f97-d52cfe93864a-dash-table.png","imgix_url":"https://imgix.cosmicjs.com/90b66f60-d5ee-11eb-8f97-d52cfe93864a-dash-table.png"},"seo_meta_description":"For the last few months, we've been hard at work building an entirely new Cosmic dashboard. Built from the ground up, our new dashboard promises to be faster, easier to use, and more beautiful than any CMS dashboard you have ever seen.","published_date":"2021-06-29"}},{"_id":"58fc08c65161d903690003cd","order":16,"slug":"javascript-cms","title":"JavaScript CMS","content":"<p>Cosmic JS is the leading CMS for modern digital teams. Install the <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Official Cosmic JS JavaScript Client</a> to integrate content into your JavaScript app in minutes. Use Cosmic JS to quickly build content-powered blogs, dynamic pages, and more. Get a feel for JavaScript by taking a spin through our <a href=\"https://cosmicjs.com/apps\" rel=\"noopener noreferrer\" target=\"_blank\">JavaScript Apps</a> and check out the tutorials below.</p><h3>JavaScript CMS Articles</h3><p><a href=\"https://cosmicjs.com/articles\" rel=\"noopener noreferrer\" target=\"_blank\">Developer Community: JavaScript Articles</a><br><a data-target-href=\"https://cosmicjs.com/blog/the-cosmic-stack\" href=\"https://cosmicjs.com/blog/the-cosmic-stack\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">The Cosmic Stack</a><br><a data-target-href=\"https://cosmicjs.com/blog/how-to-build-a-simple-blog-using-nodejs\" href=\"https://cosmicjs.com/blog/how-to-build-a-simple-blog-using-nodejs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">How to Build a Simple Blog Using Node.js</a><br><a data-target-href=\"https://cosmicjs.com/blog/how-to-build-a-jamstack-website\" href=\"https://cosmicjs.com/blog/how-to-build-a-jamstack-website\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">How to Build a JAMstack Website</a></p><h3>JavaScript CMS Resources</h3><p><a href=\"https://cosmicjs.com/docs\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic JS Docs</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official JavaScript Client</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3 style=' font-family: \"Open Sans\", sans-serif; color: rgb(51, 51, 51); font-size: 24px; text-align: start; background-color: rgb(255, 255, 255);'>Examples</h3><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><code style=' font-size: inherit; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: 0px 0px; text-align: left;'>npm i cosmicjs</code></pre><p style=' color: rgb(51, 51, 51); font-family: \"Open Sans\", sans-serif; font-size: 16px; text-align: start; background-color: rgb(255, 255, 255);'>Then in your JavaScript file, get your content:</p><div class=\"fr-embedly     \" data-original-embed=\"<a href='https://runkit.com/tonyspiro/5ad9109c320cd6001286359c' class='embedly-card'></a>\"><a href=\"https://runkit.com/tonyspiro/5ad9109c320cd6001286359c\" class=\"embedly-card\"></a></div>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"KuAIbyENzf","value":"5226f730-27c7-11e7-9631-b17e7278f329-javascript.svg","url":"https://cdn.cosmicjs.com/5226f730-27c7-11e7-9631-b17e7278f329-javascript.svg","imgix_url":"https://imgix.cosmicjs.com/5226f730-27c7-11e7-9631-b17e7278f329-javascript.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"UKAE1c15Z4","value":"553aedf0-27c7-11e7-9631-b17e7278f329-javascript.svg","url":"https://cdn.cosmicjs.com/553aedf0-27c7-11e7-9631-b17e7278f329-javascript.svg","imgix_url":"https://imgix.cosmicjs.com/553aedf0-27c7-11e7-9631-b17e7278f329-javascript.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"qlylynnV4i","value":"<p>Cosmic is the best CMS for JavaScript websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"7ONJDU6VJ9","value":"JavaScript"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"udsfeWYHry","value":"Cosmic is the best CMS for JavaScript websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"H1xP4yDo1E","value":"de1a4670-2ac4-11e7-8c0a-bd67c616bd40-javascript.jpg","url":"https://cdn.cosmicjs.com/de1a4670-2ac4-11e7-8c0a-bd67c616bd40-javascript.jpg","imgix_url":"https://imgix.cosmicjs.com/de1a4670-2ac4-11e7-8c0a-bd67c616bd40-javascript.jpg"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"605UUReovh","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"5culuyhkW3","value":"Best Headless CMS for JavaScript"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"frgtgqfrpylludl8pnsi","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-23T01:52:06.573Z","created_by":"5357ef811693be2118000001","created":"2017-04-23T01:52:06.573Z","status":"published","modified_at":"2020-06-27T19:16:34.555Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-27T19:16:34.555Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/5226f730-27c7-11e7-9631-b17e7278f329-javascript.svg","imgix_url":"https://imgix.cosmicjs.com/5226f730-27c7-11e7-9631-b17e7278f329-javascript.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/553aedf0-27c7-11e7-9631-b17e7278f329-javascript.svg","imgix_url":"https://imgix.cosmicjs.com/553aedf0-27c7-11e7-9631-b17e7278f329-javascript.svg"},"blurb":"<p>Cosmic is the best CMS for JavaScript websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"JavaScript","seo_description":"Cosmic is the best CMS for JavaScript websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/de1a4670-2ac4-11e7-8c0a-bd67c616bd40-javascript.jpg","imgix_url":"https://imgix.cosmicjs.com/de1a4670-2ac4-11e7-8c0a-bd67c616bd40-javascript.jpg"},"code_example":"","seo_title":"Best Headless CMS for JavaScript","videos":[]}},{"_id":"5d4ad9e2dbf3682aff1d580a","order":16,"slug":"cms-software-for-emerging-tech","title":"CMS Software for Emerging Tech","content":"<p>Cosmic JS provides flexible CMS Software for teams managing content for emerging tech like Augmented Reality, Virtual Reality and more. Teams choose to manage content using Cosmic JS CMS Software because the CMS Dashboard is simple and intuitive to manage content, and integration with your apps is fast and easy.</p><p>Teams using CMS Software to power content for emerging tech like AR / VR don&#39;t have to maintain their own server and content management system. By focusing on apps and not infrastructure, teams are able to build apps faster, together.&nbsp;</p><h3><br>What is Headless CMS Software?</h3><p>Headless CMS Software works by providing non-technical editors with a Dashboard UI to model, create and publish content while providing developers with API tools and resources to integrate content with any website or app. By decoupling content from code, teams create a central content repository that can power all of their content-powered applications.&nbsp;</p>","metafields":[{"value":"CMS Software for Emerging Tech","key":"solution_name","title":"Solution Name","type":"text","children":null},{"value":"081cd180-b91c-11e9-b76b-a9843931f07b-52263510-9dc3-11e9-a5b4-e5df9f8049d3-f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-109999224655216202658486799915322872806436o.jpg","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/081cd180-b91c-11e9-b76b-a9843931f07b-52263510-9dc3-11e9-a5b4-e5df9f8049d3-f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-109999224655216202658486799915322872806436o.jpg","imgix_url":"https://imgix.cosmicjs.com/081cd180-b91c-11e9-b76b-a9843931f07b-52263510-9dc3-11e9-a5b4-e5df9f8049d3-f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-109999224655216202658486799915322872806436o.jpg"},{"object_type":"case-studies","value":"5c3774946bcb7526c0bddbe7,5bd889bf80b80325461575c5,5ade6e0e2b218820ec24bff1","key":"case_studies","title":"Case Studies","type":"objects","children":null,"objects":[{"_id":"5c3774946bcb7526c0bddbe7","slug":"dreamwalks-decoupled-approach-to-content-management","title":"DreamWalk's Decoupled Approach to Content Management","content":"<p>With a list of chart-topping apps to their name and a long history of mobile innovation, <a href=\"https://dreamwalk.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">DreamWalk</a> is the App Development agency trusted by some of the world&rsquo;s biggest brands and most ambitious startups. With clients like Coca-Cola&reg;, New Mexico Tourism and BP, DreamWalk is among the longest standing and most trusted app development firms in Australia.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/73d7c690-1562-11e9-829a-87a2ed6f5067-dreamwalk-cosmic-case-study-banner.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">The team at DreamWalk was in search of a headless CMS that would speed up their development cycles. They needed to empower their developers with flexibility out-of-the-box while enabling their content managers to manage content in a web-based Dashboard. They chose Cosmic due to its easy content modeling tools that allowed them to set up client projects more quickly and easily than before, adding to their bottom line and expanding the tools available in their digital toolkit.</p><p dir=\"ltr\"><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/5013b550-14f6-11e9-b55d-3354984e810c-DreamWalk.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;At DreamWalk we always strive to give our clients the best possible customer experience. Cosmic enables us to work within tight budgets without compromising on that great experience.&quot;</p><cite>&mdash; Karl Graf, Director and Mobile App Strategist</cite></blockquote>","metafields":[{"value":"DreamWalk","key":"company","title":"Company","type":"text","children":null},{"value":"App Development Agency","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"With a list of chart-topping apps to their name and a long history of mobile innovation, DreamWalk is the App Development agency trusted by some of the world’s biggest brands and most ambitious startups. With clients like Coca-Cola®, New Mexico Tourism and BP, DreamWalk is among the longest standing and most trusted app development firms in Australia. \n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"f891dd10-14f6-11e9-ac3b-29773f4ac49e-A0Vz6NqU_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f891dd10-14f6-11e9-ac3b-29773f4ac49e-A0Vz6NqU_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/f891dd10-14f6-11e9-ac3b-29773f4ac49e-A0Vz6NqU_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2019-01-10T16:36:36.690Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-01-11T16:56:26.753Z"},{"_id":"5bd889bf80b80325461575c5","slug":"plato-delivers-mobile-news-feed-content-with-cosmic-js","title":"Plato Delivers Mobile News Feed Content with Cosmic","content":"<p dir=\"ltr\">Plato&#39;s mission is to bring people together through meaningful &amp; social games. <a href=\"http://www.platoapp.com\" rel=\"noopener noreferrer\" target=\"_blank\">Plato</a> combines chat &amp; games seamlessly, as the first messenger built from the ground up to support full multiplayer games. With a team comprised of Yahoo and gaming veterans plus backing from WhatsApp, Plato is available now on iOS &amp; Android.<br><br></p><p><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b09c33a0-dc63-11e8-a63d-c7054455c7d9-ice_screenshot_20181030-114842.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">Plato had a home-built CMS that, between operational costs and the engineering salaries to maintain it, was costing far too much. The team decided to replace their internal system with Cosmic to allow their developers to build new content models when they need to while empowering editors to manage content without bottlenecking the development team.&nbsp;</p><p dir=\"ltr\">Plato&#39;s new tech stack is Golang based and hosted on AWS. Plato&#39;s mobile clients, written in Swift and Kotlin, access their news feed content, which is ATOM Syndication Format. The application uses the Cosmic REST API to pull articles and package them into an ATOM-compliant feed.&nbsp;</p><p dir=\"ltr\"><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/42e9ed20-dc63-11e8-9019-332e53831a9a-14963156_1599170143430300_6292826317590698217_n.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;It is refreshing to use an API-first CMS, rather than trying to integrate with a complex, monolithic system and adapt it to our specific use case.&rdquo;</p><p><cite>&mdash; Jesse Macnish, Chief Technology Officer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Plato","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Plato's mission is to bring people together through meaningful & social games. Plato combines chat & games seamlessly, as the first messenger built from the ground up to support full multiplayer games. With a team comprised of Yahoo and gaming veterans plus backing from WhatsApp, Plato is available now on iOS & Android.\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-30T16:41:35.346Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-01-08T23:23:29.527Z"},{"_id":"5ade6e0e2b218820ec24bff1","slug":"medical-realities-delivers-vr-surgical-content","title":"Medical Realities Delivers VR Surgical Content","content":"<p>The <a href=\"https://www.medicalrealities.com\" rel=\"noopener noreferrer\" target=\"_blank\">Medical Realties</a> Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/5dc112a0-5aa8-11e8-a7f7-e17cbb39f395-ice_screenshot_20180518-092612.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Medical Realities team needed a way for educators (non-technical editors) to manage content that could be served to VR headsets for consumption by trainees, so they chose Cosmic to manage and deliver their content from the cloud through an API.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-10999922_465521620265848_6799915322872806436_o.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily spin up content models that would allow our non-technical editors to manage the most sophisticated medical VR content out there. Our developers were equipped with robust Docs and Example Apps to get them started and were able to use the bleeding-edge frameworks necessary to run Virtual Reality.&quot;</p><p><cite>&mdash; Joe Marritt, Lead Web Developer&nbsp;</cite></p></blockquote>","metafields":[{"value":"Medical Realities","key":"company","title":"Company","type":"text","children":null},{"value":"Healthcare and Virtual Reality ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"The Medical Realties Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","imgix_url":"https://imgix.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-04-23T23:36:46.885Z","created_by":"5716b504e9c686d006000073","created":"2018-04-23T23:36:46.885Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-05-18T17:07:50.800Z"}]},{"repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}],"value":"react-native-twitter-clone","key":"app_slugs","title":"App Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"react-native-twitter-clone","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"cross-platform-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"vue-rpg-game","type":"text","required":false}]}]},{"repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}],"value":"twitter-search","key":"extension_slugs","title":"Extension SLugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"twitter-search","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"export-to-csv","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"imgix-editor ","type":"text","required":false}]}]},{"value":"\"Cosmic JS allowed us to easily spin up content models that would allow our non-technical editors to manage the most sophisticated medical VR content out there. Our developers were equipped with robust Docs and Example Apps to get them started and were able to use the bleeding-edge frameworks necessary to run Virtual Reality.\"\n","key":"testimonial","title":"Testimonial","type":"textarea","children":null},{"value":"Joe Marritt, Lead Web Developer at Medical Realities","key":"testimonial_credit","title":"Testimonial Credit","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created_at":"2019-08-05T20:18:17.006Z","created_by":"5716b504e9c686d006000073","modified_at":"2019-08-07T14:05:07.229Z","created":"2019-08-07T14:02:10.059Z","status":"published","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-08-07T14:05:07.229Z","metadata":{"solution_name":"CMS Software for Emerging Tech","image":{"url":"https://cdn.cosmicjs.com/081cd180-b91c-11e9-b76b-a9843931f07b-52263510-9dc3-11e9-a5b4-e5df9f8049d3-f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-109999224655216202658486799915322872806436o.jpg","imgix_url":"https://imgix.cosmicjs.com/081cd180-b91c-11e9-b76b-a9843931f07b-52263510-9dc3-11e9-a5b4-e5df9f8049d3-f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-109999224655216202658486799915322872806436o.jpg"},"case_studies":[{"_id":"5c3774946bcb7526c0bddbe7","slug":"dreamwalks-decoupled-approach-to-content-management","title":"DreamWalk's Decoupled Approach to Content Management","content":"<p>With a list of chart-topping apps to their name and a long history of mobile innovation, <a href=\"https://dreamwalk.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">DreamWalk</a> is the App Development agency trusted by some of the world&rsquo;s biggest brands and most ambitious startups. With clients like Coca-Cola&reg;, New Mexico Tourism and BP, DreamWalk is among the longest standing and most trusted app development firms in Australia.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/73d7c690-1562-11e9-829a-87a2ed6f5067-dreamwalk-cosmic-case-study-banner.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">The team at DreamWalk was in search of a headless CMS that would speed up their development cycles. They needed to empower their developers with flexibility out-of-the-box while enabling their content managers to manage content in a web-based Dashboard. They chose Cosmic due to its easy content modeling tools that allowed them to set up client projects more quickly and easily than before, adding to their bottom line and expanding the tools available in their digital toolkit.</p><p dir=\"ltr\"><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/5013b550-14f6-11e9-b55d-3354984e810c-DreamWalk.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;At DreamWalk we always strive to give our clients the best possible customer experience. Cosmic enables us to work within tight budgets without compromising on that great experience.&quot;</p><cite>&mdash; Karl Graf, Director and Mobile App Strategist</cite></blockquote>","metafields":[{"value":"DreamWalk","key":"company","title":"Company","type":"text","children":null},{"value":"App Development Agency","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"With a list of chart-topping apps to their name and a long history of mobile innovation, DreamWalk is the App Development agency trusted by some of the world’s biggest brands and most ambitious startups. With clients like Coca-Cola®, New Mexico Tourism and BP, DreamWalk is among the longest standing and most trusted app development firms in Australia. \n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"f891dd10-14f6-11e9-ac3b-29773f4ac49e-A0Vz6NqU_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f891dd10-14f6-11e9-ac3b-29773f4ac49e-A0Vz6NqU_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/f891dd10-14f6-11e9-ac3b-29773f4ac49e-A0Vz6NqU_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2019-01-10T16:36:36.690Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-01-11T16:56:26.753Z","metadata":{"company":"DreamWalk","industry_type":"App Development Agency","teaser":"With a list of chart-topping apps to their name and a long history of mobile innovation, DreamWalk is the App Development agency trusted by some of the world’s biggest brands and most ambitious startups. With clients like Coca-Cola®, New Mexico Tourism and BP, DreamWalk is among the longest standing and most trusted app development firms in Australia. \n\n\n","logo":{"url":"https://cdn.cosmicjs.com/f891dd10-14f6-11e9-ac3b-29773f4ac49e-A0Vz6NqU_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/f891dd10-14f6-11e9-ac3b-29773f4ac49e-A0Vz6NqU_400x400.jpg"}}},{"_id":"5bd889bf80b80325461575c5","slug":"plato-delivers-mobile-news-feed-content-with-cosmic-js","title":"Plato Delivers Mobile News Feed Content with Cosmic","content":"<p dir=\"ltr\">Plato&#39;s mission is to bring people together through meaningful &amp; social games. <a href=\"http://www.platoapp.com\" rel=\"noopener noreferrer\" target=\"_blank\">Plato</a> combines chat &amp; games seamlessly, as the first messenger built from the ground up to support full multiplayer games. With a team comprised of Yahoo and gaming veterans plus backing from WhatsApp, Plato is available now on iOS &amp; Android.<br><br></p><p><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b09c33a0-dc63-11e8-a63d-c7054455c7d9-ice_screenshot_20181030-114842.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">Plato had a home-built CMS that, between operational costs and the engineering salaries to maintain it, was costing far too much. The team decided to replace their internal system with Cosmic to allow their developers to build new content models when they need to while empowering editors to manage content without bottlenecking the development team.&nbsp;</p><p dir=\"ltr\">Plato&#39;s new tech stack is Golang based and hosted on AWS. Plato&#39;s mobile clients, written in Swift and Kotlin, access their news feed content, which is ATOM Syndication Format. The application uses the Cosmic REST API to pull articles and package them into an ATOM-compliant feed.&nbsp;</p><p dir=\"ltr\"><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/42e9ed20-dc63-11e8-9019-332e53831a9a-14963156_1599170143430300_6292826317590698217_n.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;It is refreshing to use an API-first CMS, rather than trying to integrate with a complex, monolithic system and adapt it to our specific use case.&rdquo;</p><p><cite>&mdash; Jesse Macnish, Chief Technology Officer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Plato","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Plato's mission is to bring people together through meaningful & social games. Plato combines chat & games seamlessly, as the first messenger built from the ground up to support full multiplayer games. With a team comprised of Yahoo and gaming veterans plus backing from WhatsApp, Plato is available now on iOS & Android.\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-30T16:41:35.346Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-01-08T23:23:29.527Z","metadata":{"company":"Plato","industry_type":"Gaming ","teaser":"Plato's mission is to bring people together through meaningful & social games. Plato combines chat & games seamlessly, as the first messenger built from the ground up to support full multiplayer games. With a team comprised of Yahoo and gaming veterans plus backing from WhatsApp, Plato is available now on iOS & Android.\n\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg"}}},{"_id":"5ade6e0e2b218820ec24bff1","slug":"medical-realities-delivers-vr-surgical-content","title":"Medical Realities Delivers VR Surgical Content","content":"<p>The <a href=\"https://www.medicalrealities.com\" rel=\"noopener noreferrer\" target=\"_blank\">Medical Realties</a> Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/5dc112a0-5aa8-11e8-a7f7-e17cbb39f395-ice_screenshot_20180518-092612.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Medical Realities team needed a way for educators (non-technical editors) to manage content that could be served to VR headsets for consumption by trainees, so they chose Cosmic to manage and deliver their content from the cloud through an API.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-10999922_465521620265848_6799915322872806436_o.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily spin up content models that would allow our non-technical editors to manage the most sophisticated medical VR content out there. Our developers were equipped with robust Docs and Example Apps to get them started and were able to use the bleeding-edge frameworks necessary to run Virtual Reality.&quot;</p><p><cite>&mdash; Joe Marritt, Lead Web Developer&nbsp;</cite></p></blockquote>","metafields":[{"value":"Medical Realities","key":"company","title":"Company","type":"text","children":null},{"value":"Healthcare and Virtual Reality ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"The Medical Realties Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","imgix_url":"https://imgix.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-04-23T23:36:46.885Z","created_by":"5716b504e9c686d006000073","created":"2018-04-23T23:36:46.885Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-05-18T17:07:50.800Z","metadata":{"company":"Medical Realities","industry_type":"Healthcare and Virtual Reality ","teaser":"The Medical Realties Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application. \n","logo":{"url":"https://cdn.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","imgix_url":"https://imgix.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png"}}}],"app_slugs":[{"slug":"react-native-twitter-clone"},{"slug":"cross-platform-blog"},{"slug":"vue-rpg-game"}],"extension_slugs":[{"slug":"twitter-search"},{"slug":"export-to-csv"},{"slug":"imgix-editor "}],"testimonial":"\"Cosmic JS allowed us to easily spin up content models that would allow our non-technical editors to manage the most sophisticated medical VR content out there. Our developers were equipped with robust Docs and Example Apps to get them started and were able to use the bleeding-edge frameworks necessary to run Virtual Reality.\"\n","testimonial_credit":"Joe Marritt, Lead Web Developer at Medical Realities"}},{"_id":"5905fe6a710a2188470004a5","order":16,"slug":"noah-vaillancourt","title":"Noah Vaillancourt","content":"","metafields":[{"value":"2664e120-2db7-11e7-826f-f34de0199ac5-noah-vaillancourt.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2664e120-2db7-11e7-826f-f34de0199ac5-noah-vaillancourt.jpeg","imgix_url":"https://imgix.cosmicjs.com/2664e120-2db7-11e7-826f-f34de0199ac5-noah-vaillancourt.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-04-30T15:10:34.252Z","created_by":"5357ef811693be2118000001","created":"2017-04-30T15:10:34.252Z","status":"published","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/2664e120-2db7-11e7-826f-f34de0199ac5-noah-vaillancourt.jpeg","imgix_url":"https://imgix.cosmicjs.com/2664e120-2db7-11e7-826f-f34de0199ac5-noah-vaillancourt.jpeg"}}},{"_id":"538de4900839ae2f24000001","slug":"appstore","title":"App Store","content":"","metafields":[],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"pages","created":"2014-06-03T15:06:56.436Z","modified":"2014-06-06T13:18:36.810Z","files":[{"_id":"538e1706c55b85e52a000003","key":"cosmic-node","name":"03865d15-6de1-30c4-544f-d264cb685967-1401820929805-cosmicscale-node.zip","original_name":"cosmicscale-node.zip","type":"application/zip","order":2},{"_id":"538e1703c55b85e52a000001","key":"cosmic-php","name":"71f3bc20-b60e-0301-3213-f7abbc9fc78b-1401820929809-cosmicscale-php.zip","original_name":"cosmicscale-php.zip","type":"application/zip","order":0},{"_id":"538e1704c55b85e52a000002","key":"cosmic-angular","name":"ac741882-d4e7-2d39-e595-43da43a33d9e-1401820929798-cosmicscale-angular.zip","original_name":"cosmicscale-angular.zip","type":"application/zip","order":1}],"order":16,"metadata":null},{"_id":"5bd889bf80b80325461575c5","order":16,"slug":"plato-delivers-mobile-news-feed-content-with-cosmic-js","title":"Plato Delivers Mobile News Feed Content with Cosmic","content":"<p dir=\"ltr\">Plato&#39;s mission is to bring people together through meaningful &amp; social games. <a href=\"http://www.platoapp.com\" rel=\"noopener noreferrer\" target=\"_blank\">Plato</a> combines chat &amp; games seamlessly, as the first messenger built from the ground up to support full multiplayer games. With a team comprised of Yahoo and gaming veterans plus backing from WhatsApp, Plato is available now on iOS &amp; Android.<br><br></p><p><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b09c33a0-dc63-11e8-a63d-c7054455c7d9-ice_screenshot_20181030-114842.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">Plato had a home-built CMS that, between operational costs and the engineering salaries to maintain it, was costing far too much. The team decided to replace their internal system with Cosmic to allow their developers to build new content models when they need to while empowering editors to manage content without bottlenecking the development team.&nbsp;</p><p dir=\"ltr\">Plato&#39;s new tech stack is Golang based and hosted on AWS. Plato&#39;s mobile clients, written in Swift and Kotlin, access their news feed content, which is ATOM Syndication Format. The application uses the Cosmic REST API to pull articles and package them into an ATOM-compliant feed.&nbsp;</p><p dir=\"ltr\"><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/42e9ed20-dc63-11e8-9019-332e53831a9a-14963156_1599170143430300_6292826317590698217_n.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;It is refreshing to use an API-first CMS, rather than trying to integrate with a complex, monolithic system and adapt it to our specific use case.&rdquo;</p><p><cite>&mdash; Jesse Macnish, Chief Technology Officer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Plato","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Plato's mission is to bring people together through meaningful & social games. Plato combines chat & games seamlessly, as the first messenger built from the ground up to support full multiplayer games. With a team comprised of Yahoo and gaming veterans plus backing from WhatsApp, Plato is available now on iOS & Android.\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-30T16:41:35.346Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-01-08T23:23:29.527Z","metadata":{"company":"Plato","industry_type":"Gaming ","teaser":"Plato's mission is to bring people together through meaningful & social games. Plato combines chat & games seamlessly, as the first messenger built from the ground up to support full multiplayer games. With a team comprised of Yahoo and gaming veterans plus backing from WhatsApp, Plato is available now on iOS & Android.\n\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg"}}},{"_id":"600104e0795bb30007b03379","order":16,"slug":"projects-merge-requests-and-other-updates","title":"Projects, Merge Requests, and other Updates","content":"<p>We&#39;ve made a few big changes to the dashboard and API recently:<br><br><strong>Projects</strong><br>Projects are a new way to connect Buckets for use with Merge Requests. To do merges between Buckets they must be in the same Project. If you have Buckets that were created prior to the Merge Request release, you can clone any Bucket to create a new Project.<br><br><strong>Clone Bucket from Settings</strong><br>You can now clone any Bucket from the settings area by going to <em>Settings &gt;&nbsp;</em><em>Basic Settings</em> in the left sidebar, scroll down, and click &quot;Clone Bucket&quot;. The Bucket will be cloned into the same Project (if it&#39;s not connected to a Project, a new one will be created).<br><br><strong>Merge Requests</strong></p><p><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><video autoplay=\"\" class=\"card-shadow lazy-load fr-fvc fr-dvi fr-draggable\" data-video=\"https://cdn.cosmicjs.com/de4dc920-51f1-11eb-9dee-df51ce912356-add-merge-request.mp4\" loop=\"\" muted=\"\" playsinline=\"\" style=\"width: 100%;\"><br></video></span><br><br>Merge Requests was the <a href=\"https://www.cosmicjs.com/blog/introducing-merge-requests\">big release</a> that we announced on Tuesday this week. Merge Requests enables you to do Git-like workflows for content. Perform bulk edits between Buckets, preview, include your team for approval workflows, and more.&nbsp;</p><p>With this feature becoming a first-class feature in the Cosmic workflow, we&#39;ve removed a <a href=\"https://www.cosmicjs.com/changelog/introducing-merge-for-environment-workflows\">previously released feature</a> to copy Objects to another Bucket from the Objects table.<br><br><strong>Merge Request Preview Link</strong><br>You now have the ability to add a Merge Request preview link to your Bucket by going to <em>Settings &gt; Basic Settings</em> and scrolling down to Merge Request Preview Link (only available on Buckets in a Project). This will be the default link added to all merge requests that make this Bucket the target Bucket.<br><br><strong>Webhooks</strong><br>There is a new webhook event available for <code>merge.completed</code>. This will only be triggered by the target Bucket. To set this up, in your Bucket go to <em>Settings &gt; Webhooks</em>. <a href=\"https://docs.cosmicjs.com/webhooks/#events\">See the docs</a> for more info.<br><br><strong>Singleton Object Type</strong><br>Object Types can now be a singleton. A singleton Object Type is any type of content that only has one Object. For example Home Page, Site Settings, etc. As opposed to Blog Posts, Pages, etc. which are multiple Object Types.<br><br><strong>API Updates</strong><br>You can now get Merge Request Objects from the API to perform diffs against Objects in your target Bucket. <a href=\"https://docs.cosmicjs.com/rest-api/objects.html#get-objects-from-merge-request-beta\">See the docs</a> for more info.</p><p><br></p><p>We hope you find these updates useful in your content workflows. It&#39;s our mission to make your use of Cosmic enjoyable and enables your team to do your best work. If you have any questions or comments, <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a>, and <a href=\"https://www.cosmicjs.com/community\">join us in Slack</a>.</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"uPl6BLpd6n","value":"2021-01-15"},{"children":null,"type":"object","title":"Author","key":"author","id":"HgezElzaMv","value":"5768b253163172890e00002c","object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"L91eCpCDKE","value":"","url":null,"imgix_url":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2021-01-15T02:58:40.145Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-15T15:51:42.578Z","created":"2021-01-15T02:58:40.145Z","status":"published","thumbnail":"","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2021-01-15T15:51:42.578Z","metadata":{"published_date":"2021-01-15","author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":null,"imgix_url":null}}},{"_id":"603e6214010e900007937350","order":17,"slug":"gatsby-vs-nextjs-which-framework-to-use-with-a-headless-cms","title":"Gatsby vs. Next.js: Which Framework to Use with a Headless CMS?","content":"<p><img src=\"https://imgix.cosmicjs.com/0bc852a0-827e-11eb-8b5d-951d83ec2ae4-gatsby-vs-next.png?w=10&auto=fomat\" data-image=\"https://imgix.cosmicjs.com/0bc852a0-827e-11eb-8b5d-951d83ec2ae4-gatsby-vs-next.png?w=2000&auto=fomat\" data-name=\"gatsby-vs-next.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib lazy-load\"></p><p>Creating websites and developing web applications is arguably easier than ever thanks to the broad number of open-source frameworks at your disposal. Whether you&rsquo;re developing a simple static website or an e-commerce platform designed to scale, you have plenty of framework options, including <a href=\"https://www.gatsbyjs.com/\">Gatsby</a> and <a href=\"https://nextjs.org/\">Next.js</a>.</p><p>Using web frameworks, you can develop viable websites much more efficiently than if you started from scratch. Moreover, by combining frameworks with a <a href=\"https://www.cosmicjs.com/blog/headless-cms-the-foundation-for-modern-digital-experiences\">headless Content Management System (CMS)</a>,\r\nyou get the best of both worlds. That is to say, a system that enables you to create and manage content at scale with a small performance footprint, alongside all the tools you need to create user-friendly website for users to interact with.</p><p>As powerful a combination as that is, you can&rsquo;t go ahead and use any framework alongside any headless CMS. Fortunately, both Gatsby and Next.js happen to be fantastic options to use alongside a headless CMS (<a href=\"https://www.cosmicjs.com/\">such as Cosmic</a>).</p><p>In this article, we&rsquo;re going to compare Gatsby vs. Next.js to help you choose the right framework for your next web project. We&rsquo;ll talk about how they handle data and render static websites. Then we&rsquo;ll go over headless CMS integration\r\nfor both frameworks. That way, you&rsquo;ll have all the information you need to make an informed decision.</p><h2>An Introduction to Gatsby and Next.js</h2><p>Both Gatsby and Next.js are among the most popular frameworks for websites and online applications. Some of the most popular websites in the world use Next.js, <a href=\"https://nextjs.org/showcase\">including Twitch, Hulu, and Nike</a>. Gatsby doesn&rsquo;t\r\nfall far behind, though, with plenty of household names attached to the framework, including IBM and PayPal.</p><p>It would be easy to say that both frameworks are so popular because they&rsquo;re based on React. Since its launch in 2011, React has become one of the web&rsquo;s most loved frameworks. That&rsquo;s not an exaggeration either, it actually beat out <a href=\"https://vuejs.org/\">Vue.js</a> in an internal <a href=\"https://insights.stackoverflow.com/survey/2019\">Stack Overflow survey in 2019</a> that asked developers what their favorite framework was.</p><p>Despite the fact that both Next.js and Gatsby share roots, they&rsquo;re very different frameworks with unique applications. In a nutshell, Gatsby combines React and GraphQL to provide you with a user-friendly tools that you can use for <a href=\"https://www.cosmicjs.com/blog/static-site-generators-explained-in-5-minutes\">static website generation</a>.</p><p>Next.js, on the other hand, generates HTML dynamically whenever your server gets a new request. That has an impact on website performance, but it&rsquo;s also necessary for dynamic websites. If your website has users, includes comments, or you sell products\r\nonline, static pages simply won&rsquo;t cut it.</p><h2>Gatsby vs Next.js: Which Framework Is Best for Static Content Generation?</h2><p>Now more than ever, we understand that site performance is critical when it comes to providing the best possible user experience. As much time and effort as you spend into optimizing your setup, dynamic websites, by design, can&rsquo;t match the sheer\r\nspeed of static pages.</p><p><em>If&nbsp;</em>you&rsquo;re working a website where you know you won&rsquo;t need to update pages often or use dynamic elements, a framework such as Gatsby is your best bet. Using Gatsby, you only load critical HTML, JavaScript, and CSS, which makes\r\nit a steamroller when it comes to performance.</p><p>The primary difference between Gatsby and Next.js is that the former generates HTML content on the client-side. That means if you use Gatsby to build your web application, your server doesn&rsquo;t need to render anything when it gets a request &ndash;\r\nit all happens during build or runtime time.&nbsp;</p><p>Next.js isn&rsquo;t necessarily a worse choice from a performance standpoint. However, the way the framework works (pardon the pun) means that whenever someone attempts to visit your website, your server generates the page that they&rsquo;ll see dynamically.</p><p>It&rsquo;s important to note that during recent updates, Next.js has made a lot of strides when it comes to static content generation. Next.js 9.3 introduced support for static side generation, which means the framework now also support build-time rendering.&nbsp;</p><p>That makes Next.js a great option both for dynamic and static websites. However, Gatsby still has an edge when it comes to the latter since it&rsquo;s baked into its DNA.</p><h2>Gatsby vs Next.js: How Each Framework Tackles Data Handling</h2><p>Gatsby has a structural advantage over Next.js as far as data security goes. However, that&rsquo;s because the framework doesn&rsquo;t fetch data from your server or a database. By their nature, static content generators are more secure, but that means\r\nyour options are limited if you need dynamic data handling.&nbsp;</p><p>For example, if you want to enable user registration, commenting, dynamic elements, and more, then you need to expand Gatsby&rsquo;s functionality. Fortunately, that&rsquo;s possible. The framework offers a lot of plugins that enable you to connect with\r\nCMSs such as WordPress and it also works with headless options (which we&rsquo;ll discuss in a minute).</p><p>One data-handling aspect where Gatsby does shine is when it comes to images. The framework comes with massive library of plugins that you can use to extend its functionality. For example, <a href=\"https://www.gatsbyjs.com/plugins/gatsby-image/\">Gatsby-images</a>enables\r\nyou to resize the images your visitors see at build time, which translates to faster loading times without it impacting server usage. Plus, it also includes lazy-loading functionality.</p><p>To put it another way, serving a static website doesn&rsquo;t mean that your pages will look boring. As we mentioned before, plenty of household-name companies use Gatsby, and if you check out their websites, you&rsquo;ll see they&rsquo;re far from being drab.</p><p>Next.js, on the other hand, is capable of data handling. However, just like with Gatsby, you need to set up a backend solution that can actually manage the data and content Next.js uses to generate pages dynamically.</p><h2>Why Use Gatsby or Next.js With a Headless CMS</h2><p>The concept of a headless CMS is simple. You take what is arguably the best part of a CMS, which is content management and generation, and use that as the backend for your web projects. That frees you up to use any approach that you want when it comes\r\nto the frontend, which includes using React frameworks such as Gatsby and Next.js.</p><p>So far, we&rsquo;ve gone over a lot of the upsides and downsides of using Next.js and Gatsby. Using the right headless CMS, you can make up for a lot of either framework&rsquo;s downsides. Let&rsquo;s break down how:</p><ul><li><strong>Content creation and management.&nbsp;</strong>With the right CMS, you get powerful features that enable you to create, edit, and publish content more efficiently. You use your preferred framework for rendering, but get access to a user-friendly\r\nCMS for everything else.</li><li><strong>Data handling.&nbsp;</strong>CMSs provide data-handling solutions for both Gatsby and Next.js.&nbsp;</li><li><strong>Scalability.&nbsp;</strong>Instead of generating and maintaining each page manually from the ground up, a CMS provides you with tools to ensure that you can manage data efficiently.</li></ul><p>The whole point of using a headless CMS in combination with a React framework is to provide you with a flexible setup that adapts to whichever type of project you intend to develop. With the right headless CMS, you can launch any type of website, from\r\na simple blog to an online store, and use your preferred React framework to power its frontend.&nbsp;</p><p>There are plenty of options when it comes to headless CMS integrations for both Gatsby and Next.js. However, Cosmic provides built-in support and functionality for both frameworks.</p><p>If you want to use Next.js, you can <a href=\"https://docs.cosmicjs.com/guides/#next-js\">create a Next.js app</a> and install the Cosmic NPM module in a matter of minutes. Launching a project that combines Cosmic with Gatsby is equally as simple, since there&rsquo;s a <a href=\"https://www.npmjs.com/package/gatsby-source-cosmicjs\">Cosmic source plugin</a> for the framework.</p><p>With Cosmic, you get a cloud headless solution that works with most popular frameworks. The headless CMS provides both a GraphQL and a REST API, which makes it an incredibly versatile solution.</p><h2>When to Use Gatsby vs Next.js (And Vice Versa)</h2><p>Although both Gatsby and Next.js are fantastic framework options to use alongside a headless CMS, they&rsquo;re not interchangeable solutions. Let&rsquo;s go over which framework you should use depending on the type of project that you&rsquo;re working on:</p><ol><li><strong>Gatsby.&nbsp;</strong>This framework&rsquo;s strength lies in its unmatched static site generating performance. Although using a headless CMS can make up for a lot of features that it doesn&rsquo;t offer out of the box, Gatsby is perhaps not the\r\nbest option for client-side applications or websites that require massive amounts of dynamic content.</li><li><strong>Next.js.&nbsp;</strong>If you&rsquo;re working on a project that&rsquo;s about as far as you can get from static, Next.js definitely has an advantage over Gatsby. When you combine its features with a headless CMS, you get a stack that&rsquo;s\r\nabout as flexible as it gets.</li></ol><p>Overall, which framework to use comes down to the type of project you&rsquo;re working on. If you use Cosmic, though, you can easily switch between frameworks for each new project and still get to use the same backend.</p><p><strong>If you&rsquo;re ready to check out what a headless CMS platform can enable you to do, try out Cosmic. We offer a&nbsp;</strong><a href=\"https://www.cosmicjs.com/pricing\"><strong>free Personal plan</strong></a><strong>&nbsp;that use can use to check out the platform.</strong></p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"NDf7ygGJWw","value":"5f5fac071936450007d8a01c","required":true,"object_type":"authors","object":{"_id":"5f5fac071936450007d8a01c","slug":"kyle-meagher","title":"Kyle Meagher","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"hsMOJCxIAj","value":"kylemeags"},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D2rdKO4lEL","value":"e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2020-09-14T17:44:39.110Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-14T17:45:09.251Z","created":"2020-09-14T17:44:39.110Z","status":"published","published_at":"2020-09-14T17:44:39.110Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"GFh5e6tyyO","value":"<p>Both Gatsby and Next.js are among the most popular frameworks for websites and online applications. In this article, we&rsquo;re going to compare Gatsby vs. Next.js to help you choose the right framework for your next web project. We&rsquo;ll talk about how they handle data and render static websites.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"kChVGp4bhW","value":"0bc852a0-827e-11eb-8b5d-951d83ec2ae4-gatsby-vs-next.png","url":"https://cdn.cosmicjs.com/0bc852a0-827e-11eb-8b5d-951d83ec2ae4-gatsby-vs-next.png","imgix_url":"https://imgix.cosmicjs.com/0bc852a0-827e-11eb-8b5d-951d83ec2ae4-gatsby-vs-next.png"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"qw6qXnGwwk","value":"Gatsby and Next.js are among the most popular frameworks for websites and online applications. In this article, we’re going to compare Gatsby vs. Next.js to help you choose the right framework for your next web project."},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"oJLTCRhQnn","value":"2021-03-12"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2021-03-02T16:04:36.283Z","created_by":"5357ef811693be2118000001","modified_at":"2021-03-12T20:49:34.383Z","created":"2021-03-02T16:04:36.283Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/0bc852a0-827e-11eb-8b5d-951d83ec2ae4-gatsby-vs-next.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2021-03-12T20:49:34.383Z","metadata":{"author":{"_id":"5f5fac071936450007d8a01c","slug":"kyle-meagher","title":"Kyle Meagher","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"hsMOJCxIAj","value":"kylemeags"},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D2rdKO4lEL","value":"e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2020-09-14T17:44:39.110Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-14T17:45:09.251Z","created":"2020-09-14T17:44:39.110Z","status":"published","published_at":"2020-09-14T17:44:39.110Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","metadata":{"username":"kylemeags","profile_picture":{"url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}}},"teaser":"<p>Both Gatsby and Next.js are among the most popular frameworks for websites and online applications. In this article, we&rsquo;re going to compare Gatsby vs. Next.js to help you choose the right framework for your next web project. We&rsquo;ll talk about how they handle data and render static websites.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/0bc852a0-827e-11eb-8b5d-951d83ec2ae4-gatsby-vs-next.png","imgix_url":"https://imgix.cosmicjs.com/0bc852a0-827e-11eb-8b5d-951d83ec2ae4-gatsby-vs-next.png"},"seo_meta_description":"Gatsby and Next.js are among the most popular frameworks for websites and online applications. In this article, we’re going to compare Gatsby vs. Next.js to help you choose the right framework for your next web project.","published_date":"2021-03-12"}},{"_id":"5c3774946bcb7526c0bddbe7","order":17,"slug":"dreamwalks-decoupled-approach-to-content-management","title":"DreamWalk's Decoupled Approach to Content Management","content":"<p>With a list of chart-topping apps to their name and a long history of mobile innovation, <a href=\"https://dreamwalk.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">DreamWalk</a> is the App Development agency trusted by some of the world&rsquo;s biggest brands and most ambitious startups. With clients like Coca-Cola&reg;, New Mexico Tourism and BP, DreamWalk is among the longest standing and most trusted app development firms in Australia.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/73d7c690-1562-11e9-829a-87a2ed6f5067-dreamwalk-cosmic-case-study-banner.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">The team at DreamWalk was in search of a headless CMS that would speed up their development cycles. They needed to empower their developers with flexibility out-of-the-box while enabling their content managers to manage content in a web-based Dashboard. They chose Cosmic due to its easy content modeling tools that allowed them to set up client projects more quickly and easily than before, adding to their bottom line and expanding the tools available in their digital toolkit.</p><p dir=\"ltr\"><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/5013b550-14f6-11e9-b55d-3354984e810c-DreamWalk.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;At DreamWalk we always strive to give our clients the best possible customer experience. Cosmic enables us to work within tight budgets without compromising on that great experience.&quot;</p><cite>&mdash; Karl Graf, Director and Mobile App Strategist</cite></blockquote>","metafields":[{"value":"DreamWalk","key":"company","title":"Company","type":"text","children":null},{"value":"App Development Agency","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"With a list of chart-topping apps to their name and a long history of mobile innovation, DreamWalk is the App Development agency trusted by some of the world’s biggest brands and most ambitious startups. With clients like Coca-Cola®, New Mexico Tourism and BP, DreamWalk is among the longest standing and most trusted app development firms in Australia. \n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"f891dd10-14f6-11e9-ac3b-29773f4ac49e-A0Vz6NqU_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f891dd10-14f6-11e9-ac3b-29773f4ac49e-A0Vz6NqU_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/f891dd10-14f6-11e9-ac3b-29773f4ac49e-A0Vz6NqU_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2019-01-10T16:36:36.690Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-01-11T16:56:26.753Z","metadata":{"company":"DreamWalk","industry_type":"App Development Agency","teaser":"With a list of chart-topping apps to their name and a long history of mobile innovation, DreamWalk is the App Development agency trusted by some of the world’s biggest brands and most ambitious startups. With clients like Coca-Cola®, New Mexico Tourism and BP, DreamWalk is among the longest standing and most trusted app development firms in Australia. \n\n\n","logo":{"url":"https://cdn.cosmicjs.com/f891dd10-14f6-11e9-ac3b-29773f4ac49e-A0Vz6NqU_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/f891dd10-14f6-11e9-ac3b-29773f4ac49e-A0Vz6NqU_400x400.jpg"}}},{"_id":"5fa9be3663b5b6000700adf3","order":17,"slug":"dashboard-experience-updates","title":"Dashboard Experience Updates","content":"<p>We&#39;ve got some dashboard updates that should make things in your content management world a little better.</p><p>The updates include:</p><ol><li>Updated experience for selecting and reordering Object Metafields</li><li>Object Type edit form updates</li><li>Collapsable Metafields</li></ol><p><br></p><p><strong>Object Metafields Update</strong><br>Object Metafields are a powerful tool in your Cosmic toolkit. They are used to connect Objects to create flexible content relationships. Selecting and reordering Object Metafields is now much easier thanks to a design update which includes vertical-only\r\nsorting and visible Object thumbnails. See the video below:</p><p><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi\" loop=\"\" muted=\"\" playsinline=\"\" src=\"https://cdn.cosmicjs.com/2eeb9210-22d9-11eb-ba14-552468e9115a-ObjectMetafields.mp4\" style=\"width: 100%;\">Your browser does not support HTML5 video.</video></span></p><p><br></p><p><strong>Object Type Form Updates</strong><br>Adding and editing your Object Type content model and settings is now easier thanks in part to compressing Metafields and a new fixed save button for convenient saving.</p><p><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi\" loop=\"\" muted=\"\" playsinline=\"\" src=\"https://cdn.cosmicjs.com/96f5c970-22d9-11eb-ba14-552468e9115a-ObjectTypeUpdates.mp4\" style=\"width: 100%;\">Your browser does not support HTML5 video.</video></span></p><p>We hope you like the new updates feature to help you use the content management dashboard with greater ease. &nbsp;Please let us know if you have any questions / comments in our <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Slack channel</a>, and <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a> for the latest updates to the Cosmic <a href=\"https://www.cosmicjs.com/headless-cms\">Headless CMS</a>.</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"OdyH7N3KKj","value":"2020-11-10"},{"children":null,"type":"object","title":"Author","key":"author","id":"xeRzWHtiJY","value":"5768b253163172890e00002c","object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"QszC4Y1Nnb","value":"","url":null,"imgix_url":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2020-11-09T22:09:58.127Z","created_by":"5357ef811693be2118000001","modified_at":"2020-12-22T20:17:56.607Z","created":"2020-11-09T22:09:58.127Z","status":"published","thumbnail":"","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2020-12-22T20:17:56.607Z","metadata":{"published_date":"2020-11-10","author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":null,"imgix_url":null}}},{"_id":"5768b27f163172890e00002e","order":17,"slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},{"_id":"5d4c21273f5dd45886228dbf","slug":"content-management-system-for-company-websites","title":"Content Management System for Company Websites","content":"<p>Cosmic JS provides a flexible and scalable content management system for developers and content creators managing content for company websites. Companies manage their content using the Cosmic JS Content Management System because it&rsquo;s intuitive to manage content, approval workflows and team members. With features like Revision History, Content Preview and Scheduled Publishing, your team can build apps and manage content faster, together.&nbsp;</p><h3><br>What is Headless CMS Software?</h3><p>Headless CMS Software works by providing non-technical editors with a Dashboard UI to model, create and publish content while providing developers with API tools and resources to integrate content with any website or app. By decoupling content from code, teams create a central content repository that can power all of their content-powered applications.&nbsp;</p>","metafields":[{"value":"Content Management System for Company Websites","key":"solution_name","title":"Solution Name","type":"text","children":null},{"value":"1f543a50-b9df-11e9-a1f9-995c7306bb69-abe9e700-9dc2-11e9-a5b4-e5df9f8049d3-tripwire.png","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/1f543a50-b9df-11e9-a1f9-995c7306bb69-abe9e700-9dc2-11e9-a5b4-e5df9f8049d3-tripwire.png","imgix_url":"https://imgix.cosmicjs.com/1f543a50-b9df-11e9-a1f9-995c7306bb69-abe9e700-9dc2-11e9-a5b4-e5df9f8049d3-tripwire.png"},{"object_type":"case-studies","value":"5c8a83a0792f9825b48d8133,5bd88cc2dcf8c4248f3ccc4b,5b86a2c6016461100076e5c7","key":"case_studies","title":"Case Studies","type":"objects","children":null,"objects":[{"_id":"5c8a83a0792f9825b48d8133","slug":"movespring-delivers-health-resources-using-cosmic-js","title":"MoveSpring Delivers Health Resources using Cosmic","content":"<p dir=\"ltr\"><a href=\"https://movespring.com\" rel=\"noopener noreferrer\" target=\"_blank\">MoveSpring</a> is a fun, easy-to-use activity and steps challenge platform. Step your way to success with quick onboarding, real-time scoring, and flexible plan options. MoveSpring is used by organizations like Best Buy, Deloitte and the American Cancer Society to make health a priority, and fun, for their employees.&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/151c3220-4678-11e9-bbe9-d7e354f499a1-MoveSpring.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">MoveSpring manages multiple content resource sections for its users, broken out by Product, Wellness, Tips and Tricks as well as Technology. The team needed a way to easily add blog and help sections that a non-technical content creator could manage. They were able to quickly model and create their content, integrate the content with their website and add their content creators to start publishing and managing dynamic content.&nbsp;</p><p dir=\"ltr\"><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/2e47ad60-4678-11e9-939f-33137870c12d-product-hero-image2x.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&quot;We previously used WordPress for our blog content, but found that we really wanted to utilize the same toolset (React / GraphQL) and have the same look and feel as the rest of our site, which can be challenging for a developer not familiar with WordPress.&nbsp;</p><p>Additionally, we have other dynamic content we would like our Customer Success Managers and Sales team to drive without relying on our development team to build and deploy. After discovering Cosmic, our developer was able to get our new blog up and running within days. Cosmic worked exactly how we hoped it would.&rdquo;</p><p><cite>&mdash; John Contreras, CEO &nbsp;</cite></p></blockquote>","metafields":[{"children":null,"type":"text","title":"Company","key":"company","id":"g8E7TAzNzb","value":"MoveSpring"},{"children":null,"type":"text","title":"Industry Type","key":"industry_type","id":"IazxVO2F44","value":"Health and Wellness"},{"children":null,"type":"textarea","title":"Teaser","key":"teaser","id":"MdNSCJJ6KM","value":"From the creators of Stridekick, MoveSpring is a fun, easy-to-use activity challenge platform. Step your way to success with quick onboarding, real-time scoring, and flexible plan options. MoveSpring is used by organizations like Best Buy, Deloitte and the American Cancer Society to make health a priority, and fun, for their employees. \n\n\n\n"},{"children":null,"type":"file","title":"Logo","key":"logo","id":"z7uTNVr5hZ","value":"ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg","url":"https://cdn.cosmicjs.com/ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg"},{"children":null,"type":"text","title":"Redirect Path","key":"redirect_path","id":"th15yqrwkhn0ja4ft3co","value":"/customers/movespring"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2019-03-14T16:38:56.354Z","status":"published","modified_at":"2020-11-05T20:43:27.287Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-11-05T20:43:27.287Z","unpublish_at":null},{"_id":"5bd88cc2dcf8c4248f3ccc4b","slug":"tripwire-interactive-builds-a-react-corporate-website","title":"Tripwire Interactive Builds a React Corporate Website","content":"<p dir=\"ltr\">Tripwire Interactive is an entertainment software developer and publisher founded in 2005 by the award-winning mod team and winners of the 2004 edition of the &ldquo;$1,000,000 Make Something Unreal&rdquo; competition.</p><p dir=\"ltr\"><br><img src=\"https://cosmic-s3.imgix.net/1e7ac570-e363-11e8-8e9f-c7fa3cdb2209-Tripwire.png?w=1200\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"><br></p><p dir=\"ltr\">Gamers want games that grab their attention and will keep them coming back for more. <a href=\"https://www.tripwireinteractive.com/#/#top\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a> has been producing those types of games since the first Red Orchestra mod that won the &quot;Make Something Unreal&quot; competition in 2004. Since then Tripwire has won numerous Multiplayer and FPS Game of the Year awards from top editorial sites and millions have played a Red Orchestra or Killing Floor game, with an average play time of over 40 hours, per player, per game!&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://cosmic-s3.imgix.net/ec4f9940-dc64-11e8-9094-a112ce16fea9-40953819_2090843480937681_5517411053975109632_o.jpg?w=1200&quot;\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"><br></p><p dir=\"ltr\">Historically using an Umbraco system, The Tripwire Interactive team needed an easy way for their marketers to maintain marketing website content for their games&#39; parent brand. Each new game needed a dedicated landing page with marketing content. Blog,\r\nCareer and Press feeds needed to be managed by the marketing team without bottlenecking the developers. The Tripwire Interactive team chose Cosmic as their dynamic content management solution as they built their new corporate website on a modern React\r\nstack.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team\r\nhas been enjoying the ease of use with the new system.&quot;</p><p><cite>&mdash; Owen Liversidge, Lead Developer</cite></p></blockquote><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/297454e0-e387-11e8-89c3-0b430965f348-ezgif-4-5e5da2b90b13.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"Tripwire Interactive","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Gamers want games that grab their attention and will keep them coming back for more. Tripwire Interactive has been producing those types of games since the first Red Orchestra mod that won the \"Make Something Unreal\" competition in 2004. Since then Tripwire has won numerous Multiplayer and FPS Game of the Year awards from top editorial sites and millions have played a Red Orchestra or Killing Floor game, with an average play time of over 40 hours, per player, per game! \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-30T16:54:26.538Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-11-08T20:12:40.566Z"},{"_id":"5b86a2c6016461100076e5c7","slug":"consolidating-the-content-chaos-tac-switches-from-wordpress-to-cosmic-js","title":"Consolidating the Content Chaos: TAC Switches from WordPress to Cosmic","content":"<p>TAC - <a href=\"https://thearnoldcos.com\" rel=\"noopener noreferrer\" target=\"_blank\">The Arnold Companies</a> is among the largest fuel wholesalers and aviation service providers in the country. Steady growth, positive financial results and a diverse industry base consistently make TAC one of the top private companies in the US. TAC is made up of many separate brands under one corporate identity, including <a href=\"https://thearnoldcos.com/tac-energy\" rel=\"noopener noreferrer\" target=\"_blank\">TAC Energy</a>, <a href=\"https://thearnoldcos.com/tac-air\" rel=\"noopener noreferrer\" target=\"_blank\">TAC Air</a> and <a href=\"https://thearnoldcos.com/keystone-aviation\" rel=\"noopener noreferrer\" target=\"_blank\">Keystone Aviation</a>.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1edc4420-03d5-11e9-b2e6-ef985cd5a622-TAC_Air.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>With TAC&#39;s old website built as stand-alone sites that linked to each other on a WordPress foundation, the user experience was over-complicated and required too many steps for visitors to find what they were looking for. Being WordPress-based, it did not allow for clear information architecture to promote the different business lines within the portfolio.&nbsp;</p><p>Through a structured RFP process to identify a partner in re-thinking the customer experience and content management system, interactive agency <a href=\"https://simplemedia.co\" rel=\"noopener noreferrer\" target=\"_blank\">Simple Media</a> and Cosmic were selected. Other platform options included WordPress, Drupal, and Joomla.&nbsp;</p><p>Focused on building with a mobile-first approach and consolidating the chaos of the existing number of brand sites to bring harmony to the four brands and ease-of-use in content management, TAC found an outstanding and simple solution in Cosmic.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/28c0eb80-03d5-11e9-b2e6-ef985cd5a622-TAC_Air2.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>To learn more about the development, Brandon Reid, Lead Developer on the project breaks down the stack:&nbsp;</p><p><strong>Development Team:</strong> &quot;TAC&rsquo;s backend is powered by Node, Next.js, and Express. Next.js is used for server side rendering capabilities for SEO optimization as well as site routing. Next.js also makes it easy to integrate with Babel and Webpack since they are built right in. The team used Next.js routing API to rendering page templates for pages that have the same design layouts. TAC&rsquo;s frontend is powered by React.js and the world&#39;s most popular react UI framework, Material UI. In order to use Material UI with SSR, the team had to wrap the site in a JSSProvider and use CSSBaseline. For development they used Eslint as a linter for a cleaner and more consistent codebase.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/9bc8cba0-03e6-11e9-9a9a-9b696b7d5c75-Fuel-Tanker-Truck.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Since TAC uses ES6 JavaScript, the team had to also implement a very small amount of polyfill to transpile ES6 to ES5 in order for the site to work with IE11. Some notable node modules used were:&nbsp;</p><ul><li>React-Image-Gallery for the image galleries across the site</li><li>React-Masonry-Component for the newsroom</li><li>Fetch for API requests</li><li>For email services/API the team used Nodemailer and Mailgun</li></ul><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7c547000-b079-11e8-966b-171c4c72e338-IMG_4405.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>TAC&#39;s development team started building the site by using Cosmic&rsquo;s React Starter, which helped them get jump-started right away. Building TAC started with implementing all globals for the site (Header, Footer, Favicon, etc), so the developers quickly created some JavaScript request functions to pull data from the Cosmic Buckets using Cosmic&rsquo;s Node API. The team added those global components to the sites main _app layout, so every page would be wrapped and rendered with those globals. From there they analyzed what pages would have reusable components across multiple pages or the site, and created component views for those pages based off their analysis.&nbsp;</p><p>TAC was then able to efficiently knock out page designs and implement object types in the Cosmic bucket on the fly. As TAC got closer to site launch, they noticed compatibility issues with IE11 and had to come up with a solution. At first, they were going to do a browser sniff in the codebase to display something that would work on IE. Instead, the team implemented Babel and some polyfills to solve their &nbsp;compatibility issues.&quot;</p><p style=\"text-align: center;\"><br></p><p><br></p><p style=\"text-align: center;\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7d6520b0-b04d-11e8-8760-cbfd96ceee1a-ezgif-4-42d2daea45.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&quot;Our goal in this project was not to reinvent the brands, but to simplify the communication and process for website content management. Cosmic has allowed us to become current in our presentation and relevant in our content push. Plus, the site is easier to use for visitors and staff alike.&quot;</p><p><cite>&mdash; Tad Perryman, VP of Marketing, TAC - The Arnold Companies</cite></p></blockquote>","metafields":[{"value":"The Arnold Companies","key":"company","title":"Company","type":"text","children":null},{"value":"Energy / Aviation","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"TAC - The Arnold Companies is among the largest fuel wholesalers and aviation service providers in the country. Steady growth, positive financial results and a diverse industry base consistently make TAC one of the top private companies in the US. TAC is made up of many separate brands under one corporate identity, including TAC Energy, TAC Air and Keystone Aviation. \n\n\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg","imgix_url":"https://imgix.cosmicjs.com/9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-01T22:26:36.367Z","created_by":"5716b504e9c686d006000073","created":"2018-08-29T13:42:30.982Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-12-20T14:40:21.379Z"}]},{"repeater_fields":"\"\"\"\"\"\"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\"\"\"\"\"\"\"","value":"single-page-sales-funnel","key":"app_slugs","title":"App Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"single-page-sales-funnel","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"appointment-scheduler","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"angular-company-website","type":"text","required":false}]}]},{"repeater_fields":"\"\"\"\"\"\"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\"\"\"\"\"\"\"","value":"contact-form","key":"extension_slugs","title":"Extension Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"contact-form","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"unsplash-photos","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"wordpress-importer","type":"text","required":false}]}]},{"key":"testimonial","title":"Testimonial","type":"html-textarea","children":null,"value":"<p>&ldquo;Leveraging the Cosmic JS GraphQL API allows for easy updates to our news and blog, while keeping payloads small and fast. Integration with Cosmic JS could not be easier thanks to their great support. We look forward to developing more features on the platform.&rdquo;</p>"},{"value":"Dustin Brink, Front End Developer at Derive Systems","key":"testimonial_credit","title":"Testimonial Credit","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created":"2019-08-08T13:18:31.681Z","created_at":"2019-07-08T14:58:50.360Z","modified_at":"2019-08-08T13:22:31.225Z","status":"published","locale":null,"published_at":"2019-08-08T13:22:31.225Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"order":17,"metadata":{"solution_name":"Content Management System for Company Websites","image":{"url":"https://cdn.cosmicjs.com/1f543a50-b9df-11e9-a1f9-995c7306bb69-abe9e700-9dc2-11e9-a5b4-e5df9f8049d3-tripwire.png","imgix_url":"https://imgix.cosmicjs.com/1f543a50-b9df-11e9-a1f9-995c7306bb69-abe9e700-9dc2-11e9-a5b4-e5df9f8049d3-tripwire.png"},"case_studies":[{"_id":"5c8a83a0792f9825b48d8133","slug":"movespring-delivers-health-resources-using-cosmic-js","title":"MoveSpring Delivers Health Resources using Cosmic","content":"<p dir=\"ltr\"><a href=\"https://movespring.com\" rel=\"noopener noreferrer\" target=\"_blank\">MoveSpring</a> is a fun, easy-to-use activity and steps challenge platform. Step your way to success with quick onboarding, real-time scoring, and flexible plan options. MoveSpring is used by organizations like Best Buy, Deloitte and the American Cancer Society to make health a priority, and fun, for their employees.&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/151c3220-4678-11e9-bbe9-d7e354f499a1-MoveSpring.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">MoveSpring manages multiple content resource sections for its users, broken out by Product, Wellness, Tips and Tricks as well as Technology. The team needed a way to easily add blog and help sections that a non-technical content creator could manage. They were able to quickly model and create their content, integrate the content with their website and add their content creators to start publishing and managing dynamic content.&nbsp;</p><p dir=\"ltr\"><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/2e47ad60-4678-11e9-939f-33137870c12d-product-hero-image2x.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&quot;We previously used WordPress for our blog content, but found that we really wanted to utilize the same toolset (React / GraphQL) and have the same look and feel as the rest of our site, which can be challenging for a developer not familiar with WordPress.&nbsp;</p><p>Additionally, we have other dynamic content we would like our Customer Success Managers and Sales team to drive without relying on our development team to build and deploy. After discovering Cosmic, our developer was able to get our new blog up and running within days. Cosmic worked exactly how we hoped it would.&rdquo;</p><p><cite>&mdash; John Contreras, CEO &nbsp;</cite></p></blockquote>","metafields":[{"children":null,"type":"text","title":"Company","key":"company","id":"g8E7TAzNzb","value":"MoveSpring"},{"children":null,"type":"text","title":"Industry Type","key":"industry_type","id":"IazxVO2F44","value":"Health and Wellness"},{"children":null,"type":"textarea","title":"Teaser","key":"teaser","id":"MdNSCJJ6KM","value":"From the creators of Stridekick, MoveSpring is a fun, easy-to-use activity challenge platform. Step your way to success with quick onboarding, real-time scoring, and flexible plan options. MoveSpring is used by organizations like Best Buy, Deloitte and the American Cancer Society to make health a priority, and fun, for their employees. \n\n\n\n"},{"children":null,"type":"file","title":"Logo","key":"logo","id":"z7uTNVr5hZ","value":"ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg","url":"https://cdn.cosmicjs.com/ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg"},{"children":null,"type":"text","title":"Redirect Path","key":"redirect_path","id":"th15yqrwkhn0ja4ft3co","value":"/customers/movespring"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2019-03-14T16:38:56.354Z","status":"published","modified_at":"2020-11-05T20:43:27.287Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-11-05T20:43:27.287Z","unpublish_at":null,"metadata":{"company":"MoveSpring","industry_type":"Health and Wellness","teaser":"From the creators of Stridekick, MoveSpring is a fun, easy-to-use activity challenge platform. Step your way to success with quick onboarding, real-time scoring, and flexible plan options. MoveSpring is used by organizations like Best Buy, Deloitte and the American Cancer Society to make health a priority, and fun, for their employees. \n\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg"},"redirect_path":"/customers/movespring"}},{"_id":"5bd88cc2dcf8c4248f3ccc4b","slug":"tripwire-interactive-builds-a-react-corporate-website","title":"Tripwire Interactive Builds a React Corporate Website","content":"<p dir=\"ltr\">Tripwire Interactive is an entertainment software developer and publisher founded in 2005 by the award-winning mod team and winners of the 2004 edition of the &ldquo;$1,000,000 Make Something Unreal&rdquo; competition.</p><p dir=\"ltr\"><br><img src=\"https://cosmic-s3.imgix.net/1e7ac570-e363-11e8-8e9f-c7fa3cdb2209-Tripwire.png?w=1200\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"><br></p><p dir=\"ltr\">Gamers want games that grab their attention and will keep them coming back for more. <a href=\"https://www.tripwireinteractive.com/#/#top\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a> has been producing those types of games since the first Red Orchestra mod that won the &quot;Make Something Unreal&quot; competition in 2004. Since then Tripwire has won numerous Multiplayer and FPS Game of the Year awards from top editorial sites and millions have played a Red Orchestra or Killing Floor game, with an average play time of over 40 hours, per player, per game!&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://cosmic-s3.imgix.net/ec4f9940-dc64-11e8-9094-a112ce16fea9-40953819_2090843480937681_5517411053975109632_o.jpg?w=1200&quot;\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"><br></p><p dir=\"ltr\">Historically using an Umbraco system, The Tripwire Interactive team needed an easy way for their marketers to maintain marketing website content for their games&#39; parent brand. Each new game needed a dedicated landing page with marketing content. Blog,\r\nCareer and Press feeds needed to be managed by the marketing team without bottlenecking the developers. The Tripwire Interactive team chose Cosmic as their dynamic content management solution as they built their new corporate website on a modern React\r\nstack.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team\r\nhas been enjoying the ease of use with the new system.&quot;</p><p><cite>&mdash; Owen Liversidge, Lead Developer</cite></p></blockquote><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/297454e0-e387-11e8-89c3-0b430965f348-ezgif-4-5e5da2b90b13.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"Tripwire Interactive","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Gamers want games that grab their attention and will keep them coming back for more. Tripwire Interactive has been producing those types of games since the first Red Orchestra mod that won the \"Make Something Unreal\" competition in 2004. Since then Tripwire has won numerous Multiplayer and FPS Game of the Year awards from top editorial sites and millions have played a Red Orchestra or Killing Floor game, with an average play time of over 40 hours, per player, per game! \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-30T16:54:26.538Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-11-08T20:12:40.566Z","metadata":{"company":"Tripwire Interactive","industry_type":"Gaming","teaser":"Gamers want games that grab their attention and will keep them coming back for more. Tripwire Interactive has been producing those types of games since the first Red Orchestra mod that won the \"Make Something Unreal\" competition in 2004. Since then Tripwire has won numerous Multiplayer and FPS Game of the Year awards from top editorial sites and millions have played a Red Orchestra or Killing Floor game, with an average play time of over 40 hours, per player, per game! \n","logo":{"url":"https://cdn.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg"}}},{"_id":"5b86a2c6016461100076e5c7","slug":"consolidating-the-content-chaos-tac-switches-from-wordpress-to-cosmic-js","title":"Consolidating the Content Chaos: TAC Switches from WordPress to Cosmic","content":"<p>TAC - <a href=\"https://thearnoldcos.com\" rel=\"noopener noreferrer\" target=\"_blank\">The Arnold Companies</a> is among the largest fuel wholesalers and aviation service providers in the country. Steady growth, positive financial results and a diverse industry base consistently make TAC one of the top private companies in the US. TAC is made up of many separate brands under one corporate identity, including <a href=\"https://thearnoldcos.com/tac-energy\" rel=\"noopener noreferrer\" target=\"_blank\">TAC Energy</a>, <a href=\"https://thearnoldcos.com/tac-air\" rel=\"noopener noreferrer\" target=\"_blank\">TAC Air</a> and <a href=\"https://thearnoldcos.com/keystone-aviation\" rel=\"noopener noreferrer\" target=\"_blank\">Keystone Aviation</a>.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1edc4420-03d5-11e9-b2e6-ef985cd5a622-TAC_Air.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>With TAC&#39;s old website built as stand-alone sites that linked to each other on a WordPress foundation, the user experience was over-complicated and required too many steps for visitors to find what they were looking for. Being WordPress-based, it did not allow for clear information architecture to promote the different business lines within the portfolio.&nbsp;</p><p>Through a structured RFP process to identify a partner in re-thinking the customer experience and content management system, interactive agency <a href=\"https://simplemedia.co\" rel=\"noopener noreferrer\" target=\"_blank\">Simple Media</a> and Cosmic were selected. Other platform options included WordPress, Drupal, and Joomla.&nbsp;</p><p>Focused on building with a mobile-first approach and consolidating the chaos of the existing number of brand sites to bring harmony to the four brands and ease-of-use in content management, TAC found an outstanding and simple solution in Cosmic.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/28c0eb80-03d5-11e9-b2e6-ef985cd5a622-TAC_Air2.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>To learn more about the development, Brandon Reid, Lead Developer on the project breaks down the stack:&nbsp;</p><p><strong>Development Team:</strong> &quot;TAC&rsquo;s backend is powered by Node, Next.js, and Express. Next.js is used for server side rendering capabilities for SEO optimization as well as site routing. Next.js also makes it easy to integrate with Babel and Webpack since they are built right in. The team used Next.js routing API to rendering page templates for pages that have the same design layouts. TAC&rsquo;s frontend is powered by React.js and the world&#39;s most popular react UI framework, Material UI. In order to use Material UI with SSR, the team had to wrap the site in a JSSProvider and use CSSBaseline. For development they used Eslint as a linter for a cleaner and more consistent codebase.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/9bc8cba0-03e6-11e9-9a9a-9b696b7d5c75-Fuel-Tanker-Truck.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Since TAC uses ES6 JavaScript, the team had to also implement a very small amount of polyfill to transpile ES6 to ES5 in order for the site to work with IE11. Some notable node modules used were:&nbsp;</p><ul><li>React-Image-Gallery for the image galleries across the site</li><li>React-Masonry-Component for the newsroom</li><li>Fetch for API requests</li><li>For email services/API the team used Nodemailer and Mailgun</li></ul><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7c547000-b079-11e8-966b-171c4c72e338-IMG_4405.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>TAC&#39;s development team started building the site by using Cosmic&rsquo;s React Starter, which helped them get jump-started right away. Building TAC started with implementing all globals for the site (Header, Footer, Favicon, etc), so the developers quickly created some JavaScript request functions to pull data from the Cosmic Buckets using Cosmic&rsquo;s Node API. The team added those global components to the sites main _app layout, so every page would be wrapped and rendered with those globals. From there they analyzed what pages would have reusable components across multiple pages or the site, and created component views for those pages based off their analysis.&nbsp;</p><p>TAC was then able to efficiently knock out page designs and implement object types in the Cosmic bucket on the fly. As TAC got closer to site launch, they noticed compatibility issues with IE11 and had to come up with a solution. At first, they were going to do a browser sniff in the codebase to display something that would work on IE. Instead, the team implemented Babel and some polyfills to solve their &nbsp;compatibility issues.&quot;</p><p style=\"text-align: center;\"><br></p><p><br></p><p style=\"text-align: center;\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7d6520b0-b04d-11e8-8760-cbfd96ceee1a-ezgif-4-42d2daea45.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&quot;Our goal in this project was not to reinvent the brands, but to simplify the communication and process for website content management. Cosmic has allowed us to become current in our presentation and relevant in our content push. Plus, the site is easier to use for visitors and staff alike.&quot;</p><p><cite>&mdash; Tad Perryman, VP of Marketing, TAC - The Arnold Companies</cite></p></blockquote>","metafields":[{"value":"The Arnold Companies","key":"company","title":"Company","type":"text","children":null},{"value":"Energy / Aviation","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"TAC - The Arnold Companies is among the largest fuel wholesalers and aviation service providers in the country. Steady growth, positive financial results and a diverse industry base consistently make TAC one of the top private companies in the US. TAC is made up of many separate brands under one corporate identity, including TAC Energy, TAC Air and Keystone Aviation. \n\n\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg","imgix_url":"https://imgix.cosmicjs.com/9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-01T22:26:36.367Z","created_by":"5716b504e9c686d006000073","created":"2018-08-29T13:42:30.982Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-12-20T14:40:21.379Z","metadata":{"company":"The Arnold Companies","industry_type":"Energy / Aviation","teaser":"TAC - The Arnold Companies is among the largest fuel wholesalers and aviation service providers in the country. Steady growth, positive financial results and a diverse industry base consistently make TAC one of the top private companies in the US. TAC is made up of many separate brands under one corporate identity, including TAC Energy, TAC Air and Keystone Aviation. \n\n\n\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg","imgix_url":"https://imgix.cosmicjs.com/9aaed6c0-b04d-11e8-8760-cbfd96ceee1a-30210740-966e-11e8-ab08-31f1ed4cd97d-tac-full-logo.svg"}}}],"app_slugs":[{"slug":"single-page-sales-funnel"},{"slug":"appointment-scheduler"},{"slug":"angular-company-website"}],"extension_slugs":[{"slug":"contact-form"},{"slug":"unsplash-photos"},{"slug":"wordpress-importer"}],"testimonial":"<p>&ldquo;Leveraging the Cosmic JS GraphQL API allows for easy updates to our news and blog, while keeping payloads small and fast. Integration with Cosmic JS could not be easier thanks to their great support. We look forward to developing more features on the platform.&rdquo;</p>","testimonial_credit":"Dustin Brink, Front End Developer at Derive Systems"}},{"_id":"5ade1c152b218820ec24befc","order":17,"slug":"nuxtjs-cms","title":"Nuxt.js CMS ","content":"<p>Cosmic JS makes it easy to manage content for your Nuxt.js applications. Install the <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Official Cosmic JS JavaScript Client</a> to integrate content into your Nuxt.js app in minutes. &nbsp;Get a feel for Nuxt.js by taking a spin through <a href=\"https://cosmicjs.com/apps?q=nuxt\" rel=\"noopener noreferrer\" target=\"_blank\">our Nuxt.js Apps</a> and check out the apps and resources below.</p><h3>Nuxt.js CMS Articles</h3><p><a href=\"https://cosmicjs.com/articles?q=nuxt\" rel=\"noopener noreferrer\" target=\"_blank\">Developer Community: Nuxt.js Articles</a><br><a href=\"https://cosmicjs.com/articles/nuxtjs-website-boilerplate-jezdxaxb?ref=search\" rel=\"noopener noreferrer\" target=\"_blank\">Nuxt.js Website Boilerplate</a></p><h3>Nuxt.js CMS Apps</h3><p><a href=\"https://cosmicjs.com/apps/nuxtjs-website\">Nuxt.js Website</a><br><a href=\"https://cosmicjs.com/apps/inventory-app\">Vue.js Website</a><br><a href=\"https://cosmicjs.com/apps/vue-portfolio\">Vue.js Portfolio Site</a><br><a href=\"https://cosmicjs.com/apps?q=nuxt\" rel=\"noopener noreferrer\" target=\"_blank\">Nuxt.js Apps</a></p><h3>Nuxt.js CMS Resources</h3><p><a href=\"https://cosmicjs.com/docs/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic JS Docs</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\"></a><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official JavaScript Client</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3>Examples</h3><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><code style=' font-size: inherit; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: 0px 0px; text-align: left;'>npm i cosmicjs</code></pre><p>Then in your JavaScript file, get your content:</p><div class=\"fr-embedly       \" data-original-embed=\"<a href='https://runkit.com/tonyspiro/5ad9109c320cd6001286359c' class='embedly-card'></a>\"><a href=\"https://runkit.com/tonyspiro/5ad9109c320cd6001286359c\" class=\"embedly-card\"></a></div>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"AGlVVduTEl","value":"90dd0ea0-9304-11ea-838a-0523b52a08cb-nuxt-cms.svg","url":"https://cdn.cosmicjs.com/90dd0ea0-9304-11ea-838a-0523b52a08cb-nuxt-cms.svg","imgix_url":"https://imgix.cosmicjs.com/90dd0ea0-9304-11ea-838a-0523b52a08cb-nuxt-cms.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"6IhUIEED65","value":"2d15d4f0-9300-11ea-838a-0523b52a08cb-nuxt-square.svg","url":"https://cdn.cosmicjs.com/2d15d4f0-9300-11ea-838a-0523b52a08cb-nuxt-square.svg","imgix_url":"https://imgix.cosmicjs.com/2d15d4f0-9300-11ea-838a-0523b52a08cb-nuxt-square.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"89zEZXAMLg","value":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for Nuxt.js websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"hMaIRPHoOL","value":"Nuxt.js"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"MUd7ws2B5g","value":"Cosmic is the best CMS for Nuxt.js websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"B3Fy1T01GK","value":"ac8d09c0-4883-11e8-9a46-f376a117cc0e-UAIojlzx_400x400.jpg","url":"https://cdn.cosmicjs.com/ac8d09c0-4883-11e8-9a46-f376a117cc0e-UAIojlzx_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/ac8d09c0-4883-11e8-9a46-f376a117cc0e-UAIojlzx_400x400.jpg"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"zBgC5SpACT","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"FSAroUazfX","value":"Best Headless CMS for Nuxt.js"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"z4AQvlVRiS","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-22T23:07:51.159Z","created_by":"5357ef811693be2118000001","created":"2018-04-23T17:47:01.490Z","status":"published","modified_at":"2020-06-27T19:17:02.787Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-27T19:17:02.787Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/90dd0ea0-9304-11ea-838a-0523b52a08cb-nuxt-cms.svg","imgix_url":"https://imgix.cosmicjs.com/90dd0ea0-9304-11ea-838a-0523b52a08cb-nuxt-cms.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/2d15d4f0-9300-11ea-838a-0523b52a08cb-nuxt-square.svg","imgix_url":"https://imgix.cosmicjs.com/2d15d4f0-9300-11ea-838a-0523b52a08cb-nuxt-square.svg"},"blurb":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for Nuxt.js websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Nuxt.js","seo_description":"Cosmic is the best CMS for Nuxt.js websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/ac8d09c0-4883-11e8-9a46-f376a117cc0e-UAIojlzx_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/ac8d09c0-4883-11e8-9a46-f376a117cc0e-UAIojlzx_400x400.jpg"},"code_example":"","seo_title":"Best Headless CMS for Nuxt.js","videos":[]}},{"_id":"5d4b18186fe02a4021b4e13f","slug":"content-management-system-for-blogs","title":"Content Management System for Blogs","content":"<p>Cosmic JS provides a flexible and scalable content management system for developers and content creators managing blogs. Companies manage their blog content using the Cosmic JS Content Management System because it&rsquo;s intuitive to manage content, approval workflows and team members. With features like Revision History, Content Preview and Scheduled Publishing, your team can build apps and manage content faster, together.&nbsp;</p><h3><br>What is Headless CMS Software?</h3><p>Headless CMS Software works by providing non-technical editors with a Dashboard UI to model, create and publish content while providing developers with API tools and resources to integrate content with any website or app. By decoupling content from code, teams create a central content repository that can power all of their content-powered applications.&nbsp;</p>","metafields":[{"value":"Content Management System for Blogs","key":"solution_name","title":"Solution Name","type":"text","children":null},{"value":"ec1d5de0-9dc0-11e9-a5b4-e5df9f8049d3-Hackernoon.png","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/ec1d5de0-9dc0-11e9-a5b4-e5df9f8049d3-Hackernoon.png","imgix_url":"https://imgix.cosmicjs.com/ec1d5de0-9dc0-11e9-a5b4-e5df9f8049d3-Hackernoon.png"},{"object_type":"case-studies","value":"5c8a83a0792f9825b48d8133,5a2455620cb0e3291c00002e,59f102cbd4de657279002f97","key":"case_studies","title":"Case Studies","type":"objects","children":null,"objects":[{"_id":"5c8a83a0792f9825b48d8133","slug":"movespring-delivers-health-resources-using-cosmic-js","title":"MoveSpring Delivers Health Resources using Cosmic","content":"<p dir=\"ltr\"><a href=\"https://movespring.com\" rel=\"noopener noreferrer\" target=\"_blank\">MoveSpring</a> is a fun, easy-to-use activity and steps challenge platform. Step your way to success with quick onboarding, real-time scoring, and flexible plan options. MoveSpring is used by organizations like Best Buy, Deloitte and the American Cancer Society to make health a priority, and fun, for their employees.&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/151c3220-4678-11e9-bbe9-d7e354f499a1-MoveSpring.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">MoveSpring manages multiple content resource sections for its users, broken out by Product, Wellness, Tips and Tricks as well as Technology. The team needed a way to easily add blog and help sections that a non-technical content creator could manage. They were able to quickly model and create their content, integrate the content with their website and add their content creators to start publishing and managing dynamic content.&nbsp;</p><p dir=\"ltr\"><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/2e47ad60-4678-11e9-939f-33137870c12d-product-hero-image2x.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&quot;We previously used WordPress for our blog content, but found that we really wanted to utilize the same toolset (React / GraphQL) and have the same look and feel as the rest of our site, which can be challenging for a developer not familiar with WordPress.&nbsp;</p><p>Additionally, we have other dynamic content we would like our Customer Success Managers and Sales team to drive without relying on our development team to build and deploy. After discovering Cosmic, our developer was able to get our new blog up and running within days. Cosmic worked exactly how we hoped it would.&rdquo;</p><p><cite>&mdash; John Contreras, CEO &nbsp;</cite></p></blockquote>","metafields":[{"children":null,"type":"text","title":"Company","key":"company","id":"g8E7TAzNzb","value":"MoveSpring"},{"children":null,"type":"text","title":"Industry Type","key":"industry_type","id":"IazxVO2F44","value":"Health and Wellness"},{"children":null,"type":"textarea","title":"Teaser","key":"teaser","id":"MdNSCJJ6KM","value":"From the creators of Stridekick, MoveSpring is a fun, easy-to-use activity challenge platform. Step your way to success with quick onboarding, real-time scoring, and flexible plan options. MoveSpring is used by organizations like Best Buy, Deloitte and the American Cancer Society to make health a priority, and fun, for their employees. \n\n\n\n"},{"children":null,"type":"file","title":"Logo","key":"logo","id":"z7uTNVr5hZ","value":"ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg","url":"https://cdn.cosmicjs.com/ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg"},{"children":null,"type":"text","title":"Redirect Path","key":"redirect_path","id":"th15yqrwkhn0ja4ft3co","value":"/customers/movespring"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2019-03-14T16:38:56.354Z","status":"published","modified_at":"2020-11-05T20:43:27.287Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-11-05T20:43:27.287Z","unpublish_at":null},{"_id":"5a2455620cb0e3291c00002e","slug":"acculevel-deploys-a-blog","title":"Acculevel Deploys a Blog","content":"<p dir=\"ltr\"><a href=\"https://acculevel.com\" rel=\"noopener noreferrer\" target=\"_blank\">Acculevel</a> is Your Foundation Expert. Serving the Midwest United States for the last 20 years, Acculevel knows what it means to serve and do a job right. Customer retention, reviews and loyalty are the name of their game, so to optimize these efforts and keep customers engaged and informed, Acculevel is scaling up their digital presence through its upcoming website, a new mobile application and more. Led by a new Chief Technology Officer overseeing developers and content editors, here&#39;s how Acculevel is ensuring their own foundation is solid.<br><br>Mired in an installed <a href=\"https://hackernoon.com/cosmic-js-vs-wordpress-668608df4e22\" rel=\"noopener noreferrer\" target=\"_blank\">WordPress</a> system was leaving Acculevel without the flexibility needed to nimbly build and publish content campaigns to engage with customers. Acculevel&#39;s tech team is currently building out a new zippy website built on a <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a> stack, complete with API integrations for ACH Authentication (Plaid) and Payment Gateway (Stripe). Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editors to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/516cb890-daa8-11e7-92aa-b5a1b0875421-21761700_1534030483286380_3096937493413845441_n.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a seamless on-boarding experience for creating a Bucket to manage blog content for our growing organization. We needed a programming-language agnostic API to manage content both within our existing WordPress website as well as within our new Node.js web application. Cosmic fit the bill perfectly with its simple Object schema and powerful Metafields. With Cosmic, content is just data and you can pull it however you&#39;d like, wherever you like, allowing us &nbsp;to build new tools in the future such as survey tools, employee forums and more.&rdquo;</p><p><cite>&mdash; Dylan Marsh, Chief Technology Officer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Acculevel ","key":"company","title":"Company","type":"text","children":null},{"value":"Construction","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editor to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","imgix_url":"https://imgix.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-12-03T19:49:54.515Z","created_by":"5716b504e9c686d006000073","created":"2017-12-03T19:49:54.515Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null},{"_id":"59f102cbd4de657279002f97","slug":"datalyze-solutions-adds-blog-and-job-feeds","title":"Datalyze Solutions Adds a Blog Feed","content":"<p>Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier. That&#39;s why <a href=\"https://www.datalyze-solutions.com\" rel=\"noopener noreferrer\" target=\"_blank\">Datalyze Solutions</a> chooses Cosmic to deliver its content from the cloud for its Blog feeds.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/564c8f40-ca4d-11e7-a5c4-d31978c51f26-Screen Shot 2017-11-15 at 3.38.13 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic has been in use at Datalyze Solutions for more than one and a half years. Cosmic has become a critically important tool for us to publish blog posts quickly and easily. This way, our customers and partners can stay informed about the latest news from our company and other industry-relevant information. Cosmic offers exactly the flexibility and features we really need as content editors!&quot;</p><p>&mdash; Carolin Bauer, Content Editor and Marketing Manager</p></blockquote>","metafields":[{"value":"Datalyze Solutions","key":"company","title":"Company","type":"text","children":null},{"value":"Internet","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier.","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","imgix_url":"https://imgix.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-25T21:31:55.033Z","created_by":"5716b504e9c686d006000073","created":"2017-10-25T21:31:55.033Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null}]},{"repeater_fields":"\"\"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\"\"\"","value":"simple-blog","key":"app_slugs","title":"App Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"simple-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"react-static-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"simple-vue-blog","type":"text","required":false}]}]},{"repeater_fields":"\"\"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\"\"\"","value":"contact-form","key":"extension_slugs","title":"Extension Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"contact-form","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"unsplash-photos","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"wordpress-importer","type":"text","required":false}]}]},{"key":"testimonial","title":"Testimonial","type":"html-textarea","children":null,"value":"<p>&quot;When the opportunity to work with Cosmic JS came up, I jumped on the opportunity. Using an API-first content management platform like Cosmic JS was perfect (and super simple) for connecting best-in-class services like Algolia for search and SendGrid for email. &nbsp;In terms of providing the framework for teams to quickly build quality professional apps, Cosmic JS is definitely onto something.&rdquo;</p>"},{"value":"David Smooke, CEO at Hacker Noon","key":"testimonial_credit","title":"Testimonial Credit","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created":"2019-08-07T18:27:36.982Z","created_at":"2019-07-08T14:58:50.360Z","modified_at":"2019-08-08T13:18:10.376Z","status":"published","locale":null,"published_at":"2019-08-08T13:18:10.376Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"order":18,"metadata":{"solution_name":"Content Management System for Blogs","image":{"url":"https://cdn.cosmicjs.com/ec1d5de0-9dc0-11e9-a5b4-e5df9f8049d3-Hackernoon.png","imgix_url":"https://imgix.cosmicjs.com/ec1d5de0-9dc0-11e9-a5b4-e5df9f8049d3-Hackernoon.png"},"case_studies":[{"_id":"5c8a83a0792f9825b48d8133","slug":"movespring-delivers-health-resources-using-cosmic-js","title":"MoveSpring Delivers Health Resources using Cosmic","content":"<p dir=\"ltr\"><a href=\"https://movespring.com\" rel=\"noopener noreferrer\" target=\"_blank\">MoveSpring</a> is a fun, easy-to-use activity and steps challenge platform. Step your way to success with quick onboarding, real-time scoring, and flexible plan options. MoveSpring is used by organizations like Best Buy, Deloitte and the American Cancer Society to make health a priority, and fun, for their employees.&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/151c3220-4678-11e9-bbe9-d7e354f499a1-MoveSpring.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">MoveSpring manages multiple content resource sections for its users, broken out by Product, Wellness, Tips and Tricks as well as Technology. The team needed a way to easily add blog and help sections that a non-technical content creator could manage. They were able to quickly model and create their content, integrate the content with their website and add their content creators to start publishing and managing dynamic content.&nbsp;</p><p dir=\"ltr\"><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/2e47ad60-4678-11e9-939f-33137870c12d-product-hero-image2x.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&quot;We previously used WordPress for our blog content, but found that we really wanted to utilize the same toolset (React / GraphQL) and have the same look and feel as the rest of our site, which can be challenging for a developer not familiar with WordPress.&nbsp;</p><p>Additionally, we have other dynamic content we would like our Customer Success Managers and Sales team to drive without relying on our development team to build and deploy. After discovering Cosmic, our developer was able to get our new blog up and running within days. Cosmic worked exactly how we hoped it would.&rdquo;</p><p><cite>&mdash; John Contreras, CEO &nbsp;</cite></p></blockquote>","metafields":[{"children":null,"type":"text","title":"Company","key":"company","id":"g8E7TAzNzb","value":"MoveSpring"},{"children":null,"type":"text","title":"Industry Type","key":"industry_type","id":"IazxVO2F44","value":"Health and Wellness"},{"children":null,"type":"textarea","title":"Teaser","key":"teaser","id":"MdNSCJJ6KM","value":"From the creators of Stridekick, MoveSpring is a fun, easy-to-use activity challenge platform. Step your way to success with quick onboarding, real-time scoring, and flexible plan options. MoveSpring is used by organizations like Best Buy, Deloitte and the American Cancer Society to make health a priority, and fun, for their employees. \n\n\n\n"},{"children":null,"type":"file","title":"Logo","key":"logo","id":"z7uTNVr5hZ","value":"ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg","url":"https://cdn.cosmicjs.com/ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg"},{"children":null,"type":"text","title":"Redirect Path","key":"redirect_path","id":"th15yqrwkhn0ja4ft3co","value":"/customers/movespring"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2019-03-14T16:38:56.354Z","status":"published","modified_at":"2020-11-05T20:43:27.287Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-11-05T20:43:27.287Z","unpublish_at":null,"metadata":{"company":"MoveSpring","industry_type":"Health and Wellness","teaser":"From the creators of Stridekick, MoveSpring is a fun, easy-to-use activity challenge platform. Step your way to success with quick onboarding, real-time scoring, and flexible plan options. MoveSpring is used by organizations like Best Buy, Deloitte and the American Cancer Society to make health a priority, and fun, for their employees. \n\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg"},"redirect_path":"/customers/movespring"}},{"_id":"5a2455620cb0e3291c00002e","slug":"acculevel-deploys-a-blog","title":"Acculevel Deploys a Blog","content":"<p dir=\"ltr\"><a href=\"https://acculevel.com\" rel=\"noopener noreferrer\" target=\"_blank\">Acculevel</a> is Your Foundation Expert. Serving the Midwest United States for the last 20 years, Acculevel knows what it means to serve and do a job right. Customer retention, reviews and loyalty are the name of their game, so to optimize these efforts and keep customers engaged and informed, Acculevel is scaling up their digital presence through its upcoming website, a new mobile application and more. Led by a new Chief Technology Officer overseeing developers and content editors, here&#39;s how Acculevel is ensuring their own foundation is solid.<br><br>Mired in an installed <a href=\"https://hackernoon.com/cosmic-js-vs-wordpress-668608df4e22\" rel=\"noopener noreferrer\" target=\"_blank\">WordPress</a> system was leaving Acculevel without the flexibility needed to nimbly build and publish content campaigns to engage with customers. Acculevel&#39;s tech team is currently building out a new zippy website built on a <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a> stack, complete with API integrations for ACH Authentication (Plaid) and Payment Gateway (Stripe). Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editors to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/516cb890-daa8-11e7-92aa-b5a1b0875421-21761700_1534030483286380_3096937493413845441_n.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a seamless on-boarding experience for creating a Bucket to manage blog content for our growing organization. We needed a programming-language agnostic API to manage content both within our existing WordPress website as well as within our new Node.js web application. Cosmic fit the bill perfectly with its simple Object schema and powerful Metafields. With Cosmic, content is just data and you can pull it however you&#39;d like, wherever you like, allowing us &nbsp;to build new tools in the future such as survey tools, employee forums and more.&rdquo;</p><p><cite>&mdash; Dylan Marsh, Chief Technology Officer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Acculevel ","key":"company","title":"Company","type":"text","children":null},{"value":"Construction","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editor to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","imgix_url":"https://imgix.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-12-03T19:49:54.515Z","created_by":"5716b504e9c686d006000073","created":"2017-12-03T19:49:54.515Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"company":"Acculevel ","industry_type":"Construction","teaser":"Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editor to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","imgix_url":"https://imgix.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg"}}},{"_id":"59f102cbd4de657279002f97","slug":"datalyze-solutions-adds-blog-and-job-feeds","title":"Datalyze Solutions Adds a Blog Feed","content":"<p>Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier. That&#39;s why <a href=\"https://www.datalyze-solutions.com\" rel=\"noopener noreferrer\" target=\"_blank\">Datalyze Solutions</a> chooses Cosmic to deliver its content from the cloud for its Blog feeds.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/564c8f40-ca4d-11e7-a5c4-d31978c51f26-Screen Shot 2017-11-15 at 3.38.13 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic has been in use at Datalyze Solutions for more than one and a half years. Cosmic has become a critically important tool for us to publish blog posts quickly and easily. This way, our customers and partners can stay informed about the latest news from our company and other industry-relevant information. Cosmic offers exactly the flexibility and features we really need as content editors!&quot;</p><p>&mdash; Carolin Bauer, Content Editor and Marketing Manager</p></blockquote>","metafields":[{"value":"Datalyze Solutions","key":"company","title":"Company","type":"text","children":null},{"value":"Internet","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier.","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","imgix_url":"https://imgix.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-25T21:31:55.033Z","created_by":"5716b504e9c686d006000073","created":"2017-10-25T21:31:55.033Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"metadata":{"company":"Datalyze Solutions","industry_type":"Internet","teaser":"Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier.","logo":{"url":"https://cdn.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","imgix_url":"https://imgix.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png"}}}],"app_slugs":[{"slug":"simple-blog"},{"slug":"react-static-blog"},{"slug":"simple-vue-blog"}],"extension_slugs":[{"slug":"contact-form"},{"slug":"unsplash-photos"},{"slug":"wordpress-importer"}],"testimonial":"<p>&quot;When the opportunity to work with Cosmic JS came up, I jumped on the opportunity. Using an API-first content management platform like Cosmic JS was perfect (and super simple) for connecting best-in-class services like Algolia for search and SendGrid for email. &nbsp;In terms of providing the framework for teams to quickly build quality professional apps, Cosmic JS is definitely onto something.&rdquo;</p>","testimonial_credit":"David Smooke, CEO at Hacker Noon"}},{"_id":"5b4505e4ca5d6f04085fe63c","order":18,"slug":"serverless-cms","title":"Serverless CMS","content":"<p>Cosmic JS makes it easy to manage content for your Serverless applications. Get a feel for going Serverless by checking out the tutorials below.</p><h3>Serverless Quickstart</h3><p><a href=\"https://github.com/cosmicjs/serverless-starter\" rel=\"noopener noreferrer\" target=\"_blank\">Install a Cosmic-powered Serverless Starter app in seconds</a>🔥</p><pre>npm i -g cosmic-cli\r\ncosmic init serverless-starter\r\ncd serverless-starter\r\ncosmic start</pre><h3>Serverless CMS Articles</h3><p><a href=\"https://cosmicjs.com/articles?q=serverless\" rel=\"noopener noreferrer\" target=\"_blank\">Developer Community: Serverless Articles</a><br><a href=\"https://cosmicjs.com/articles/build-and-deploy-a-serverless-nodejs-app-powered-by-cosmic-js-jj60wl3r\" rel=\"noopener noreferrer\" target=\"_blank\">Build and Deploy a Serverless Node.js App powered by Cosmic JS</a><br><br></p><h3>Serverless CMS Resources</h3><p><a href=\"https://github.com/cosmicjs/serverless-starter\" rel=\"noopener noreferrer\" target=\"_blank\">Serverless Starter App</a><br><a href=\"https://cosmicjs.com/docs/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic JS Docs</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official JavaScript Client</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3>Using the Cosmic JS NPM Module</h3><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><code style=' font-size: inherit; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: 0px 0px; text-align: left;'>npm i cosmicjs</code></pre><p style=' color: rgb(51, 51, 51); font-family: \"Open Sans\", sans-serif; font-size: 16px; text-align: start; background-color: rgb(255, 255, 255);'>Then in your JavaScript file, get your content:</p><div class=\"fr-embedly              \" data-original-embed=\"<a href='https://runkit.com/tonyspiro/5ad9109c320cd6001286359c' class='embedly-card'></a>\"><a href=\"https://runkit.com/tonyspiro/5ad9109c320cd6001286359c\" class=\"embedly-card\"></a></div><p><br></p>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"HzvvXPsTUp","value":"b3d3d7f0-8642-11ea-8e16-e7cd20df21fe-serverless.svg","url":"https://cdn.cosmicjs.com/b3d3d7f0-8642-11ea-8e16-e7cd20df21fe-serverless.svg","imgix_url":"https://imgix.cosmicjs.com/b3d3d7f0-8642-11ea-8e16-e7cd20df21fe-serverless.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"UxUqr8Ve2n","value":"344fcf60-dfae-11e9-945b-21c993b3c1af-serverless.jpg","url":"https://cdn.cosmicjs.com/344fcf60-dfae-11e9-945b-21c993b3c1af-serverless.jpg","imgix_url":"https://imgix.cosmicjs.com/344fcf60-dfae-11e9-945b-21c993b3c1af-serverless.jpg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"kTOZogPzn8","value":"<p>Cosmic is the best CMS for Serverless websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"AxxGAWcy7Z","value":"Serverless"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"4LcEvezt5O","value":"Cosmic is the best CMS for Serverless websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"uJE5tn3U1K","value":"37d9e080-dfae-11e9-945b-21c993b3c1af-serverless.jpg","url":"https://cdn.cosmicjs.com/37d9e080-dfae-11e9-945b-21c993b3c1af-serverless.jpg","imgix_url":"https://imgix.cosmicjs.com/37d9e080-dfae-11e9-945b-21c993b3c1af-serverless.jpg"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"qwan8cCdtH","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"2qt4KI2q2d","value":"Best Headless CMS for Serverless"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"cWp7EPtNpK","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-22T23:09:01.747Z","created_by":"5357ef811693be2118000001","created":"2018-07-10T19:15:48.336Z","status":"published","modified_at":"2020-06-27T19:17:22.141Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-27T19:17:22.141Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/b3d3d7f0-8642-11ea-8e16-e7cd20df21fe-serverless.svg","imgix_url":"https://imgix.cosmicjs.com/b3d3d7f0-8642-11ea-8e16-e7cd20df21fe-serverless.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/344fcf60-dfae-11e9-945b-21c993b3c1af-serverless.jpg","imgix_url":"https://imgix.cosmicjs.com/344fcf60-dfae-11e9-945b-21c993b3c1af-serverless.jpg"},"blurb":"<p>Cosmic is the best CMS for Serverless websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Serverless","seo_description":"Cosmic is the best CMS for Serverless websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/37d9e080-dfae-11e9-945b-21c993b3c1af-serverless.jpg","imgix_url":"https://imgix.cosmicjs.com/37d9e080-dfae-11e9-945b-21c993b3c1af-serverless.jpg"},"code_example":"","seo_title":"Best Headless CMS for Serverless","videos":[]}},{"_id":"5c8a83a0792f9825b48d8133","order":18,"slug":"movespring-delivers-health-resources-using-cosmic-js","title":"MoveSpring Delivers Health Resources using Cosmic","content":"<p dir=\"ltr\"><a href=\"https://movespring.com\" rel=\"noopener noreferrer\" target=\"_blank\">MoveSpring</a> is a fun, easy-to-use activity and steps challenge platform. Step your way to success with quick onboarding, real-time scoring, and flexible plan options. MoveSpring is used by organizations like Best Buy, Deloitte and the American Cancer Society to make health a priority, and fun, for their employees.&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/151c3220-4678-11e9-bbe9-d7e354f499a1-MoveSpring.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">MoveSpring manages multiple content resource sections for its users, broken out by Product, Wellness, Tips and Tricks as well as Technology. The team needed a way to easily add blog and help sections that a non-technical content creator could manage. They were able to quickly model and create their content, integrate the content with their website and add their content creators to start publishing and managing dynamic content.&nbsp;</p><p dir=\"ltr\"><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/2e47ad60-4678-11e9-939f-33137870c12d-product-hero-image2x.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&quot;We previously used WordPress for our blog content, but found that we really wanted to utilize the same toolset (React / GraphQL) and have the same look and feel as the rest of our site, which can be challenging for a developer not familiar with WordPress.&nbsp;</p><p>Additionally, we have other dynamic content we would like our Customer Success Managers and Sales team to drive without relying on our development team to build and deploy. After discovering Cosmic, our developer was able to get our new blog up and running within days. Cosmic worked exactly how we hoped it would.&rdquo;</p><p><cite>&mdash; John Contreras, CEO &nbsp;</cite></p></blockquote>","metafields":[{"children":null,"type":"text","title":"Company","key":"company","id":"g8E7TAzNzb","value":"MoveSpring"},{"children":null,"type":"text","title":"Industry Type","key":"industry_type","id":"IazxVO2F44","value":"Health and Wellness"},{"children":null,"type":"textarea","title":"Teaser","key":"teaser","id":"MdNSCJJ6KM","value":"From the creators of Stridekick, MoveSpring is a fun, easy-to-use activity challenge platform. Step your way to success with quick onboarding, real-time scoring, and flexible plan options. MoveSpring is used by organizations like Best Buy, Deloitte and the American Cancer Society to make health a priority, and fun, for their employees. \n\n\n\n"},{"children":null,"type":"file","title":"Logo","key":"logo","id":"z7uTNVr5hZ","value":"ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg","url":"https://cdn.cosmicjs.com/ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg"},{"children":null,"type":"text","title":"Redirect Path","key":"redirect_path","id":"th15yqrwkhn0ja4ft3co","value":"/customers/movespring"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2019-03-14T16:38:56.354Z","status":"published","modified_at":"2020-11-05T20:43:27.287Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-11-05T20:43:27.287Z","unpublish_at":null,"metadata":{"company":"MoveSpring","industry_type":"Health and Wellness","teaser":"From the creators of Stridekick, MoveSpring is a fun, easy-to-use activity challenge platform. Step your way to success with quick onboarding, real-time scoring, and flexible plan options. MoveSpring is used by organizations like Best Buy, Deloitte and the American Cancer Society to make health a priority, and fun, for their employees. \n\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/ee70e3e0-4f29-11e9-a314-fdf908b370ef-1z3YLQ0400x400.jpg"},"redirect_path":"/customers/movespring"}},{"_id":"5f6cac6a20cc1b00076a28b2","order":18,"slug":"introducing-merge-for-environment-workflows","title":"Introducing Merge for Environment Workflows","content":"<h2>UPDATE</h2><p>This feature has been upgraded into a fully-functioning feature. See <a href=\"https://www.cosmicjs.com/blog/introducing-merge-requests\">Merge Requests</a>.</p><p><br></p><p>We&#39;re excited to release a new feature to help you deploy content updates faster with greater peace of mind. Introducing <em>Merge</em> (currently in Beta), which enables your team to do quick content migrations between Buckets.<br><br></p><p><strong>How does it work?</strong><br>With the new Merge feature, you can now copy Objects between Buckets in a few clicks. In addition to our available Bucket data Import / Export, this feature allows for more granular content migrations. A great use case is when performing environment workflows.<br><br></p><p><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi\" controls=\"\" loop=\"\" src=\"https://cdn.cosmicjs.com/a2cf8510-fe71-11ea-a525-3597bcdfdc76-Merge-Objects.mp4\" style=\"width: 100%;\">Your browser does not support HTML5 video.</video></span></p><p><br><strong>What are Environment Workflows?</strong><br>When developing any digital project, it is good practice to maintain multiple environments to allow for a streamlined quality control process (For example <em>Development</em>, <em>Staging</em>, and <em>Production</em>). The Merge feature fits into this workflow nicely by allowing your team to develop content in one Bucket, then after testing and approvals, Objects can be merged into another Bucket in just a few clicks.</p><p><br><strong>How to use the Merge feature</strong></p><ol><li>After <a href=\"https://app.cosmicjs.com/login\" rel=\"noopener noreferrer\" target=\"_blank\">logging into your Cosmic account</a>, go to your Bucket dashboard and select any Object Type (make sure you have at least two Buckets on your account).</li><li>Select the Objects you would like to merge from the Objects table</li><li>From the Bulk Actions dropdown select &quot;Merge to Another Bucket&quot;</li><li>Select the target Bucket</li><li>Confirm the action by clicking the &quot;Merge to Bucket&quot; button</li></ol><p>New Objects will be added, and existing Objects (with the same slug and locale) will be updated. This will also send updates to the Object Type model, Media, and connected Objects if applicable.</p><p><br>We hope you like the new Merge feature to help your team build content powered apps faster with more peace of mind. Merge is currently in beta and we would appreciate your feedback after testing it out in your workflows. Please let us know if you have any questions / comments in our <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Slack channel</a>, and <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a> for the latest updates to the Cosmic <a href=\"https://www.cosmicjs.com/headless-cms\">Headless CMS</a>.</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"QAjNpZwylG","value":"2020-10-13"},{"children":null,"type":"object","title":"Author","key":"author","id":"9M5auRwewU","value":"5768b253163172890e00002c","object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"7EqldQxl0K","value":"","url":null,"imgix_url":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2020-09-24T14:25:46.875Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-14T21:16:47.533Z","created":"2020-09-24T14:25:46.875Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/026f5cb0-096d-11eb-a21e-0f30bc9d833c-merge-objects-bucket.jpg","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2021-01-14T21:16:47.533Z","metadata":{"published_date":"2020-10-13","author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":null,"imgix_url":null}}},{"_id":"603e6298dbb37a00075b083c","order":18,"slug":"vue-vs-react-which-is-the-best-option-in-2021","title":"Vue vs React: Which Is The Best Option in 2021?","content":"<p><img src=\"https://imgix.cosmicjs.com/3c684a50-827e-11eb-8b5d-951d83ec2ae4-vue-vs-react.png?w=10&auto=format\" data-image=\"https://imgix.cosmicjs.com/3c684a50-827e-11eb-8b5d-951d83ec2ae4-vue-vs-react.png?w=2000&auto=format\" data-name=\"vue-vs-react.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib lazy-load\"></p><p>JavaScript is, by far, the <a href=\"https://www.zdnet.com/article/programming-language-popularity-javascript-leads-5-million-new-developers-since-2017/\">most popular programming language</a> in the world. However, that popularity becomes self-evident when you look at how many libraries and frameworks are built on top of JavaScript.</p><p><a href=\"https://vuejs.org/\">Vue</a> and <a href=\"https://reactjs.org/\">React</a> are among the most <a href=\"https://insights.stackoverflow.com/survey/2020#technology-web-frameworks\" rel=\"noopener noreferrer\" target=\"_blank\">popular web frameworks</a>(React\r\nis 2<sup>nd</sup> only to jQuery, Vue has risen steadily to the #7 spot). Neither of them appears to be slowing down anytime soon &ndash; both gained usage share over the last 3 years.</p><p>The distinction that we make between libraries and frameworks is essential to understanding the differences between Vue and React. Although they&#39;re both built on top of JavaScript, they have different use cases.</p><p>In this article, we&#39;ll talk about what Vue and React bring to the table to help you decide which framework/library you should use.</p><h2>What Is React?</h2><p><a href=\"https://reactjs.org/\">React</a> (also known as React.js or ReactJS) is a JavaScript library developed by Facebook. It was <a href=\"https://blog.risingstack.com/the-history-of-react-js-on-a-timeline/\">released in 2013</a> and, since then, it&#39;s grown into one of the most popular libraries in the world. If you go by GitHub numbers alone, <a href=\"https://github.com/facebook/react\">over 5.8 million developers</a> have projects that use React.</p><p>With React, you can build user interfaces using declarative views and encapsulated components. React also took the existing concept of the virtual DOM and made it much more popular in development. Using React virtual DOMs, every time that you render a JSX element (the syntax that React uses) the library detects what objects it needs to update and updates <em>only&nbsp;</em>those resources in the real DOM.</p><p>Technicalities aside, it&#39;s also important to mention that Vue and React are very different when it comes to core philosophies. React is still maintained and funded by Facebook, but it operates under the MIT license, making it an open-source project.</p><h2>What Is Vue?</h2><p><a href=\"https://vuejs.org/\">Vue</a> is, in many ways, similar to React. It&#39;s an open-source framework designed to help developers build intricate User Interfaces (UI). However, it&#39;s the somewhat newer project, launching in 2014. Vue is <a href=\"https://www.freecodecamp.org/news/between-the-wires-an-interview-with-vue-js-creator-evan-you-e383cbf57cc4/\">the thought-child of Evan You</a>,\r\na developer who&#39;s still working on the project, albeit with a larger team now thanks to crowdfunding and corporate sponsors.</p><p>Despite the evident difference between resources for both projects, Vue has gained steadily in market share and popularity throughout the past few years.&nbsp;</p><p>As far as technicalities go, Vue uses the same virtual DOM approach as React. It&#39;s also a component-based framework that focuses on the view library. That means it somewhat depends on other libraries for routing and management.</p><h2>4 Key Differences Between Vue and React</h2><p>So far, you know what makes Vue and React so similar (and popular). Let&#39;s talk about the main differences between them.</p><h3>1. Templating</h3><p>Perhaps the most evident difference between React and Vue lies in the way that each project handles templates.&nbsp;</p><p>React uses a JavaScript syntax extension called JSX for <em>everything</em>. It&#39;s possible to use React without JSX, allowing you to skip compiles by using plan Javascript, but for all intents and purposes, many of the benefits of React are built\r\ninto JSX.</p><p>Using JSX means that both HTML and CSS are wrapped up in JavaScript. In practice, using JSX, you can use the same code to generate both UI components and dictate their behavior.&nbsp;</p><p>JSX can be as versatile as a full language, including flow controls and temporary variables. Plus, it supports all the Integrated Development Environment (IDE) features you&#39;d expect, such as autocomplete, linting, and type checking.</p><p>Vue, on the other hand, uses distinct blocks for HTML, CSS, and JavaScript. This makes picking up the framework more simple, even if you&#39;re relatively new to JavaScript. Vue is a common first framework for developers.</p><p>Vue&#39;s &#39;modular&#39; approach also makes it easy to migrate projects to the framework, since you can add functionality gradually to existing documents.</p><p>What&#39;s more, <a href=\"https://vuejs.org/v2/guide/render-function.html\">Vue <em>also</em> supports JSX</a>, making it far more versatile than it looks at first glance. Even so, the framework is primarily designed to work with HTML-based templates,\r\nand Vue&#39;s own docs recommend against JSX for most cases.&nbsp;</p><p>In our experience, many developers feel that JSX is the more comprehensive and powerful option. However, Vue is definitely easier to work with, especially if not everyone on your team is familiar with the framework.</p><h3>2. Ecosystem</h3><p>It would be fair to say that Vue is more of a standalone solution than React. Using Vue, you get access to a smaller number of companion libraries simply, because we&#39;re dealing with a framework that&#39;s not as popular as React. However, you also\r\nneed external libraries less often, because most of the functionality you need already exists within the framework.</p><p>Some of the most important Vue libraries, such as <a href=\"https://router.vuejs.org/\">vue-router</a>, are supported by the frameworks&#39; own core team.</p><p>React, on the other hand, offers you a staggering number of libraries. In most cases, you&#39;ll need to use them since React relies on third-party solutions for state management and routing.</p><p>Some of those critical libraries, such as <a href=\"https://redux.js.org/\">react-redux</a> and <a href=\"https://reactrouter.com/\">react-router</a> are maintained by the community, unlike React core, but are still highly reliable.</p><h3>3. Scalability</h3><p>Both Vue and React are lightweight solutions, and they&#39;re pretty much on par when it comes to performance out of the box. However, as your web applications start to grow, some cracks begin to emerge.</p><p>Vue&#39;s HTML template approach may be simpler to adopt, but it can also be a handicap for large projects. Simply put, dealing with HTML templates over and over is not as efficient as using JSX.</p><p>React&#39;s institutional support and popularity also gives it an edge when it comes to scalability. It&#39;s hard to compete with the vast number of libraries available to customize your projects. Combine that with JSX and you have a library that&#39;s\r\nperfect for enterprise-grade projects.</p><h3>4. Cross-Platform Development</h3><p>If you&#39;re interested in cross-platform development, React wins the battle hands down thanks to <a href=\"https://reactnative.dev/\">React Native</a> alone. With React Native, you can re-use vast portions of your code between mobile and desktop operating systems, all using React components.</p><p>Vue also offers several options for mobile development, but the selection isn&#39;t as clear cut as with React Native. Some of the most popular Vue options include <a href=\"https://quasar.dev/\">Quasar</a>, <a href=\"https://madewithvuejs.com/vux\">Vux</a>, and <a href=\"https://mint-ui.github.io/\">Mint-UI</a>.</p><p>In our experience, mobile development with React is generally easier, although Vue isn&#39;t lagging that far behind in terms of functionality. React Native&#39;s sheer popularity makes it the best choice due to its native functionality, documentation,\r\nand third-party solutions.</p><h2>How Vue and React Work with Headless CMS Solutions</h2><p>Of course, many solutions built with either React or Vue combine with a headless Content Management System (CMS) solution for content management and increased application accessibility.</p><p>Although Vue does offer a more all-in-one solution than React, both can benefit from all the features a headless CMS brings to the table. Using a headless CMS, you can rely on React or Vue for your web application&#39;s front end (the head) and let the\r\nCMS handle everything else, including:</p><ul><li><strong>Providing a dashboard you and your team can use.&nbsp;</strong>Although you may be comfortable dealing with the backend directly, a lot of your team might prefer to use an intuitive dashboard to interact with and update your application content.</li><li><strong>Access to rich text and media editing tools.&nbsp;</strong>Text and media are at the core of every web project and having access to a powerful editor will make your life much easier when it comes to publishing and updating your site.</li><li><strong>User role and permission systems.&nbsp;</strong>Not every user needs the same level of permissions when it comes to updating applications. With the right CMS, you can govern these settings with a user-friendly interface.&nbsp;</li><li><strong>Backup functionality.&nbsp;</strong>Instead of worrying about backing up your data, you can let a CMS do it for you.</li></ul><p>Which headless CMS solution you decide to use comes down to feature sets and needs. Cosmic is proudly the most flexible headless CMS available in 2021&#39;s market. With Cosmic you get access to both a REST and a GraphQL API to sync data to buckets. And our <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">NPM module</a> is a great fit for any React or Vue application.</p><p>Cosmic makes it easy to learn and launch React and Vue projects in a matter of minutes. You can <a href=\"https://docs.cosmicjs.com/guides/#react\">deploy a React app</a> with only a handful of commands, and <a href=\"https://docs.cosmicjs.com/guides/#vue-js\">the same goes for Vue</a>. See the docs for helpful guides to get started with <a href=\"https://docs-v2.cosmicjs.com/guides/react\" rel=\"noopener noreferrer\" target=\"_blank\">React</a> or <a href=\"https://docs-v2.cosmicjs.com/guides/vuejs\" rel=\"noopener noreferrer\" target=\"_blank\">Vue.js</a>.</p><h2>When to Use Vue vs React and Vice Versa</h2><p>Due to Vue and React&#39;s different core philosophies, there are fairly clear best-use scenarios for each solution. To sum them up:</p><ul><li><strong>React.&nbsp;</strong>This library is the better option if you&#39;re working on an enterprise-level project or you want to pick the solution that has the most options when it comes to third-party contributions. Most importantly, React&#39;s basis\r\non JSX can make it a much more scalable option versus Vue&#39;s HTML templating.</li><li><strong>Vue.&nbsp;</strong>We recommend that you use Vue if you want a framework that makes migrating projects as easy as possible. Vue is also the superior option if you want a framework that makes collaboration simpler, precisely thanks to its HTML\r\ntemplating approach. Overall, it&#39;s more beginner-friendly.</li></ul><p>Ultimately, which solution you opt for should depend on your team and each project that you tackle. In any case, both React and Vue are fantastic options to work with.</p><p><strong><em>Are you ready to start using React and Vue alongside a headless CMS solution?&nbsp;</em></strong><a href=\"https://www.cosmicjs.com/pricing\"><strong><em>Start Managing an Application with Cosmic for free</em></strong></a><strong><em>&nbsp;right now.</em></strong></p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"2yrxF3Uy6C","value":"5f5fac071936450007d8a01c","required":true,"object_type":"authors","object":{"_id":"5f5fac071936450007d8a01c","slug":"kyle-meagher","title":"Kyle Meagher","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"hsMOJCxIAj","value":"kylemeags"},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D2rdKO4lEL","value":"e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2020-09-14T17:44:39.110Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-14T17:45:09.251Z","created":"2020-09-14T17:44:39.110Z","status":"published","published_at":"2020-09-14T17:44:39.110Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"W9b1sjK6x7","value":"<p>In this article, we&#39;ll talk about what Vue and React bring to the table to help you decide which framework/library you should use.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"4lBNjztYHM","value":"3c684a50-827e-11eb-8b5d-951d83ec2ae4-vue-vs-react.png","url":"https://cdn.cosmicjs.com/3c684a50-827e-11eb-8b5d-951d83ec2ae4-vue-vs-react.png","imgix_url":"https://imgix.cosmicjs.com/3c684a50-827e-11eb-8b5d-951d83ec2ae4-vue-vs-react.png"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"dcwuf3Cbdy","value":"Vue and React are among the most popular web frameworks(React is 2nd only to jQuery, Vue has risen steadily to the #7 spot). Neither of them appears to be slowing down anytime soon – both gained usage share over the last 3 years."},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"xn9jvybsTN","value":"2021-03-08"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2021-03-02T16:06:47.867Z","created_by":"5357ef811693be2118000001","modified_at":"2021-03-12T20:47:21.333Z","created":"2021-03-02T16:06:47.867Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/3c684a50-827e-11eb-8b5d-951d83ec2ae4-vue-vs-react.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2021-03-12T20:47:21.333Z","metadata":{"author":{"_id":"5f5fac071936450007d8a01c","slug":"kyle-meagher","title":"Kyle Meagher","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"hsMOJCxIAj","value":"kylemeags"},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D2rdKO4lEL","value":"e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2020-09-14T17:44:39.110Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-14T17:45:09.251Z","created":"2020-09-14T17:44:39.110Z","status":"published","published_at":"2020-09-14T17:44:39.110Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","metadata":{"username":"kylemeags","profile_picture":{"url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}}},"teaser":"<p>In this article, we&#39;ll talk about what Vue and React bring to the table to help you decide which framework/library you should use.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/3c684a50-827e-11eb-8b5d-951d83ec2ae4-vue-vs-react.png","imgix_url":"https://imgix.cosmicjs.com/3c684a50-827e-11eb-8b5d-951d83ec2ae4-vue-vs-react.png"},"seo_meta_description":"Vue and React are among the most popular web frameworks(React is 2nd only to jQuery, Vue has risen steadily to the #7 spot). Neither of them appears to be slowing down anytime soon – both gained usage share over the last 3 years.","published_date":"2021-03-08"}},{"_id":"5dca1363e45af80008675546","order":19,"slug":"cms-for-open-source","title":"CMS for Open Source","content":"<p>Cosmic JS offers a powerful CMS for any website or web-based application. &nbsp;Along with lots of open source resources to get up and building faster.</p><p>Install the <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Official Cosmic JS JavaScript Client</a> to integrate content into your app in minutes. &nbsp;Or simply use the <a href=\"https://cosmicjs.com/docs\" rel=\"noopener noreferrer\" target=\"_blank\">REST or GraphQL API</a>. &nbsp;Get a feel for Cosmic JS by taking a spin through <a href=\"https://cosmicjs.com/apps\" rel=\"noopener noreferrer\" target=\"_blank\">our apps</a> and check out the tutorials below.</p><h3>Open Source</h3><p><a href=\"https://www.cosmicjs.com/apps\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic JS Apps</a><br><a href=\"https://www.cosmicjs.com/extensions\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic JS Extensions</a></p><h3>CMS Articles</h3><p><a href=\"https://www.cosmicjs.com/what-is-a-headless-cms\" rel=\"noopener noreferrer\" target=\"_blank\">What is a Headless CMS?</a><a href=\"https://cosmicjs.com/docs/\"></a><br><a href=\"https://cosmicjs.com/docs/\">Cosmic JS Docs</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\"></a><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official JavaScript Client</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3>Cosmic JS Videos</h3><h4><br></h4><h4>Using Cosmic JS as a Headless CMS with Gatsby</h4><div class=\"fr-embedly                        \" data-original-embed=\"<a href='https://www.youtube.com/watch?v=Qls5frYlJeI' class='embedly-card'></a>\"><a href=\"https://www.youtube.com/watch?v=Qls5frYlJeI\" class=\"embedly-card\"></a></div><h4>Build a Cosmic JS-powered blog using Gatsby</h4><div class=\"fr-embedly                        \" data-original-embed=\"<a href='https://www.youtube.com/watch?v=mGcAWs1xRnY' class='embedly-card'></a>\"><a href=\"https://www.youtube.com/watch?v=mGcAWs1xRnY\" class=\"embedly-card\"></a></div><h4>Webinar: Localization with Cosmic JS and Gatsby</h4><div class=\"fr-embedly                        \" data-original-embed=\"<a href='https://www.youtube.com/watch?v=16m3wRFPGAY' class='embedly-card'></a>\"><a href=\"https://www.youtube.com/watch?v=16m3wRFPGAY\" class=\"embedly-card\"></a></div><p>Altered code branch icon provided with permission by <a href=\"https://fontawesome.com/license\" rel=\"noopener noreferrer\" target=\"_blank\">Font Awesome</a>.</p>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"h14yp6RMZQ","value":"07018d50-0556-11ea-95fe-01afbd7f5f3b-code-branch-solid.jpg","url":"https://cdn.cosmicjs.com/07018d50-0556-11ea-95fe-01afbd7f5f3b-code-branch-solid.jpg","imgix_url":"https://imgix.cosmicjs.com/07018d50-0556-11ea-95fe-01afbd7f5f3b-code-branch-solid.jpg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"zq1eX3ApHW","value":"07018d50-0556-11ea-95fe-01afbd7f5f3b-code-branch-solid.jpg","url":"https://cdn.cosmicjs.com/07018d50-0556-11ea-95fe-01afbd7f5f3b-code-branch-solid.jpg","imgix_url":"https://imgix.cosmicjs.com/07018d50-0556-11ea-95fe-01afbd7f5f3b-code-branch-solid.jpg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"oqsYCYJejc","value":"<p>Cosmic is the best CMS for open source websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"NnOaC4Gsd2","value":"CMS for Open Source"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"S08b08v4er","value":"Cosmic is the best CMS for open source websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"9csWgcjVjC","value":"07018d50-0556-11ea-95fe-01afbd7f5f3b-code-branch-solid.jpg","url":"https://cdn.cosmicjs.com/07018d50-0556-11ea-95fe-01afbd7f5f3b-code-branch-solid.jpg","imgix_url":"https://imgix.cosmicjs.com/07018d50-0556-11ea-95fe-01afbd7f5f3b-code-branch-solid.jpg"},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"hbZxXe55rH","value":"Best Headless CMS for Open Source"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"CtHruodSTs","value":""},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"frgtgqfrpylludl8pnsi","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-22T23:09:01.747Z","created_by":"5357ef811693be2118000001","created":"2019-11-12T02:05:23.710Z","status":"published","modified_at":"2020-06-27T19:17:47.535Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-27T19:17:47.535Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/07018d50-0556-11ea-95fe-01afbd7f5f3b-code-branch-solid.jpg","imgix_url":"https://imgix.cosmicjs.com/07018d50-0556-11ea-95fe-01afbd7f5f3b-code-branch-solid.jpg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/07018d50-0556-11ea-95fe-01afbd7f5f3b-code-branch-solid.jpg","imgix_url":"https://imgix.cosmicjs.com/07018d50-0556-11ea-95fe-01afbd7f5f3b-code-branch-solid.jpg"},"blurb":"<p>Cosmic is the best CMS for open source websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"CMS for Open Source","seo_description":"Cosmic is the best CMS for open source websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/07018d50-0556-11ea-95fe-01afbd7f5f3b-code-branch-solid.jpg","imgix_url":"https://imgix.cosmicjs.com/07018d50-0556-11ea-95fe-01afbd7f5f3b-code-branch-solid.jpg"},"seo_title":"Best Headless CMS for Open Source","code_example":"","videos":[]}},{"_id":"5d4c2260bb97e152424ac9f6","slug":"content-management-system-for-press-websites","title":"Content Management System for Press Websites","content":"<p>Global organizations use the Cosmic JS Content Management System to publish content like blogs, news updates, press releases, quarterly financials, case studies and more. With Cosmic JS, press teams can publish multi-language content localized to over 400 regions, all from the same Dashboard. Approval Workflows, Revision History and Content Preview assist press directors as they manage content for upcoming campaigns in collaboration with their content creators. The Cosmic JS headless Content Management System approach promotes the most collaboration and flexibility for your team.<br><br></p><h3>What is Headless CMS Software?</h3><p>Headless CMS Software works by providing non-technical editors with a Dashboard UI to model, create and publish content while providing developers with API tools and resources to integrate content with any website or app. By decoupling content from code, teams create a central content repository that can power all of their content-powered applications.&nbsp;</p>","metafields":[{"value":"Content Management System for Press Websites","key":"solution_name","title":"Solution Name","type":"text","children":null},{"value":"39b60450-9f54-11e9-ac09-4be8a5631b5e-Hostmaker.png","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/39b60450-9f54-11e9-ac09-4be8a5631b5e-Hostmaker.png","imgix_url":"https://imgix.cosmicjs.com/39b60450-9f54-11e9-ac09-4be8a5631b5e-Hostmaker.png"},{"object_type":"case-studies","value":"596663e8880d69fb6c000194,5b743e111a739a78a5f0725b,5be9ca96cc3f3e2ce66ce511","key":"case_studies","title":"Case Studies","type":"objects","children":null,"objects":[{"_id":"596663e8880d69fb6c000194","slug":"joblift-elevates-their-stack","title":"Joblift Elevates Their Stack ","content":"<p>In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, <a href=\"https://joblift.co.uk\" rel=\"noopener noreferrer\" target=\"_blank\">Joblift</a> seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/16ac66c0-03d7-11e9-a9c3-c1326db90b81-DrzF-2BX0AA0WTE.jpg-large.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Joblift manages localized content to serve Job, Press and Blog feeds to its various markets, including the UK, Netherlands and Germany. Easy user roles and permissions equip their team with the tools they need to seamlessly run a global organization.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic has completely sped up our ability to upload our content easily and efficiently. With Cosmic we now have a smooth process for uploading press releases which reflects the quality content on our website.&rdquo;</p><p><cite>&mdash; Ashleigh Grady, Content Editor and Marketing Manager</cite></p></blockquote>","metafields":[{"value":"Joblift","key":"company","title":"Company","type":"text","children":null},{"value":"Career Services","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T18:01:12.194Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-12-19T21:44:38.361Z"},{"_id":"5b743e111a739a78a5f0725b","slug":"hostmaker-manages-localized-content","title":"Hostmaker Manages Localized Content ","content":"<p><a href=\"https://hostmaker.com/gb/london/\" rel=\"noopener noreferrer\" target=\"_blank\">Hostmaker</a> is a property management company that operates across 9 cities in 6 countries. Hostmaker manages properties that are being rented to vacationers and lodgers from around the world. They take the hosts&#39; home and provide cleaning and decor services prior to listing the location on up to 15 various travel booking platforms. Hostmaker&#39;s hosts love the service for the superior volume that they continue to deliver compared to their competitors, which are driven by proprietary pricing strategies, local market expertise and global industry experience.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/18ece0f0-a64d-11e8-a7de-db2e81aae7c3-IMG_4191.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Hostmaker&#39;s tech team needed a solution for their product marketing managers to update Landing Pages, Case Studies, Press Releases and FAQs for the various markets they manage, including cities such as Rome, London and Barcelona. Localizing content for Hostmaker&#39;s audiences is a mission-critical piece of the marketing strategy that is driving such tremendous growth. Hostmaker chose Cosmic to give their cross-functional team the tools they need to perform their jobs. Now Hostmaker&#39;s developers can build reusable components and scalable content models while their marketers can manage content specific to a particular locale.&nbsp;</p><p style=\"text-align: center;\"><br></p><p><br></p><div class=\"fr-embedly      \" data-original-embed=\"<a href='https://twitter.com/HOSTMAKERCo/status/1035198450739097600' class='embedly-card'></a>\"><a href=\"https://twitter.com/HOSTMAKERCo/status/1035198450739097600\" class=\"embedly-card\"></a></div><p><br></p><p><br></p><blockquote><p>&quot;We&rsquo;ve been using Cosmic for around a year. At first there were some issues with components that prohibited us from performing all our desired tasks, but all those issues were quickly solved by the Cosmic Team. As of now, the tools are great, and have even improved during our use of the platform. It does all the things we need at the moment. As a tool Cosmic has been not only ideal for managing components on the site but adaptive enough for our non-tech users to create landing pages and modify existing content, saving us precious dev time.&rdquo;</p><p><br></p><p><cite>&mdash; Hostmaker Digital Team</cite></p></blockquote>","metafields":[{"value":"Hostmaker","key":"company","title":"Company","type":"text","children":null},{"value":"Hospitality ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Hostmaker is a property management company that operates across 9 cities in 6 countries. Hostmaker manages properties that are being rented to vacationers and lodgers from around the world. They take the hosts' home and provide cleaning and decor services prior to listing the location on up to 15 various travel booking platforms. Hostmaker's hosts love the service for the superior volume that they continue to deliver compared to their competitors, which are driven by proprietary pricing strategies, local market expertise and global industry experience. \n\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-01T22:26:36.367Z","created_by":"5716b504e9c686d006000073","created":"2018-08-15T14:52:01.115Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-09-25T15:10:44.600Z"},{"_id":"5be9ca96cc3f3e2ce66ce511","slug":"road-redemption-launches-a-marketing-microsite","title":"Road Redemption Launches a Marketing Microsite","content":"<p dir=\"ltr\"><a href=\"http://www.tripwireinteractive.com\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a>, a leading entertainment software developer and publisher founded in 2005, recently launched its corporate website on Cosmic. The Tripwire Interactive team can now easily manage microsite content for each game with a dedicated studio manager as its content creator. This is important as Tripwire is always debuting new marketing campaigns to accompany game launches.&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/88ed0170-e6ab-11e8-93f0-a94cde6f34a7-22181530_1681202368577875_2605572198226217292_o.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><a href=\"http://roadredemption.tripwireinteractive.com\" rel=\"noopener noreferrer\" target=\"_blank\">Road Redemption</a> is the first of many games to have innovative content creator access provided via a headless CMS API that delivers the best of both worlds for cross-functional teams. <a href=\"https://cosmicjs.com/case-studies/tripwire-interactive-builds-a-react-corporate-website\" rel=\"noopener noreferrer\" target=\"_blank\">Read more</a> about how Tripwire Interactive builds apps faster using Cosmic.</p><p dir=\"ltr\"><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team\r\nhas been enjoying the ease of use with the new system.&quot;</p><p><cite>&mdash; Owen Liversidge, Lead Developer</cite></p></blockquote><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1395df80-e6ad-11e8-93f0-a94cde6f34a7-BIJMnRzCcAAcEDC.png-large.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"Road Redemption ","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Tripwire Interactive, a leading entertainment software developer and publisher founded in 2005, recently launched its corporate website on Cosmic. The Tripwire Interactive team can now easily manage microsite content for each game with a dedicated studio manager as its content creator. This is important as Tripwire is always debuting new marketing campaigns to accompany game launches. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png","imgix_url":"https://imgix.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-11-12T18:46:46.371Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-11-13T21:30:43.964Z"}]},{"repeater_fields":"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\"","value":"react-cosmedium-blog","key":"app_slugs","title":"App Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"react-cosmedium-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"simple-react-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"simple-vue-blog","type":"text","required":false}]}]},{"repeater_fields":"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\"","value":"contact-form","key":"extension_slugs","title":"Extension Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"contact-form","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"wordpress-importer","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"unsplash-photos","type":"text","required":false}]}]},{"key":"testimonial","title":"Testimonial","type":"html-textarea","children":null,"value":"<p>&quot;As a tool Cosmic has been not only ideal for managing components on the site but adaptive enough for our non-tech users to create landing pages and modify existing content, saving us precious dev time.&rdquo;</p>"},{"value":"Hostmaker Digital Team","key":"testimonial_credit","title":"Testimonial Credit","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created":"2019-08-08T13:23:44.641Z","created_at":"2019-07-08T15:01:03.706Z","modified_at":"2019-08-08T13:24:56.374Z","status":"published","locale":null,"published_at":"2019-08-08T13:24:56.374Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"order":19,"metadata":{"solution_name":"Content Management System for Press Websites","image":{"url":"https://cdn.cosmicjs.com/39b60450-9f54-11e9-ac09-4be8a5631b5e-Hostmaker.png","imgix_url":"https://imgix.cosmicjs.com/39b60450-9f54-11e9-ac09-4be8a5631b5e-Hostmaker.png"},"case_studies":[{"_id":"596663e8880d69fb6c000194","slug":"joblift-elevates-their-stack","title":"Joblift Elevates Their Stack ","content":"<p>In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, <a href=\"https://joblift.co.uk\" rel=\"noopener noreferrer\" target=\"_blank\">Joblift</a> seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/16ac66c0-03d7-11e9-a9c3-c1326db90b81-DrzF-2BX0AA0WTE.jpg-large.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Joblift manages localized content to serve Job, Press and Blog feeds to its various markets, including the UK, Netherlands and Germany. Easy user roles and permissions equip their team with the tools they need to seamlessly run a global organization.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic has completely sped up our ability to upload our content easily and efficiently. With Cosmic we now have a smooth process for uploading press releases which reflects the quality content on our website.&rdquo;</p><p><cite>&mdash; Ashleigh Grady, Content Editor and Marketing Manager</cite></p></blockquote>","metafields":[{"value":"Joblift","key":"company","title":"Company","type":"text","children":null},{"value":"Career Services","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T18:01:12.194Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-12-19T21:44:38.361Z","metadata":{"company":"Joblift","industry_type":"Career Services","teaser":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","logo":{"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}}},{"_id":"5b743e111a739a78a5f0725b","slug":"hostmaker-manages-localized-content","title":"Hostmaker Manages Localized Content ","content":"<p><a href=\"https://hostmaker.com/gb/london/\" rel=\"noopener noreferrer\" target=\"_blank\">Hostmaker</a> is a property management company that operates across 9 cities in 6 countries. Hostmaker manages properties that are being rented to vacationers and lodgers from around the world. They take the hosts&#39; home and provide cleaning and decor services prior to listing the location on up to 15 various travel booking platforms. Hostmaker&#39;s hosts love the service for the superior volume that they continue to deliver compared to their competitors, which are driven by proprietary pricing strategies, local market expertise and global industry experience.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/18ece0f0-a64d-11e8-a7de-db2e81aae7c3-IMG_4191.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Hostmaker&#39;s tech team needed a solution for their product marketing managers to update Landing Pages, Case Studies, Press Releases and FAQs for the various markets they manage, including cities such as Rome, London and Barcelona. Localizing content for Hostmaker&#39;s audiences is a mission-critical piece of the marketing strategy that is driving such tremendous growth. Hostmaker chose Cosmic to give their cross-functional team the tools they need to perform their jobs. Now Hostmaker&#39;s developers can build reusable components and scalable content models while their marketers can manage content specific to a particular locale.&nbsp;</p><p style=\"text-align: center;\"><br></p><p><br></p><div class=\"fr-embedly      \" data-original-embed=\"<a href='https://twitter.com/HOSTMAKERCo/status/1035198450739097600' class='embedly-card'></a>\"><a href=\"https://twitter.com/HOSTMAKERCo/status/1035198450739097600\" class=\"embedly-card\"></a></div><p><br></p><p><br></p><blockquote><p>&quot;We&rsquo;ve been using Cosmic for around a year. At first there were some issues with components that prohibited us from performing all our desired tasks, but all those issues were quickly solved by the Cosmic Team. As of now, the tools are great, and have even improved during our use of the platform. It does all the things we need at the moment. As a tool Cosmic has been not only ideal for managing components on the site but adaptive enough for our non-tech users to create landing pages and modify existing content, saving us precious dev time.&rdquo;</p><p><br></p><p><cite>&mdash; Hostmaker Digital Team</cite></p></blockquote>","metafields":[{"value":"Hostmaker","key":"company","title":"Company","type":"text","children":null},{"value":"Hospitality ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Hostmaker is a property management company that operates across 9 cities in 6 countries. Hostmaker manages properties that are being rented to vacationers and lodgers from around the world. They take the hosts' home and provide cleaning and decor services prior to listing the location on up to 15 various travel booking platforms. Hostmaker's hosts love the service for the superior volume that they continue to deliver compared to their competitors, which are driven by proprietary pricing strategies, local market expertise and global industry experience. \n\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-01T22:26:36.367Z","created_by":"5716b504e9c686d006000073","created":"2018-08-15T14:52:01.115Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-09-25T15:10:44.600Z","metadata":{"company":"Hostmaker","industry_type":"Hospitality ","teaser":"Hostmaker is a property management company that operates across 9 cities in 6 countries. Hostmaker manages properties that are being rented to vacationers and lodgers from around the world. They take the hosts' home and provide cleaning and decor services prior to listing the location on up to 15 various travel booking platforms. Hostmaker's hosts love the service for the superior volume that they continue to deliver compared to their competitors, which are driven by proprietary pricing strategies, local market expertise and global industry experience. \n\n\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg"}}},{"_id":"5be9ca96cc3f3e2ce66ce511","slug":"road-redemption-launches-a-marketing-microsite","title":"Road Redemption Launches a Marketing Microsite","content":"<p dir=\"ltr\"><a href=\"http://www.tripwireinteractive.com\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a>, a leading entertainment software developer and publisher founded in 2005, recently launched its corporate website on Cosmic. The Tripwire Interactive team can now easily manage microsite content for each game with a dedicated studio manager as its content creator. This is important as Tripwire is always debuting new marketing campaigns to accompany game launches.&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/88ed0170-e6ab-11e8-93f0-a94cde6f34a7-22181530_1681202368577875_2605572198226217292_o.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><a href=\"http://roadredemption.tripwireinteractive.com\" rel=\"noopener noreferrer\" target=\"_blank\">Road Redemption</a> is the first of many games to have innovative content creator access provided via a headless CMS API that delivers the best of both worlds for cross-functional teams. <a href=\"https://cosmicjs.com/case-studies/tripwire-interactive-builds-a-react-corporate-website\" rel=\"noopener noreferrer\" target=\"_blank\">Read more</a> about how Tripwire Interactive builds apps faster using Cosmic.</p><p dir=\"ltr\"><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team\r\nhas been enjoying the ease of use with the new system.&quot;</p><p><cite>&mdash; Owen Liversidge, Lead Developer</cite></p></blockquote><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1395df80-e6ad-11e8-93f0-a94cde6f34a7-BIJMnRzCcAAcEDC.png-large.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"Road Redemption ","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Tripwire Interactive, a leading entertainment software developer and publisher founded in 2005, recently launched its corporate website on Cosmic. The Tripwire Interactive team can now easily manage microsite content for each game with a dedicated studio manager as its content creator. This is important as Tripwire is always debuting new marketing campaigns to accompany game launches. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png","imgix_url":"https://imgix.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-11-12T18:46:46.371Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-11-13T21:30:43.964Z","metadata":{"company":"Road Redemption ","industry_type":"Gaming","teaser":"Tripwire Interactive, a leading entertainment software developer and publisher founded in 2005, recently launched its corporate website on Cosmic. The Tripwire Interactive team can now easily manage microsite content for each game with a dedicated studio manager as its content creator. This is important as Tripwire is always debuting new marketing campaigns to accompany game launches. \n","logo":{"url":"https://cdn.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png","imgix_url":"https://imgix.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png"}}}],"app_slugs":[{"slug":"react-cosmedium-blog"},{"slug":"simple-react-blog"},{"slug":"simple-vue-blog"}],"extension_slugs":[{"slug":"contact-form"},{"slug":"wordpress-importer"},{"slug":"unsplash-photos"}],"testimonial":"<p>&quot;As a tool Cosmic has been not only ideal for managing components on the site but adaptive enough for our non-tech users to create landing pages and modify existing content, saving us precious dev time.&rdquo;</p>","testimonial_credit":"Hostmaker Digital Team"}},{"_id":"5f57d74a56754600078d884f","order":19,"slug":"dashboard-updates-new-thumbnails-search-and-filter-and-more","title":"Dashboard Updates: New Thumbnails, Search and Filter, and more","content":"<p>We&#39;re happy to announce some updates that will make your workflows in the <a href=\"https://app.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic admin dashboard</a> easier and more enjoyable. This release includes the following updates:</p><ol><li>Object thumbnails</li><li>New Object Metafield selection logic</li><li>Search / filter fixes</li><li>Bucket thumbnail now in settings</li></ol><p><br><strong>1. Object Thumbnails</strong><br>You can now add thumbnails to Objects. This gives you the ability to add visual differentiation in your Objects table. You can also select your Object thumbnail from any Image Metafield.<br><br><span class=\"fr-video fr-dvb fr-draggable fr-active\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi\" controls=\"\" src=\"https://cdn.cosmicjs.com/70c528c0-f20c-11ea-a3de-692d5982216c-Object-Thumbnails.mp4\" style=\"width: 100%;\">Your browser does not support HTML5 video.</video></span></p><p><br><strong>2. New Object Metafield Selection Logic</strong><br>Before, single Object Metafields gave you the option to select Objects via a select dropdown. This made it impossible to select from an Object Type list of more than 1,000 (our API limit). Now, you can use the <em>Select Object</em> modal to search as well as use pagination to find your Objects. Plus you can also &quot;Quick Add&quot; an Object Type, which should help you create Object relationships much faster.<br><br><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi\" controls=\"\" src=\"https://cdn.cosmicjs.com/dfb5db50-f20f-11ea-a3de-692d5982216c-Object-Select.mp4\" style=\"width: 100%;\">Your browser does not support HTML5 video.</video></span></p><p><br><strong>3. Search / Filter Fixes</strong><br>You will now notice that the Search / Filter modal has been simplified and improved. Search for content quickly and easily.<br><br><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi\" controls=\"\" src=\"https://cdn.cosmicjs.com/eac4ef50-f2c7-11ea-a3de-692d5982216c-Search-Filter.mp4\" style=\"width: 100%;\">Your browser does not support HTML5 video.</video></span></p><p><br><strong>4. Bucket Thumbnail</strong><br>You can now edit your Bucket thumbnail from the Bucket Settings page.<br><br><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi\" controls=\"\" src=\"https://cdn.cosmicjs.com/83a4b3c0-f20c-11ea-a3de-692d5982216c-Bucket-Thumbnail.mp4\" style=\"width: 100%;\">Your browser does not support HTML5 video.</video></span></p><p data-empty=\"true\"><br>We hope you enjoy these dashboard updates. Please let us know if you have any questions / comments in our <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Slack channel</a>, and <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a> for the latest updates to the Cosmic <a href=\"https://www.cosmicjs.com/headless-cms\">Headless CMS</a>.</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"7Wu4ElXGLv","value":"2020-09-10"},{"children":null,"type":"object","title":"Author","key":"author","id":"3wA0xyKjVF","value":"5768b253163172890e00002c","object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"jR2v3tL2AL","value":"cb8b71c0-f378-11ea-a3de-692d5982216c-thumbnails.png","url":"https://cdn.cosmicjs.com/cb8b71c0-f378-11ea-a3de-692d5982216c-thumbnails.png","imgix_url":"https://imgix.cosmicjs.com/cb8b71c0-f378-11ea-a3de-692d5982216c-thumbnails.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2020-09-08T19:11:06.145Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-15T15:41:45.761Z","created":"2020-09-08T19:11:06.145Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2020-09-15T15:41:45.761Z","thumbnail":"https://imgix.cosmicjs.com/cb8b71c0-f378-11ea-a3de-692d5982216c-thumbnails.png","metadata":{"published_date":"2020-09-10","author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":"https://cdn.cosmicjs.com/cb8b71c0-f378-11ea-a3de-692d5982216c-thumbnails.png","imgix_url":"https://imgix.cosmicjs.com/cb8b71c0-f378-11ea-a3de-692d5982216c-thumbnails.png"}}},{"_id":"60061c13bb070b0007de5b4f","order":19,"slug":"graphql-vs-rest-a-quick-guide","title":"GraphQL vs. REST: A Quick Guide","content":"<p>Developers have long faced challenges with API standardization.</p><p>REST was a big improvement over SOAP, providing greater flexibility in standardized data formats like JSON, and increased performance.<br><br>Now GraphQL has emerged to provide developers a new way to interact with data services; it&#39;s proved to be a very popular alternative to REST.</p><p>In this guide, we will show you the benefits and drawbacks of using REST and GraphQL to help you decide which is best suited for your development projects.</p><p><br></p><p><img src=\"https://cdn.cosmicjs.com/7d9a6f90-7080-11eb-87a2-9be5e90cdf74-GraphQLvsRest.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><h2>The Struggle for Standardization: GraphQL vs. REST</h2><p>In the simplest sense, GraphQL and REST are <a href=\"https://www.cosmicjs.com/blog/what-is-graphql#graphql-vs-rest\">two different ways to call functions</a> over a network. Here&rsquo;s a quick overview of each.&nbsp;</p><h3>What is REST?</h3><p>REST stands for <a href=\"https://www.codecademy.com/articles/what-is-rest\">Representational State Transfer</a>. It&rsquo;s an API design paradigm meant to standardize web services via a series of constraints and was created in 2000. In particular, REST\r\nis stateless and was built so that any compliant web service can interact with textual resource representations. In other words, using REST when building a web service makes it easier for clients and servers to understand each other even when one does\r\nnot have knowledge of the other.</p><p>It also means that both the client side and server side can take an independent, modular approach to their evolution. As long as they follow the right format to send requests and responses, they&rsquo;ll understand each other regardless of future code\r\nupdates.</p><h3>What is GraphQL?</h3><p>GraphQL is a relatively new API query language that was developed and <a href=\"https://facebook.github.io/react/blog/2015/02/20/introducing-relay-and-graphql.html\">open-sourced by Facebook</a> in 2012. It&rsquo;s designed to handle the complex, nested data dependencies found in modern applications. Specifically, it enables <a href=\"https://css-tricks.com/declarative-data-fetching-graphql/\">declarative data fetching</a> to allow clients to specify exactly what data is needed from an API.</p><p>GraphQL was designed with efficiency and flexibility in mind with particular attention to how web services have evolved since 2000. Since it isn&rsquo;t tied to any specific database or storage engine, developers don&rsquo;t need special knowledge of\r\nthe backend to use it. Instead, it can be applied anywhere an API is used, and it&rsquo;s backed by the code or already existing data.</p><h2>GraphQL vs. REST: What&rsquo;s the Difference?</h2><p>REST and GraphQL are fundamentally similar in that they both include the idea of resources with specific IDs. <a href=\"https://docs.cosmicjs.com/rest-api/\">REST fetches data with GET</a> and <a href=\"https://docs.cosmicjs.com/graphql-api/methods-overview.html\">GraphQL uses POST</a>, but they can both return JSON data in that request. They can also both handle many different types of resources and will ensure that a web API functions correctly for a given client.</p><p>Although REST has been the standard for a while, GraphQL has several advantages. It also has three distinct features that developers must consider before working with it. These are:</p><ul><li><strong>Different handling of endpoints:&nbsp;</strong>In REST, the endpoint is tied to the identity of a resource. That means lots of endpoints with specific shapes. In contrast, GraphQL separates them. That means one endpoint regardless of the query&rsquo;s\r\ncomplexity.</li><li><strong>Different handling of resources:</strong> In REST, the server determines the shape of the resource. When a client asks for a resource, it can result in the return of too much or too little information (called over-fetching or under-fetching). In GraphQL, the server declares what resources exist and the client asks for what it needs. That makes it easier to receive more specific data from the server.</li><li><strong>Different</strong><!--[endif]-->\r\n<strong>handling of caching:</strong> REST can handle caching using the GET method. However, GraphQL uses POST for fetching data, and entities are not identified by URLs &ndash; which means GraphQL lacks native caching functionality. Some libraries exist that can help developers get around this, or caching needs can be handled on the client&rsquo;s end. GraphQL generally posits that caching should be handled by clients.</li></ul><h2>So, When Should I Use REST? When Do I Use GraphQL?</h2><p>GraphQL and REST both have advantages that make them ideal in different situations. GraphQL incorporates a lot of REST elements but takes a more advanced approach. It&rsquo;s also a favorite among many developers working with APIs.</p><p>Yet, projects still crop up where REST is better suited to handle things. In general, use REST when:</p><ul><li><strong>A simpler web service is involved:&nbsp;</strong>REST was developed when web services were still relatively simple. It&rsquo;s perfectly fine to use it for projects that don&rsquo;t need a hyper-efficient way to handle endpoints or resources.</li><li><strong>Maximum compatibility is desired:&nbsp;</strong>REST is more established and enjoys widespread support. As a result, it&rsquo;s easier to find more tools, integration, and infrastructure for a more specialized project.</li></ul><p>REST can accomplish the job beautifully in both of these cases. In contrast, go with GraphQL when a project must:</p><ul><li><strong>Account for increased mobile usage:&nbsp;</strong>GraphQL creates more efficient data loading by minimizing the data that must be transferred over a network. That helps underpowered devices or those on poor-quality networks access web services\r\nwith minimal disruption.</li><li><strong>Call many nested endpoints in one request:&nbsp;</strong>GraphQL solves the problem of over- or under-fetching data and can retrieve multiple resources with a single query. It can call many related functions without making multiple trips, which\r\nmakes the entire process more straightforward.</li></ul><h2>What GraphQL and REST Mean for Jamstack</h2><p>Another key instance to consider the advantages of GraphQL vs. REST occurs when <a href=\"https://www.cosmicjs.com/blog/how-to-build-a-jamstack-website\">building a site using Jamstack</a>. It&rsquo;s an emerging architecture that decouples the frontend\r\nand backend, emphasizing client-side JavaScript, reusable APIs, and prebuilt Markup. The result is the functionality of a dynamic site with the advantages (load time, security, etc.) of a &ldquo;static&rdquo; one.</p><p>Both GraphQL and REST APIs can be used with Jamstack, especially when a headless CMS is involved. And while there&rsquo;s no one right answer as to which is better here, consider the following:</p><ul><li><strong>Over-fetching can slow down a site:&nbsp;</strong>A REST API that returns too much data can lead to a frustrating user experience, defeating the benefit of using Jamstack in the first place.</li><li><strong>REST still has more integrations and infrastructure:&nbsp;</strong>Although most major services are adopting GraphQL, sites leveraging highly specialized third-party services may need to use REST.</li></ul><h2>Key Takeaways When Considering GraphQL vs. REST</h2><p>Comparing GraphQL vs. REST? We&rsquo;ve briefly covered some instances of when one might be more effective in a project than the other.</p><p>Ultimately, they&rsquo;re two different ways to accomplish mostly the same things. REST is the older of the two. It enjoys more widespread support and infrastructure. In contrast, GraphQL solves some of the long-standing shortcomings of REST, especially\r\nby increasing the amount of control developers have over what data they call. These differences have implications when using architecture like Jamstack.</p><p>Luckily, Cosmic offers both a REST and a GraphQL API. If you are not ready to make the switch to GraphQL, or just prefer REST, the Cosmic REST API gives you GraphQL-like declarative data fetching using <span data-reactroot=\"\" data-token-index=\"1\" spellcheck=\"false\">props</span>. See <a data-reactroot=\"\" data-token-index=\"3\" href=\"https://docs-v2.cosmicjs.com/api-reference/objects#using-props\" rel=\"noopener noreferrer\" target=\"_blank\">the documentation</a> for more info.</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"4AWVVxfzwq","value":"5f5fac071936450007d8a01c","required":true,"object_type":"authors","object":{"_id":"5f5fac071936450007d8a01c","slug":"kyle-meagher","title":"Kyle Meagher","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"hsMOJCxIAj","value":"kylemeags"},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D2rdKO4lEL","value":"e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2020-09-14T17:44:39.110Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-14T17:45:09.251Z","created":"2020-09-14T17:44:39.110Z","status":"published","published_at":"2020-09-14T17:44:39.110Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"6fj3pa3BAR","value":"<p>GraphQL vs. ReST - which works better for your application? This article compares similarities and key differences, and provides considerations for when to choose one or the other.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"iSU0dVwslU","value":"7d9a6f90-7080-11eb-87a2-9be5e90cdf74-GraphQLvsRest.png","url":"https://cdn.cosmicjs.com/7d9a6f90-7080-11eb-87a2-9be5e90cdf74-GraphQLvsRest.png","imgix_url":"https://imgix.cosmicjs.com/7d9a6f90-7080-11eb-87a2-9be5e90cdf74-GraphQLvsRest.png"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"ewyQFb0gdj","value":"GraphQL vs. ReST - which works better for your application? This article compares similarities and key differences, and provides considerations for when to choose one or the other."},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"p4WP1hcCfa","value":"2021-02-16"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2021-01-18T23:38:59.881Z","created_by":"5f8088982aa32f00093977bb","modified_at":"2021-02-17T17:08:21.280Z","created":"2021-01-18T23:38:59.881Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/94c327e0-707e-11eb-87a2-9be5e90cdf74-GraphQLvsRest.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2021-02-17T17:08:21.280Z","metadata":{"author":{"_id":"5f5fac071936450007d8a01c","slug":"kyle-meagher","title":"Kyle Meagher","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"hsMOJCxIAj","value":"kylemeags"},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D2rdKO4lEL","value":"e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2020-09-14T17:44:39.110Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-14T17:45:09.251Z","created":"2020-09-14T17:44:39.110Z","status":"published","published_at":"2020-09-14T17:44:39.110Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","metadata":{"username":"kylemeags","profile_picture":{"url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}}},"teaser":"<p>GraphQL vs. ReST - which works better for your application? This article compares similarities and key differences, and provides considerations for when to choose one or the other.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/7d9a6f90-7080-11eb-87a2-9be5e90cdf74-GraphQLvsRest.png","imgix_url":"https://imgix.cosmicjs.com/7d9a6f90-7080-11eb-87a2-9be5e90cdf74-GraphQLvsRest.png"},"seo_meta_description":"GraphQL vs. ReST - which works better for your application? This article compares similarities and key differences, and provides considerations for when to choose one or the other.","published_date":"2021-02-16"}},{"_id":"5965371558da88ca55000589","slug":"switching-from-modx-to-cosmic-js","title":"Switching from MODx to Cosmic","content":"<p>Water is the most vital element for life and content is the most vital element for a website. <a href=\"https://pcwa.net\" rel=\"noopener noreferrer\" target=\"_blank\">Placer County Water Agency</a> trusts Cosmic to deliver content and manage files safely and securely in the cloud to provide updates to its thousands of citizen consumers in the Placer County area.&nbsp;</p><p style=\"text-align: center;\"><img src=\"https://cosmicjs.com/uploads/8bdf0680-65d8-11e7-834b-8139e5e75c33-pcwa.svg\" class=\"fr-fic fr-dii\" style=\"max-width: 500px; width: 100%;\"></p><h3><br></h3><h3>Before and After</h3><blockquote><p>&quot;Prior to using Cosmic as as CMS, we were using a system called MODx. &nbsp;Our internal approach was a bit different. The system was restrictive and often more confusing for web authors (myself), and was a bit bloated and mis-understood for content\r\neditors (everyone else at our organization). &nbsp;Our new Angular + Cosmic stack works great because instead of having one un-appreciated monolithic system, we have two separate and welcomed systems that are better understood and more frequently utilized\r\nby both types of end-users.&quot;</p></blockquote><p style=\"text-align: center;\"><img src=\"https://cosmicjs.com/uploads/4c1f5580-65d9-11e7-90d7-b12899dcdab2-Untitled%20design-6.png\" class=\"fr-fic fr-dii\" style=\"max-width: 500px; width: 100%;\"></p><blockquote><p>&quot;Cosmic allows members throughout our organization to develop our Applications in a way that we just haven&rsquo;t seen before.&quot;</p><p><cite>&mdash; Abe Hendricks, Government Agency Information Systems Analyst</cite></p></blockquote>","metafields":[{"value":"PCWA","key":"company","title":"Company","type":"text","children":null},{"value":"Water is the most vital element for life and content is the most vital element for a website. Placer County Water Agency trusts Cosmic to deliver content and manage files safely and securely in the cloud to provide updates to its thousands of citizen consumers in the Placer County area. ","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"b00334e0-c3d5-11e7-8554-abcc312ecfae-pcwa.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/b00334e0-c3d5-11e7-8554-abcc312ecfae-pcwa.png","imgix_url":"https://imgix.cosmicjs.com/b00334e0-c3d5-11e7-8554-abcc312ecfae-pcwa.png"},{"value":"Government Agency","key":"industry_type","title":"Industry Type","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-11T20:37:41.099Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","order":19,"publish_at":null,"metadata":{"company":"PCWA","teaser":"Water is the most vital element for life and content is the most vital element for a website. Placer County Water Agency trusts Cosmic to deliver content and manage files safely and securely in the cloud to provide updates to its thousands of citizen consumers in the Placer County area. ","logo":{"url":"https://cdn.cosmicjs.com/b00334e0-c3d5-11e7-8554-abcc312ecfae-pcwa.png","imgix_url":"https://imgix.cosmicjs.com/b00334e0-c3d5-11e7-8554-abcc312ecfae-pcwa.png"},"industry_type":"Government Agency"}},{"_id":"60060c7ff61e39000770e351","order":20,"slug":"jamstack-explained-in-5-minutes","title":"Jamstack Explained In 5 Minutes","content":"<p dir=\"ltr\">The modern web is far too complex; full of bloated websites, slow loading speeds, and vulnerabilities that can whet any hacker&#39;s appetite.&nbsp;</p><p dir=\"ltr\">It can be a challenge for developers to meet users&#39; ever-changing needs and build a website that checks all the boxes, yet is still fun to work with. At least, it was a challenge until Jamstack came into the picture.</p><p dir=\"ltr\">In this article, we&#39;ll explain:</p><ul><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#jamstack\">What is Jamstack?</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#benefits\">Why use Jamstack?</a></p></li><li><p dir=\"ltr\"><a href=\"#compare\">Jamstack vs. Traditional Methods</a></p></li><li><p dir=\"ltr\"><a href=\"#get-started\">How to get started with Jamstack</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#headless\">How to incorporate a Jamstack-ready CMS</a></p></li></ul><p><br></p><p><img data-image=\"https://imgix.cosmicjs.com/eb3f4150-6a19-11eb-afd3-010bb5d66a3e-jamstack.jpg?w=1300&auto=format\" src=\"https://imgix.cosmicjs.com/eb3f4150-6a19-11eb-afd3-010bb5d66a3e-jamstack.jpg?w=10&auto=format\" style=\"width: 100%;\" class=\"fr-fic fr-dib lazy-load\"></p><p><br></p><h2 dir=\"ltr\" id=\"jamstack\">What Is Jamstack?</h2><p dir=\"ltr\">Jamstack is the latest breakthrough in web and app development, and much more than a trend. It&#39;s a modern architecture that offers both security and performance while delivering an improved developer experience.&nbsp;</p><p dir=\"ltr\">While much of the web is built on using traditional CMS platforms, Jamstack has the capacity to supersede how developers choose to build websites, and it comes with a host of benefits. From serving pre-generated pages and assets, to infinitely scaling\r\nCDNs, to a simplified developer experience, Jamstack sites are much better equipped than traditional sites to utilize recent breakthroughs in development infrastructure.&nbsp;</p><p dir=\"ltr\">But what is it, what makes up a Jamstack?&nbsp;</p><p dir=\"ltr\">Jamstack is a technical development stack used by developers with 3 core components. A tech stack is simply a set of technologies that an organization uses when building a software application. Tech Stacks are the programming languages, frameworks, libraries, and other tools used by developers. The <em>Jamstack</em><em>&nbsp;</em>is a modern stack using JavaScript, APIs, and Markup. This web architecture is used for building faster websites and makes them more secure and easier to scale. &nbsp;</p><p dir=\"ltr\">Legacy web apps must run on web servers, which slows things down and makes them susceptible to attacks. On the other hand, Jamstack websites separate the front-end user interface from the backend databases that power them, enabling pages to be pre-rendered\r\nat run time and pushed to a CDN.&nbsp;</p><h2 dir=\"ltr\">What Does Jamstack Stand For?</h2><p dir=\"ltr\">Coined by Netlify co-founder Mathias Biilmann, Jamstack stands for JavaScript, APIs and Markup and is frequently used in building static websites. These three core components combine to provide unique traits to the stack.</p><h3 dir=\"ltr\">JavaScript</h3><p dir=\"ltr\">The web&#39;s programming language, JavaScript, is responsible for much of the popularity surrounding Jamstack and provides the dynamic elements found in Jamstack applications. Jamstack relies heavily on prebuilt static pages and assets for the front-end.\r\nThese pre-rendered files are served from a CDN directly to the browser.&nbsp;</p><p dir=\"ltr\">JavaScript is then used in conjunction with APIs to communicate with the backend services and enhance these static files, transforming them into experiences.&nbsp;</p><h3 dir=\"ltr\">APIs</h3><p dir=\"ltr\">APIs provide integration capabilities for Jamstack sites, enabling them to connect with third-party services to improve functionality.</p><h3 dir=\"ltr\">Markup</h3><p dir=\"ltr\">Markup provides the formatting code for the static sites pre-rendered at build time before a Jamstack site is deployed to a CDN.</p><h2 dir=\"ltr\" id=\"benefits\">Benefits of Jamstack</h2><p dir=\"ltr\">Developing modern websites using Jamstack architecture provides some benefits when compared to legacy web applications.&nbsp;</p><h3 dir=\"ltr\">Heightened Security</h3><p dir=\"ltr\">Legacy web development applications usually include a tightly coupled database. Databases are server-side technologies, which provides a large area for hackers to attack using various methods, including SQL injection. In Jamstack, there is no database.\r\nYou can still use one, but it&#39;s connected via API. With server-side processes handled by APIs, there is less area to attack, resulting in heightened security.&nbsp;</p><h3 dir=\"ltr\">Increased Speed</h3><p dir=\"ltr\">Files in a Jamstack are prebuilt and served over a CDN, thus, Jamstack sites are blazing fast. This increase in speed leads to happier users, lower page load times, and higher user engagement. This speed is not limited to front-facing content - flexible\r\nbackends make applications faster to market and circumvent legacy platforms&#39; limitations.&nbsp;</p><h3 dir=\"ltr\">Optimized Scalability</h3><p dir=\"ltr\">The ability to serve files over a CDN means less server support is required to manage a Jamstack site. Deployment requires that the files be sent to a CDN, enabling them to be served anywhere, facilitating the scalability that legacy applications can\r\nsometimes struggle with.&nbsp;</p><h2 dir=\"ltr\" id=\"compare\">Jamstack vs LAMPstack vs MEANstack</h2><p dir=\"ltr\">The Jamstack approach differs from other software development stacks such as LAMPstack or MEANstack in that they are made up of different components. LAMPstack includes Linux, Apache, MySQL and PHP, and is used for Linux hosted websites. On the other\r\nhand, MEAN is an acronym for MongoDB, ExpressJS, AngularJS and Nodejs and is used for building dynamic sites and web applications.</p><p dir=\"ltr\">Both of these stacks include connections to databases, and while LAMP and MEAN have specific applications where they will be most appropriate, Jamstack is quickly overtaking them.</p><h2 dir=\"ltr\" id=\"get-started\">Getting Started With Jamstack</h2><p dir=\"ltr\">For Jamstack to be effective, there are five components required: A JavaScript framework, a static site generator, a headless CMS, a content delivery network, and services to connect via APIs.&nbsp;</p><h3 dir=\"ltr\">Choose The Right JavaScript Framework for You</h3><p dir=\"ltr\">JavaScript forms the backbone of Jamstack development and provides a wealth of frameworks for developers to choose from. JavaScript is used for everything from single-page applications and progressive web applications. Most developers building for the\r\nweb will already be familiar, but popular starting points are Angular, Vue, and React.&nbsp;</p><h3 dir=\"ltr\">Generate Static Sites with an SSG</h3><p dir=\"ltr\">The next step in getting up and running with Jamstack is picking the right static site generator to launch your static sites. SSGs create static sites from a set of HTML files and deploy them to a server or CDN. In keeping with the popularity of JavaScript\r\nframeworks, the likes of Gatsby and Next have sprung up to offer static site generation and more. Still, there are also a host of other tools available that can be used for the same purpose.&nbsp;</p><h3 dir=\"ltr\">Add A Headless CMS&nbsp;</h3><p dir=\"ltr\">Next, if you want to get the most out of your Jamstack website, you need to add a <a href=\"https://www.cosmicjs.com/blog/best-headless-cms-list\">headless CMS</a> to the equation. A headless CMS does away with traditional CMS platforms&#39; legacy architecture and provides freedom for developers to choose their front-end interface.&nbsp;</p><p dir=\"ltr\">A headless CMS includes a backend repository for storing content and connects to different front-ends by using APIs. However, a headless CMS can consist of content authoring tools and a clean interface that can be used by less technical teams.&nbsp;</p><p dir=\"ltr\">Jamstack is a developer-focused architecture. However, the end-user will still rely on content input from marketers and other non-technical personnel. For enterprises that want to use Jamstack websites for multiple purposes, the ability to connect to\r\na headless CMS with APIs and then let that CMS manage the content experience is pivotal.&nbsp;</p><h3 dir=\"ltr\">Deploy Your Digital Experience to a CDN</h3><p dir=\"ltr\">Next is the CDN where a Jamstack site is deployed. Building a beautiful experience with your static site generator and headless CMS wouldn&#39;t be half as good if there was nowhere to host it. For Jamstack sites, there are a host of options including\r\nNetlify, Vercel and Cloudflare.</p><h3 dir=\"ltr\">Connect to Services with APIs</h3><p dir=\"ltr\">Finally, you can get the most out of your Jamstack site by connecting to different services with APIs to achieve more functionality. If you need to integrate an eCommerce solution to your Jamstack site or enable videos or comments and interactivity on\r\nyour website, then simply connect to the appropriate service using APIs.</p><h2 dir=\"ltr\" id=\"headless\">Cosmic: A Jamstack-ready Headless CMS</h2><p dir=\"ltr\">Choosing a headless CMS to pair with your Jamstack site can be difficult, especially as any headless CMS can theoretically function to build Jamstack sites. However, you want to maximize the quality of your Jamstack sites, while providing a comprehensive\r\ninterface for your developers and an intuitive one for your content creators. In that case, you need a Jamstack-ready headless CMS.&nbsp;</p><p dir=\"ltr\"><a href=\"https://www.cosmicjs.com/\">Cosmic&#39;s headless CMS</a> architecture provides the tools you need to manage content for a Jamstack-powered site or web application and even includes starters and templates to get you off the ground. These templates and examples can fit multiple use cases, no matter your needs.&nbsp;</p><p dir=\"ltr\">For example, you can use Cosmic and database and server to store your products as you construct a <a href=\"https://www.cosmicjs.com/apps/gatsby-ecommerce-website\">Gatsby powered eCommerce website</a> or connect with Cosmic using GraphQL to launch a <a href=\"https://www.cosmicjs.com/apps/react-static-blog\">React static site</a>.&nbsp;</p><p dir=\"ltr\">Learn more about getting started with Jamstack by checking out our Jamstack<a href=\"https://www.cosmicjs.com/apps?q=Jamstack\">&nbsp;applications</a>.&nbsp;</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"n7DBLVcWSj","value":"5f5fac071936450007d8a01c","required":true,"object_type":"authors","object":{"_id":"5f5fac071936450007d8a01c","slug":"kyle-meagher","title":"Kyle Meagher","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"hsMOJCxIAj","value":"kylemeags"},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D2rdKO4lEL","value":"e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2020-09-14T17:44:39.110Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-14T17:45:09.251Z","created":"2020-09-14T17:44:39.110Z","status":"published","published_at":"2020-09-14T17:44:39.110Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"LHjuYjbDKd","value":"<p>Jamstack is the newest stack innovation, and it&#39;s kicking old school app development to the curb. What&#39;s the Jamstack? How can you start using it?</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"CyxHBCMHHU","value":"eb3f4150-6a19-11eb-afd3-010bb5d66a3e-jamstack.jpg","url":"https://cdn.cosmicjs.com/eb3f4150-6a19-11eb-afd3-010bb5d66a3e-jamstack.jpg","imgix_url":"https://imgix.cosmicjs.com/eb3f4150-6a19-11eb-afd3-010bb5d66a3e-jamstack.jpg"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"yLiEdcOPn3","value":"Jamstack is the newest stack innovation, and it's kicking old school app development to the curb. What's the Jamstack? How can you start using it?"},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"a3Vq3iFIoU","value":"2021-02-09"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2021-01-18T22:32:31.456Z","created_by":"5f8088982aa32f00093977bb","modified_at":"2021-02-09T20:15:32.150Z","created":"2021-01-18T22:32:31.456Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/eb3f4150-6a19-11eb-afd3-010bb5d66a3e-jamstack.jpg","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2021-02-09T20:15:32.150Z","metadata":{"author":{"_id":"5f5fac071936450007d8a01c","slug":"kyle-meagher","title":"Kyle Meagher","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"hsMOJCxIAj","value":"kylemeags"},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D2rdKO4lEL","value":"e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2020-09-14T17:44:39.110Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-14T17:45:09.251Z","created":"2020-09-14T17:44:39.110Z","status":"published","published_at":"2020-09-14T17:44:39.110Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","metadata":{"username":"kylemeags","profile_picture":{"url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}}},"teaser":"<p>Jamstack is the newest stack innovation, and it&#39;s kicking old school app development to the curb. What&#39;s the Jamstack? How can you start using it?</p>","featured_image":{"url":"https://cdn.cosmicjs.com/eb3f4150-6a19-11eb-afd3-010bb5d66a3e-jamstack.jpg","imgix_url":"https://imgix.cosmicjs.com/eb3f4150-6a19-11eb-afd3-010bb5d66a3e-jamstack.jpg"},"seo_meta_description":"Jamstack is the newest stack innovation, and it's kicking old school app development to the curb. What's the Jamstack? How can you start using it?","published_date":"2021-02-09"}},{"_id":"5f2c4ceff91f3f00087eed57","order":20,"slug":"introducing-new-bulk-actions","title":"Introducing New Bulk Actions","content":"<p>We are excited to announce a big release that enables you to effortlessly perform new bulk actions from <a href=\"https://app.cosmicjs.com/login\" rel=\"noopener noreferrer\" target=\"_blank\">your Cosmic admin dashboard</a>, giving your team even greater content ops superpowers.</p><p><em>Bulk Edits</em> and <em>Search and Replace</em> are two separate features that provide your team with huge time-savings when you need to make changes affecting multiple <em>Objects</em>. Let&#39;s look at what each feature does and how to use them...</p><h3><br><strong>What are Bulk Edits?<img src=\"https://cdn.cosmicjs.com/b43d27e0-d8d2-11ea-8d02-d3e2c968eb26-bulk-edits-active.png\" style=\"float: right; margin: 20px 20px 20px;\" class=\"fr-fic fr-dib card-shadow col-sm-5 col-xs-12\" alt=\"Bulk Edit Dropdown\"></strong></h3><p>Bulk Edits allow you to edit fields across multiple Objects in your Bucket. For example, editing a <em>Metafield</em> to the same value across multiple Blog Posts used to require you to manually edit the value in every Object. Now, with Bulk Edits, you can do this in a single action saving you minutes of manual work (or hours, or more!).</p><h3><br><br><strong>How to use Bulk Edits</strong></h3><p>To use the Bulk Edits feature:</p><ol><li>Log into your <a href=\"https://app.cosmicjs.com/login\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic account</a>.</li><li>Select your Bucket.</li><li>Go to your Objects table view by selecting any <em>Object Type</em> in the left-hand side nav.</li><li>Use the left-side checkbox next to each Object to select which Objects to perform the action on.</li><li>Click the &quot;Bulk Edit Objects&quot; option from the &quot;Bulk Actions&quot; dropdown at the top of the table.</li><li>Select the fields you want to affect, add your new values, and click &quot;Confirm&quot;.</li></ol><p>You can currently perform bulk edits on Object <em>content</em> and select <em>Metafield</em> values.</p><p>See the video for steps:</p><p><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"true\" class=\"fr-draggable fr-fvc fr-dvi\" controls=\"\" loop=\"true\" src=\"https://cdn.cosmicjs.com/d8273d90-d813-11ea-b635-b511079fe499-bulk-edits.mp4\" style=\"width: 100%;\">Your browser does not support HTML5 video.</video></span></p><p data-empty=\"true\"><br></p><h3><strong>What is Search and Replace?</strong><strong><br><img src=\"https://cdn.cosmicjs.com/91c96c50-d8d2-11ea-8d02-d3e2c968eb26-search-replace-active.png\" style=\"float: right; margin: 20px 20px 20px;\" class=\"fr-fic fr-dii card-shadow col-sm-5 col-xs-12\" alt=\"Search Replace Dropdown\"></strong></h3><p>The Search and Replace bulk action enables you to search and replace text across Objects. For example, if you needed to replace an old link with a new link across multiple Objects and fields, you can now use the Search and Replace bulk action to do this\r\nin a single action within seconds. Before you would have had to manually edit each Object which could have taken minutes (or hours, or more!).</p><p><br></p><h3><strong>How to use</strong><strong><strong>&nbsp;</strong>Search and Replace</strong></h3><p>To use the Search and Replace feature:</p><ol><li>Log into your <a href=\"https://app.cosmicjs.com/login\">Cosmic account</a>.</li><li>Select your Bucket.</li><li>Go to your Objects table view by selecting any Object Type in the left-hand side nav.</li><li>Use the left-side checkbox next to each Object to select which Objects to perform the action on.</li><li>Click the &quot;Search and Replace&quot; option from the &quot;Bulk Actions&quot; dropdown at the top of the table.</li><li>Add the term to search for (case sensitive) and the term that will replace it.</li><li>Select the fields to perform the action on. Click &quot;Confirm&quot;.</li></ol><p>You can currently perform search and replace on Object <em>title</em>, <em>content</em>, and select <em>Metafield</em> values.</p><p>See the video for steps:</p><p><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi\" controls=\"\" src=\"https://cdn.cosmicjs.com/98fe8840-d8cb-11ea-8d02-d3e2c968eb26-search-replace.mp4\" style=\"width: 100%;\">Your browser does not support HTML5 video.</video></span></p><p><br></p><p>Bulk Edits and Search and Replace are two new tools in your Cosmic toolbox to help you achieve the same goal: <strong>saving time</strong>!</p><p data-empty=\"true\">We hope you enjoy using the new bulk actions. Please let us know if you have any questions / comments in our <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Slack channel</a>, and <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a> for the latest updates to the Cosmic <a href=\"https://www.cosmicjs.com/headless-cms\">Headless CMS</a>.</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"gG88bzxZVG","value":"2020-08-11"},{"children":null,"type":"object","title":"Author","key":"author","id":"Iuq7EKixru","value":"5768b253163172890e00002c","object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"SygoenEgM3","value":"529f34a0-db30-11ea-84a8-4b73110d28e6-bulk-actions.jpg","url":"https://cdn.cosmicjs.com/529f34a0-db30-11ea-84a8-4b73110d28e6-bulk-actions.jpg","imgix_url":"https://imgix.cosmicjs.com/529f34a0-db30-11ea-84a8-4b73110d28e6-bulk-actions.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2020-08-06T18:33:19.693Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-10T17:41:22.618Z","created":"2020-08-06T18:33:19.693Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2020-08-11T14:20:39.000Z","thumbnail":"https://imgix.cosmicjs.com/529f34a0-db30-11ea-84a8-4b73110d28e6-bulk-actions.jpg","metadata":{"published_date":"2020-08-11","author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":"https://cdn.cosmicjs.com/529f34a0-db30-11ea-84a8-4b73110d28e6-bulk-actions.jpg","imgix_url":"https://imgix.cosmicjs.com/529f34a0-db30-11ea-84a8-4b73110d28e6-bulk-actions.jpg"}}},{"_id":"6006162c0fd8070007ea0267","order":20,"slug":"static-site-generators-explained-in-5-minutes","title":"Static Site Generators Explained in 5 minutes","content":"<p dir=\"ltr\">If you aren&rsquo;t using or experimenting with static sites, it&rsquo;s time to jump (back) onboard.</p><p dir=\"ltr\">Static content is the future.</p><p dir=\"ltr\">Given the shift away from static sites to their more dynamic counterparts, this might have seemed far-fetched not long ago. However, new methods for building websites - like Jamstack - have grown in popularity, and static sites are in the middle of a\r\nrenaissance.&nbsp;</p><p dir=\"ltr\">Quick Links:</p><ul><li dir=\"ltr\"><a href=\"#what-is-ssg\">What&#39;s a Static Site Generator?</a></li><li dir=\"ltr\"><a href=\"#what-is-static-site\">What is a Static Website?</a></li><li dir=\"ltr\"><a href=\"#why-ssg\">Why are SSG&#39;s becoming so popular?</a></li><li dir=\"ltr\"><a href=\"#ssg-benefits\">The Benefits of a SSG</a></li><li dir=\"ltr\"><a href=\"#how-does-ssg-work\">How do SSG&#39;s work?</a></li><li dir=\"ltr\"><a href=\"#headless-ssg\">SSG&#39;s and Headless CMS</a></li><li dir=\"ltr\"><a href=\"#get-started-ssg\">Get Started with a Static Site Generator</a></li></ul><p dir=\"ltr\"><br></p><p dir=\"ltr\"><a href=\"https://jamstack.org/generators/\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://cdn.cosmicjs.com/170044f0-5f53-11eb-852b-43268d756f2e-Static-Site-Generation.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib lazy-load card-shadow\" alt=\"jamstack.org has listed the popular SSG services by category\"></a></p><p dir=\"ltr\" style=\"text-align: center;\">How does Static Site Generation work?</p><p dir=\"ltr\"><br>Previously, static sites only had a limited number of use cases; those included mostly microsites and landing pages. While developers still rely on them for these purposes, there are also a host of new applications thanks to advancements in web architecture.</p><p dir=\"ltr\">A key component for bringing static sites to life is what is known as a static site generator.&nbsp;</p><p dir=\"ltr\">In this article, we&rsquo;ll delve into static site generators, explain how they work, their benefits, and illustrate how to combine them with a headless CMS for best results.&nbsp;</p><h2 dir=\"ltr\" id=\"what-is-ssg\">What is a Static Site Generator (SSG)?</h2><p dir=\"ltr\">As its name suggests, a static site generator (SSG) is quite literally used to build static sites.&nbsp;</p><p dir=\"ltr\">A static site generator creates a fully static site from a set of HTML files and deploys it to an HTTP server.&nbsp;</p><p dir=\"ltr\">An SSG doesn&rsquo;t require a database or server-side rendering for execution like a traditional CMS does. Instead, content in the form of text-based files is compiled into HTML pages with the help of templates. Then the site is rendered and uploaded\r\nto a CDN, typically a global one, so content can be delivered to visitors anywhere in the world, fast.</p><p dir=\"ltr\">SSGs can eliminate some of the issues which can occur when using a traditional CMS to deliver these smaller websites. Traditional CMS platforms have been around for some time, and while they are still prevalent today, the main benefit comes from working\r\nwith dynamic content.&nbsp;</p><h3 dir=\"ltr\" id=\"what-is-static-site\">What is a Static Site?</h3><p dir=\"ltr\">In the past, most web development was done using static sites. A static site consists of HTML, CSS and frontend JavaScript. Pages&nbsp;on a static site can run dynamically, but they&rsquo;re not generated on the server. Instead, files are pre-rendered\r\nand pre-built, then hosted on the server. They don&rsquo;t change with every user request.</p><p dir=\"ltr\">Each page on a static site is a separate file. In the past, if a static website needed to be updated, each page needed to be updated separately. For instance, if you wanted to update the footer on a website you built, each page would have to be updated\r\nindividually.</p><p dir=\"ltr\">During the early days of the internet, this was how most of the websites were created, until dynamic sites burst onto the scene.</p><p dir=\"ltr\">When a user visits a dynamic site, the site is rendered dynamically on the server, enabling the server to build pages on the fly. This made it easier to publish changes to websites, as well as update content. Using our footer example, with dynamic sites\r\nyou can update the footer once and those changes are then applied to the footer on all pages.</p><p dir=\"ltr\">The modern web supports dynamic sites because of the plethora of front-end frameworks available. Dynamic sites are handy for their personalization and omnichannel features, but, can become complex to manage, hard to scale, and the costs of maintaining\r\nthis type of website will add up.&nbsp;</p><h3 dir=\"ltr\" id=\"why-ssg\">Why Are Static Site Generators So Popular?</h3><p dir=\"ltr\">Static site generators are growing in popularity, as static sites see a comeback. Advancements in web technology over the past decade allow developers to decouple the server (or a serverless back-end) from the front-end. Today developers of web apps can\r\nhave the speed of the lightweight static website on the front-end, and the flexibility of dynamic websites on the back-end, by using static site generators.</p><p dir=\"ltr\">Modern enterprises favor using SSGs for performance and security, whereas solo developers enjoy design freedom and development simplicity. Furthermore, there are a wealth of SSG options available to serve every use case. We&#39;ll examine a few in a minute.&nbsp;</p><p dir=\"ltr\">Let&#39;s take a closer look at the benefits of using an SSG for your next project.&nbsp;</p><h2 dir=\"ltr\" id=\"ssg-benefits\">Benefits of Static Site Generators</h2><h3 dir=\"ltr\">Security</h3><p dir=\"ltr\">Traditional CMS platforms are quite susceptible to hacks such as SQL injections and more attacking the holes in a server-side database. SSGs don&rsquo;t have this database, and display the page a user requests, removing the possibility of a hack.&nbsp;</p><h3 dir=\"ltr\">Scalability</h3><p dir=\"ltr\">Because SSGs are designed such that each page is ready to go upon request from the CDN, the drawback of server-response times is gone. Additionally, less computing power is required to respond to additional requests, making it far easier for the site\r\nto handle additional traffic. The result is near-infinite scalability.</p><h3 dir=\"ltr\">Speed</h3><p dir=\"ltr\">Speed is one of the primary benefits of an SSG - again, thanks to the CDN. The precompiled files can be served directly to browsers, <em>and&nbsp;</em>with lower overall latency when served via a global CDN.</p><ol><li>Precompiled files = elimination of server-response time.</li><li dir=\"ltr\">Closer to the request (via global CDN) = faster response time.</li></ol><p dir=\"ltr\">&nbsp;These two factors work together to dramatically cut user load times.</p><h3 dir=\"ltr\">Ease of Use and Flexibility</h3><p dir=\"ltr\">Without the templates and page builders of a traditional CMS, which were nearly required traditional dynamic websites, through SSG&#39;s and a decoupled CMS, developers have much more freedom to design and create.&nbsp;</p><h2 dir=\"ltr\" id=\"how-does-ssg-work\">How Do Static Site Generators Work?</h2><p dir=\"ltr\">The general procedure of static site generation is actually a simple process. At build time, before the content reaches a CDN, a static site generator or framework reads content from files; usually, this content comes in a format such as markup.</p><p dir=\"ltr\">Content then gets rendered to HTML based on templates and served to the CDN.</p><p dir=\"ltr\">Finally, the results are saved in a directory and laid out to match the source files and keep them available when requests to view the content are made.&nbsp;</p><p dir=\"ltr\">This simplicity is the basis for the benefits of using an SSG, the features are very limited. Enterprises especially need the flexibility to deploy either static sites or dynamic sites depending on the use cases. For some of those use cases, an SSG can\r\nbe combined with a headless CMS for best results.&nbsp;</p><h3 dir=\"ltr\">The Drawbacks of SSGs</h3><p dir=\"ltr\">The way that SSGs turn data into easily deployable static sites can be appealing for many companies. However, the feature limits of an SSG mean that marketers are limited and don&rsquo;t have the capabilities to deliver omnichannel content.</p><p dir=\"ltr\">Static site generators are great for developers, but marketers and content creation team members can struggle with the more technical aspects. They often don&rsquo;t provide the out-of-the-box workflows that enable valuable collaboration and input from\r\na team. However, there is a way around these challenges.</p><h2 dir=\"ltr\" id=\"headless-ssg\">Integrating SSGs with a Headless CMS</h2><p dir=\"ltr\">Static site generators can be connected to a headless CMS with the help of APIs. Instead of the tightly coupled approach that traditional CMS platforms rely on, a headless CMS removes the frontend presentation layer and instead connects to multiple frontends\r\nusing APIs. One of those multiple frontends can be a static site generator. This allows you to generate a fast and flexible frontend for your content needs.&nbsp;</p><p dir=\"ltr\">The result is vast possibilities for SSGs: through headless cms, they can easily be used for various use cases including blogging, microsites or landing pages, documentation, and even more advanced use cases such as marketing sites and eCommerce stores.</p><p dir=\"ltr\">Getting the most out of your SSG will depend on what you need to use it for, so it&#39;s crucial you pick the right static site generator for that use case.&nbsp;</p><h3 dir=\"ltr\" id=\"ssg-examples\">Examples of Static Site Generators</h3><h4 dir=\"ltr\"><a href=\"https://nextjs.org/\" rel=\"noopener noreferrer\" target=\"_blank\"><strong>Next.js</strong></a><strong><a href=\"https://nextjs.org/\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://cdn.cosmicjs.com/a2439e20-5b4a-11eb-afa6-e9412ba0a77c-welcome-to-nextjs.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" alt=\"Everyone's favorite SSG, Next.js\"></a></strong></h4><p dir=\"ltr\"><br></p><p dir=\"ltr\">Next.js is a lightweight React framework that can be used to generate static sites as well as do server-side rendering. Because it&#39;s created by the <a href=\"https://vercel.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Vercel team</a>, Next.js provides\r\na great developer experience no matter what type of site you want to build.&nbsp;</p><p dir=\"ltr\"><strong>Features:</strong> Great for building both static and dynamic sites. Versatility in how you can fetch data. The team at Vercel has put a lot of thought into the Next.js framework, creating features like <a href=\"https://vercel.com/blog/nextjs-server-side-rendering-vs-static-generation#incremental-static-generation\" rel=\"noopener noreferrer\" target=\"_blank\">Incremental Static Generation</a> to reduce pre-rendering time.</p><p dir=\"ltr\"><strong>Drawbacks:</strong> Requires server-side knowledge from developers and can be more challenging that other SSGs.</p><p dir=\"ltr\"><strong>Best For:</strong> Enterprises that need to generate static sites for multiple use cases.</p><h4 dir=\"ltr\"><a href=\"https://jekyllrb.com/\" rel=\"noopener noreferrer\" target=\"_blank\"><strong>Jekyll</strong></a></h4><p><strong><a href=\"https://jekyllrb.com/\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://cdn.cosmicjs.com/1b19dd40-5b60-11eb-afa6-e9412ba0a77c-jekyll-quickstart.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" alt=\"Quickstart with Jekyll, an open-source, public SSG\"></a></strong><br></p><p dir=\"ltr\">Jekyll is a Ruby-built static site generator that lets you focus on content. Jekyll is a known entity among SSGs but hasn&rsquo;t added as many features as others on the list.&nbsp;</p><p dir=\"ltr\"><strong>Features:</strong> Simple and blog-aware (permalinks, pages, posts and layouts all available for use). Also includes free hosting on GitHub pages.&nbsp;</p><p dir=\"ltr\"><strong>Drawbacks:</strong> There is a slow build. It will take a long time to generate larger sites, and there are limited built-in features.&nbsp;</p><p dir=\"ltr\"><strong>Best For:</strong> Smaller websites and personal portfolios.</p><h4 dir=\"ltr\"><a href=\"https://www.gatsbyjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\"><strong>Gatsby</strong></a></h4><p><strong><a href=\"https://www.gatsbyjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://cdn.cosmicjs.com/4d4a8710-5b60-11eb-afa6-e9412ba0a77c-gatsby-home.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" alt=\"Gatsby is the biggest next.js competitor in the SSG space\"></a></strong><br></p><p dir=\"ltr\">Gatsby is an open source React-based framework for creating blazing fast websites and apps. It features plenty of plugins and can integrate using APIs.&nbsp;</p><p dir=\"ltr\"><strong>Features:</strong> Static progressive web app (PWA) generator. Ideal not just for static websites but apps that load quickly and are also available offline. Also includes a rich library of plugins.&nbsp;</p><p dir=\"ltr\"><strong>Drawbacks:</strong> Not ideal for sites with large volumes of content.</p><p dir=\"ltr\"><strong>Best Use Cases:</strong> Perfect for small and medium-sized businesses.&nbsp;</p><h2 dir=\"ltr\" id=\"get-started-ssg\">Cosmic Combines With Static Site Generators for Blazing Fast Results</h2><p dir=\"ltr\">As static sites surge to the leading-edge of modern web development, static site generators make the build of these sites a walk in the park for developers. Enterprises and complex applications will need the right architecture to handle their content\r\nto fully utilize static site generation.</p><p dir=\"ltr\"><a href=\"https://www.cosmicjs.com/\">Cosmic</a> provides a flexible headless CMS architecture that is perfect for plugging into any static site generator. With Cosmic, it&#39;s easy to manage content by yourself or with teams.<br><br>Use APIs to combine with all of the latest-and-greatest static site generators to generate static sites and other content applications.&nbsp;</p><p dir=\"ltr\">For more information, check out our collection of <a href=\"https://www.cosmicjs.com/knowledge-base/gatsby-cms\">Gatsby resources</a> or <a href=\"https://www.cosmicjs.com/knowledge-base/nextjs-cms\">Next.js Resources</a>.</p><p dir=\"ltr\">Or, start building right now with our quick-start guides:</p><ul><li dir=\"ltr\"><a href=\"https://docs.cosmicjs.com/guides/#next-js\">Next.js Getting Started Docs</a></li><li dir=\"ltr\"><a href=\"https://docs.cosmicjs.com/guides/#gatsby\">Gatsby Getting Started Docs</a></li></ul>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"c1jxjLpgAR","value":"5f5fac071936450007d8a01c","required":true,"object_type":"authors","object":{"_id":"5f5fac071936450007d8a01c","slug":"kyle-meagher","title":"Kyle Meagher","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"hsMOJCxIAj","value":"kylemeags"},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D2rdKO4lEL","value":"e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2020-09-14T17:44:39.110Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-14T17:45:09.251Z","created":"2020-09-14T17:44:39.110Z","status":"published","published_at":"2020-09-14T17:44:39.110Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"X3ohZst881","value":"<p>Static sites are in the middle of a comeback - in this article, we cover everything you need to know about static site generators.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"1IekoNIL9l","value":"4d47fd80-5bf9-11eb-afa6-e9412ba0a77c-ssg.png","url":"https://cdn.cosmicjs.com/4d47fd80-5bf9-11eb-afa6-e9412ba0a77c-ssg.png","imgix_url":"https://imgix.cosmicjs.com/4d47fd80-5bf9-11eb-afa6-e9412ba0a77c-ssg.png"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"bc46TDg0lw","value":"Static sites are in the middle of a comeback - in this article, we cover everything you need to know about static site generators."},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"Q8QRjgqjX2","value":"2021-01-21"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2021-01-18T23:13:48.076Z","created_by":"5f8088982aa32f00093977bb","modified_at":"2021-01-25T21:22:18.632Z","created":"2021-01-18T23:13:48.076Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/4d47fd80-5bf9-11eb-afa6-e9412ba0a77c-ssg.png","modified_by":"5f8088982aa32f00093977bb","publish_at":null,"unpublish_at":null,"published_at":"2021-01-25T21:22:18.632Z","metadata":{"author":{"_id":"5f5fac071936450007d8a01c","slug":"kyle-meagher","title":"Kyle Meagher","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"hsMOJCxIAj","value":"kylemeags"},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D2rdKO4lEL","value":"e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2020-09-14T17:44:39.110Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-14T17:45:09.251Z","created":"2020-09-14T17:44:39.110Z","status":"published","published_at":"2020-09-14T17:44:39.110Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","metadata":{"username":"kylemeags","profile_picture":{"url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}}},"teaser":"<p>Static sites are in the middle of a comeback - in this article, we cover everything you need to know about static site generators.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/4d47fd80-5bf9-11eb-afa6-e9412ba0a77c-ssg.png","imgix_url":"https://imgix.cosmicjs.com/4d47fd80-5bf9-11eb-afa6-e9412ba0a77c-ssg.png"},"seo_meta_description":"Static sites are in the middle of a comeback - in this article, we cover everything you need to know about static site generators.","published_date":"2021-01-21"}},{"_id":"5b743e111a739a78a5f0725b","order":20,"slug":"hostmaker-manages-localized-content","title":"Hostmaker Manages Localized Content ","content":"<p><a href=\"https://hostmaker.com/gb/london/\" rel=\"noopener noreferrer\" target=\"_blank\">Hostmaker</a> is a property management company that operates across 9 cities in 6 countries. Hostmaker manages properties that are being rented to vacationers and lodgers from around the world. They take the hosts&#39; home and provide cleaning and decor services prior to listing the location on up to 15 various travel booking platforms. Hostmaker&#39;s hosts love the service for the superior volume that they continue to deliver compared to their competitors, which are driven by proprietary pricing strategies, local market expertise and global industry experience.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/18ece0f0-a64d-11e8-a7de-db2e81aae7c3-IMG_4191.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Hostmaker&#39;s tech team needed a solution for their product marketing managers to update Landing Pages, Case Studies, Press Releases and FAQs for the various markets they manage, including cities such as Rome, London and Barcelona. Localizing content for Hostmaker&#39;s audiences is a mission-critical piece of the marketing strategy that is driving such tremendous growth. Hostmaker chose Cosmic to give their cross-functional team the tools they need to perform their jobs. Now Hostmaker&#39;s developers can build reusable components and scalable content models while their marketers can manage content specific to a particular locale.&nbsp;</p><p style=\"text-align: center;\"><br></p><p><br></p><div class=\"fr-embedly      \" data-original-embed=\"<a href='https://twitter.com/HOSTMAKERCo/status/1035198450739097600' class='embedly-card'></a>\"><a href=\"https://twitter.com/HOSTMAKERCo/status/1035198450739097600\" class=\"embedly-card\"></a></div><p><br></p><p><br></p><blockquote><p>&quot;We&rsquo;ve been using Cosmic for around a year. At first there were some issues with components that prohibited us from performing all our desired tasks, but all those issues were quickly solved by the Cosmic Team. As of now, the tools are great, and have even improved during our use of the platform. It does all the things we need at the moment. As a tool Cosmic has been not only ideal for managing components on the site but adaptive enough for our non-tech users to create landing pages and modify existing content, saving us precious dev time.&rdquo;</p><p><br></p><p><cite>&mdash; Hostmaker Digital Team</cite></p></blockquote>","metafields":[{"value":"Hostmaker","key":"company","title":"Company","type":"text","children":null},{"value":"Hospitality ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Hostmaker is a property management company that operates across 9 cities in 6 countries. Hostmaker manages properties that are being rented to vacationers and lodgers from around the world. They take the hosts' home and provide cleaning and decor services prior to listing the location on up to 15 various travel booking platforms. Hostmaker's hosts love the service for the superior volume that they continue to deliver compared to their competitors, which are driven by proprietary pricing strategies, local market expertise and global industry experience. \n\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-01T22:26:36.367Z","created_by":"5716b504e9c686d006000073","created":"2018-08-15T14:52:01.115Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-09-25T15:10:44.600Z","metadata":{"company":"Hostmaker","industry_type":"Hospitality ","teaser":"Hostmaker is a property management company that operates across 9 cities in 6 countries. Hostmaker manages properties that are being rented to vacationers and lodgers from around the world. They take the hosts' home and provide cleaning and decor services prior to listing the location on up to 15 various travel booking platforms. Hostmaker's hosts love the service for the superior volume that they continue to deliver compared to their competitors, which are driven by proprietary pricing strategies, local market expertise and global industry experience. \n\n\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/2f1889b0-a64d-11e8-a8cb-19319ae2c1b8-B13ds9DG_400x400.jpg"}}},{"_id":"5d4c23dd2f744c56f69a1ee5","slug":"content-management-system-for-marketing-campaigns","title":"Content Management System for Marketing Campaigns","content":"<p>Teams launching marketing campaigns, product launch countdowns and user-generated-content campaigns use the Cosmic JS Content Management System to model, create and deliver content quickly. Developers are given API tools and resources to integrate content with any website or app, while marketers can manage everything from marketing copy to user-generated-data. Creation takes minutes and marketers can easily manage campaign results as well as edit marketing copy and images without bottlenecking their development team.<br><br></p><h3>What is Headless CMS Software?</h3><p>Headless CMS Software works by providing non-technical editors with a Dashboard UI to model, create and publish content while providing developers with API tools and resources to integrate content with any website or app. By decoupling content from code, teams create a central content repository that can power all of their content-powered applications.&nbsp;</p>","metafields":[{"value":"Content Management System for Marketing Campaigns","key":"solution_name","title":"Solution Name","type":"text","children":null},{"value":"63cd02c0-9f54-11e9-ac09-4be8a5631b5e-91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen-Shot-2017-11-16-at-1.59.39-PM.png","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/63cd02c0-9f54-11e9-ac09-4be8a5631b5e-91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen-Shot-2017-11-16-at-1.59.39-PM.png","imgix_url":"https://imgix.cosmicjs.com/63cd02c0-9f54-11e9-ac09-4be8a5631b5e-91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen-Shot-2017-11-16-at-1.59.39-PM.png"},{"object_type":"case-studies","value":"59f49a7cee2adb545c0005bc,59663607a6a3f55962000e40,59666b26c863d9eb6c0001f5","key":"case_studies","title":"Case Studies","type":"objects","children":null,"objects":[{"_id":"59f49a7cee2adb545c0005bc","slug":"life-is-good-shares-gratitude","title":"Life is Good Shares Gratitude","content":"<p>The <a href=\"https://www.lifeisgood.com/?utm_source=cosmicjs.com&utm_medium=referral&utm_campaign=gratitudewall\" rel=\"noopener noreferrer\" target=\"_blank\">Life is Good</a> community shares one simple, unifying mission: to spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add &quot;sticky notes&quot; with their name and what they are grateful for to the gratitude board.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7dbdb6b0-c59a-11e7-a9fd-155dbd0b0a76-Optimism_Tree_default.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Gratitude Wall is adapted from the Cosmic <a href=\"https://cosmicjs.com/apps/sticky-notes\" rel=\"noopener noreferrer\" target=\"_blank\">Sticky Notes App</a>, built on <a href=\"https://cosmicjs.com/knowledge-base/react-cms\" rel=\"noopener noreferrer\" target=\"_blank\">React</a>, Redux and <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a>. The Wall is currently running on Heroku and is i-framed into WordPress on its landing page. The Life is Good team also built a simple moderation application so that their team can easily approve or delete User Generated Content as it flows in. They also built client-side moderation during content entry, which checks against a banned list of words and blocks submission.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen Shot 2017-11-16 at 1.59.39 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a robust scaffolding to accept, store, and moderate User Generated Content and display it in a custom web app in real time. With Cosmic, we were able to develop an MVP in a matter of hours and focus our resources on UX and design versus content management. The Cosmic Support Team was extremely helpful throughout the process. We&rsquo;re excited to leverage these tools again for future projects.&rdquo;</p><p><cite>&mdash; Chris Schwab, Front End Engineer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Life is Good","key":"company","title":"Company","type":"text","children":null},{"value":"Ecommerce | Apparel","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-28T14:55:56.103Z","created_by":"5716b504e9c686d006000073","created":"2017-10-28T14:55:56.103Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-07-25T21:53:35.289Z"},{"_id":"59663607a6a3f55962000e40","slug":"big-fish-launches-marketing-and-tutorial-content-for-games","title":"Big Fish Launches Marketing and Tutorial Content for Games","content":"<p>When <a href=\"http://www.bigfishgames.com\" rel=\"noopener noreferrer\" target=\"_blank\">Big Fish</a> launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch. Big Fish wanted their game studios to have the ability to curate and update content on each of their landing pages. Other CMS systems weren&rsquo;t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b671fa80-ba81-11e7-9419-d7ce2df8354d-Screen Shot 2017-10-26 at 2.12.42 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/bf97f050-ba82-11e7-b96e-3b4c8df8fb98-Screen Shot 2017-10-26 at 2.20.03 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><blockquote><p>&quot;We use Cosmic buckets for each of our mobile game landing pages. While our API and storage usage is low, the number of buckets we need is high, which makes the new Clusters Feature a perfect solution for our company use cases. It allows us to\r\nhave a single consolidated invoice, with an overall API and data-limit, but up to 35 buckets for our use.&quot;</p><p><cite>&mdash; Jessica Chappell, Web Developer&nbsp;</cite></p></blockquote><p>Read <a href=\"http://www.bigfishgames.com/blog\" rel=\"noopener noreferrer\" target=\"_blank\">more</a> about Big Fish and their games.</p>","metafields":[{"value":"Big Fish","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T14:45:27.402Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-11-08T23:15:38.911Z"},{"_id":"59666b26c863d9eb6c0001f5","slug":"brand-new-congress-elects-a-new-cms","title":"Brand New Congress Elects a New CMS","content":"<p>Every democracy requires representation. <a href=\"https://brandnewcongress.org\" rel=\"noopener noreferrer\" target=\"_blank\">Brand New Congress</a> intends to elect a new set of representatives, and is doing so with the help of Cosmic to deliver their content via the cloud.</p><p style=\"text-align: center;\"><br><img src=\"https://cosmicjs.imgix.net/60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png\" style=\"max-width: 500px; width: 100%;\" class=\"fr-fic fr-dib\"></p><p style=\"text-align: center;\"><br></p><blockquote><p>&ldquo;Brand New Congress moved from a traditional CMS to Cosmic as part of a re-implementation of our website. It&rsquo;s been great! First, Cosmic&rsquo;s API-first approach creates a separation between content and implementation, which gave us the flexibility to implement our website in a way that made the most sense for our use case: mostly server side rendered with small React widgets, without worrying about compatibility with existing CMSes. Second, Cosmic&rsquo;s user roles &ndash; developer and editor &ndash; where the developer defines a schema and the editor edits objects within those parameters &ndash; give me (the developer) the confidence that my content editors cannot accidentally\r\nbreak the site or edit the content in some incompatible way.&rdquo;</p><p><cite>&mdash; Ben Paul Ryan Parker, Director of Technology, Brand New Congress</cite></p></blockquote>","metafields":[{"value":"Brand New Congress","key":"company","title":"Company","type":"text","children":null},{"value":"Non-Profit","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Every democracy requires representation. Brand New Congress intends to elect a new set of representatives, and is doing so with the help of Cosmic to deliver their content via the cloud. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png","imgix_url":"https://imgix.cosmicjs.com/60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T18:32:06.453Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null}]},{"repeater_fields":"\"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\"\"","value":"react-blog","key":"app_slugs","title":"App Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"react-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"landing-page","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"single-page-sales-funnel","type":"text","required":false}]}]},{"repeater_fields":"\"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\"\"","value":"seo-manager","key":"extension_slugs","title":"Extension Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"seo-manager","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"twitter-search","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"google-analytics","type":"text","required":false}]}]},{"key":"testimonial","title":"Testimonial","type":"html-textarea","children":null,"value":"<p>&quot;Cosmic JS provided us with a robust scaffolding to accept, store, and moderate User Generated Content and display it in a custom web app in real time. With Cosmic, we were able to develop an MVP in a matter of hours and focus our resources on UX and design versus content management.&rdquo;</p>"},{"value":"Chris Schwab, Front End Engineer at Life is Good","key":"testimonial_credit","title":"Testimonial Credit","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created":"2019-08-08T13:30:05.028Z","created_at":"2019-07-08T15:02:12.719Z","modified_at":"2019-08-08T13:30:56.068Z","status":"published","locale":null,"published_at":"2019-08-08T13:30:56.068Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"order":20,"metadata":{"solution_name":"Content Management System for Marketing Campaigns","image":{"url":"https://cdn.cosmicjs.com/63cd02c0-9f54-11e9-ac09-4be8a5631b5e-91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen-Shot-2017-11-16-at-1.59.39-PM.png","imgix_url":"https://imgix.cosmicjs.com/63cd02c0-9f54-11e9-ac09-4be8a5631b5e-91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen-Shot-2017-11-16-at-1.59.39-PM.png"},"case_studies":[{"_id":"59f49a7cee2adb545c0005bc","slug":"life-is-good-shares-gratitude","title":"Life is Good Shares Gratitude","content":"<p>The <a href=\"https://www.lifeisgood.com/?utm_source=cosmicjs.com&utm_medium=referral&utm_campaign=gratitudewall\" rel=\"noopener noreferrer\" target=\"_blank\">Life is Good</a> community shares one simple, unifying mission: to spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add &quot;sticky notes&quot; with their name and what they are grateful for to the gratitude board.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7dbdb6b0-c59a-11e7-a9fd-155dbd0b0a76-Optimism_Tree_default.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Gratitude Wall is adapted from the Cosmic <a href=\"https://cosmicjs.com/apps/sticky-notes\" rel=\"noopener noreferrer\" target=\"_blank\">Sticky Notes App</a>, built on <a href=\"https://cosmicjs.com/knowledge-base/react-cms\" rel=\"noopener noreferrer\" target=\"_blank\">React</a>, Redux and <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a>. The Wall is currently running on Heroku and is i-framed into WordPress on its landing page. The Life is Good team also built a simple moderation application so that their team can easily approve or delete User Generated Content as it flows in. They also built client-side moderation during content entry, which checks against a banned list of words and blocks submission.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen Shot 2017-11-16 at 1.59.39 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a robust scaffolding to accept, store, and moderate User Generated Content and display it in a custom web app in real time. With Cosmic, we were able to develop an MVP in a matter of hours and focus our resources on UX and design versus content management. The Cosmic Support Team was extremely helpful throughout the process. We&rsquo;re excited to leverage these tools again for future projects.&rdquo;</p><p><cite>&mdash; Chris Schwab, Front End Engineer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Life is Good","key":"company","title":"Company","type":"text","children":null},{"value":"Ecommerce | Apparel","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-28T14:55:56.103Z","created_by":"5716b504e9c686d006000073","created":"2017-10-28T14:55:56.103Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-07-25T21:53:35.289Z","metadata":{"company":"Life is Good","industry_type":"Ecommerce | Apparel","teaser":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","logo":{"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}}},{"_id":"59663607a6a3f55962000e40","slug":"big-fish-launches-marketing-and-tutorial-content-for-games","title":"Big Fish Launches Marketing and Tutorial Content for Games","content":"<p>When <a href=\"http://www.bigfishgames.com\" rel=\"noopener noreferrer\" target=\"_blank\">Big Fish</a> launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch. Big Fish wanted their game studios to have the ability to curate and update content on each of their landing pages. Other CMS systems weren&rsquo;t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b671fa80-ba81-11e7-9419-d7ce2df8354d-Screen Shot 2017-10-26 at 2.12.42 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/bf97f050-ba82-11e7-b96e-3b4c8df8fb98-Screen Shot 2017-10-26 at 2.20.03 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><blockquote><p>&quot;We use Cosmic buckets for each of our mobile game landing pages. While our API and storage usage is low, the number of buckets we need is high, which makes the new Clusters Feature a perfect solution for our company use cases. It allows us to\r\nhave a single consolidated invoice, with an overall API and data-limit, but up to 35 buckets for our use.&quot;</p><p><cite>&mdash; Jessica Chappell, Web Developer&nbsp;</cite></p></blockquote><p>Read <a href=\"http://www.bigfishgames.com/blog\" rel=\"noopener noreferrer\" target=\"_blank\">more</a> about Big Fish and their games.</p>","metafields":[{"value":"Big Fish","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T14:45:27.402Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-11-08T23:15:38.911Z","metadata":{"company":"Big Fish","industry_type":"Gaming","teaser":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","logo":{"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}}},{"_id":"59666b26c863d9eb6c0001f5","slug":"brand-new-congress-elects-a-new-cms","title":"Brand New Congress Elects a New CMS","content":"<p>Every democracy requires representation. <a href=\"https://brandnewcongress.org\" rel=\"noopener noreferrer\" target=\"_blank\">Brand New Congress</a> intends to elect a new set of representatives, and is doing so with the help of Cosmic to deliver their content via the cloud.</p><p style=\"text-align: center;\"><br><img src=\"https://cosmicjs.imgix.net/60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png\" style=\"max-width: 500px; width: 100%;\" class=\"fr-fic fr-dib\"></p><p style=\"text-align: center;\"><br></p><blockquote><p>&ldquo;Brand New Congress moved from a traditional CMS to Cosmic as part of a re-implementation of our website. It&rsquo;s been great! First, Cosmic&rsquo;s API-first approach creates a separation between content and implementation, which gave us the flexibility to implement our website in a way that made the most sense for our use case: mostly server side rendered with small React widgets, without worrying about compatibility with existing CMSes. Second, Cosmic&rsquo;s user roles &ndash; developer and editor &ndash; where the developer defines a schema and the editor edits objects within those parameters &ndash; give me (the developer) the confidence that my content editors cannot accidentally\r\nbreak the site or edit the content in some incompatible way.&rdquo;</p><p><cite>&mdash; Ben Paul Ryan Parker, Director of Technology, Brand New Congress</cite></p></blockquote>","metafields":[{"value":"Brand New Congress","key":"company","title":"Company","type":"text","children":null},{"value":"Non-Profit","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Every democracy requires representation. Brand New Congress intends to elect a new set of representatives, and is doing so with the help of Cosmic to deliver their content via the cloud. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png","imgix_url":"https://imgix.cosmicjs.com/60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T18:32:06.453Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"metadata":{"company":"Brand New Congress","industry_type":"Non-Profit","teaser":"Every democracy requires representation. Brand New Congress intends to elect a new set of representatives, and is doing so with the help of Cosmic to deliver their content via the cloud. \n","logo":{"url":"https://cdn.cosmicjs.com/60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png","imgix_url":"https://imgix.cosmicjs.com/60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png"}}}],"app_slugs":[{"slug":"react-blog"},{"slug":"landing-page"},{"slug":"single-page-sales-funnel"}],"extension_slugs":[{"slug":"seo-manager"},{"slug":"twitter-search"},{"slug":"google-analytics"}],"testimonial":"<p>&quot;Cosmic JS provided us with a robust scaffolding to accept, store, and moderate User Generated Content and display it in a custom web app in real time. With Cosmic, we were able to develop an MVP in a matter of hours and focus our resources on UX and design versus content management.&rdquo;</p>","testimonial_credit":"Chris Schwab, Front End Engineer at Life is Good"}},{"_id":"595e797db7cb932a7100013e","order":20,"slug":"react-native-cms","title":"React Native CMS","content":"<p>Cosmic JS makes it easy to manage content for your React Native applications. &nbsp;Install the <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Official Cosmic JS JavaScript Client</a> to add dynamic content to your React Native app. &nbsp;Get a feel for React Native by taking a spin through <a href=\"https://cosmicjs.com/apps?languages=iOS\" rel=\"noopener noreferrer\" target=\"_blank\">our React Native apps</a> and check out the tutorials below.</p><h3>React Native CMS Articles</h3><p><a href=\"https://cosmicjs.com/blog/how-to-make-a-simple-twitter-clone-with-react-native\" rel=\"noopener noreferrer\" target=\"_blank\">How to Make a Simple Twitter Clone with React Native</a><br><a href=\"https://cosmicjs.com/blog/how-to-build-a-cross-platform-blog-using-react-native-and-nodejs\" rel=\"noopener noreferrer\" target=\"_blank\">How to Build a Cross-Platform Blog Using React Native and Node.js</a></p><h3>React Native CMS Resources</h3><p><a href=\"https://cosmicjs.com/docs/\">Cosmic JS Docs</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\"></a><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official JavaScript Client</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3>Examples</h3><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><code style=' font-size: inherit; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: 0px 0px; text-align: left;'>npm i cosmicjs</code></pre><p>Then in your JavaScript file, get your content:</p><div class=\"fr-embedly  \" data-original-embed=\"<a href='https://runkit.com/tonyspiro/5ad9109c320cd6001286359c' class='embedly-card'></a>\"><a href=\"https://runkit.com/tonyspiro/5ad9109c320cd6001286359c\" class=\"embedly-card\"></a></div>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"W4iZz7SsUs","value":"a1e22810-27b0-11e7-b6ae-8108cf4caa96-react.svg","url":"https://cdn.cosmicjs.com/a1e22810-27b0-11e7-b6ae-8108cf4caa96-react.svg","imgix_url":"https://imgix.cosmicjs.com/a1e22810-27b0-11e7-b6ae-8108cf4caa96-react.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"XvdanAeb1J","value":"a1e22810-27b0-11e7-b6ae-8108cf4caa96-react.svg","url":"https://cdn.cosmicjs.com/a1e22810-27b0-11e7-b6ae-8108cf4caa96-react.svg","imgix_url":"https://imgix.cosmicjs.com/a1e22810-27b0-11e7-b6ae-8108cf4caa96-react.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"f1YXxMs42k","value":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for React Native apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"v8UcgKu2z3","value":"React Native"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"pDVvfXlP55","value":"Cosmic is the best CMS for React Native apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"ovYGEVlCvr","value":"afbb8c30-2ac4-11e7-8c0a-bd67c616bd40-react.jpg","url":"https://cdn.cosmicjs.com/afbb8c30-2ac4-11e7-8c0a-bd67c616bd40-react.jpg","imgix_url":"https://imgix.cosmicjs.com/afbb8c30-2ac4-11e7-8c0a-bd67c616bd40-react.jpg"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"x8KrTcuvPC","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"Mc4ZihwN9q","value":"Best Headless CMS for React Native"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"frgtgqfrpylludl8pnsi","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-22T23:07:51.159Z","created_by":"5357ef811693be2118000001","created":"2017-07-06T17:55:09.654Z","status":"published","modified_at":"2020-06-27T19:20:41.691Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-27T19:20:41.691Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/a1e22810-27b0-11e7-b6ae-8108cf4caa96-react.svg","imgix_url":"https://imgix.cosmicjs.com/a1e22810-27b0-11e7-b6ae-8108cf4caa96-react.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/a1e22810-27b0-11e7-b6ae-8108cf4caa96-react.svg","imgix_url":"https://imgix.cosmicjs.com/a1e22810-27b0-11e7-b6ae-8108cf4caa96-react.svg"},"blurb":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for React Native apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"React Native","seo_description":"Cosmic is the best CMS for React Native apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/afbb8c30-2ac4-11e7-8c0a-bd67c616bd40-react.jpg","imgix_url":"https://imgix.cosmicjs.com/afbb8c30-2ac4-11e7-8c0a-bd67c616bd40-react.jpg"},"code_example":"","seo_title":"Best Headless CMS for React Native","videos":[]}},{"_id":"5f38391903a87500083c2b92","order":21,"slug":"api-based-cms","title":"API-based CMS","content":"","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"sWwtr5X3ye","value":"db6ee8f0-df2e-11ea-b1c6-4d9e65be7589-api-based-cms.svg","url":"https://cdn.cosmicjs.com/db6ee8f0-df2e-11ea-b1c6-4d9e65be7589-api-based-cms.svg","imgix_url":"https://imgix.cosmicjs.com/db6ee8f0-df2e-11ea-b1c6-4d9e65be7589-api-based-cms.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"e1s8vsQCXU","value":"db6ee8f0-df2e-11ea-b1c6-4d9e65be7589-api-based-cms.svg","url":"https://cdn.cosmicjs.com/db6ee8f0-df2e-11ea-b1c6-4d9e65be7589-api-based-cms.svg","imgix_url":"https://imgix.cosmicjs.com/db6ee8f0-df2e-11ea-b1c6-4d9e65be7589-api-based-cms.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"qPx5VTlQ9x","value":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best API-based CMS for websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"wU1fSfyhtv","value":"API-based"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"yiXfHjgL0Q","value":"Cosmic is the best API-based CMS for websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"V6xxrAyfpO","value":"eda42a30-df2e-11ea-b1c6-4d9e65be7589-api-based-cms.png","url":"https://cdn.cosmicjs.com/eda42a30-df2e-11ea-b1c6-4d9e65be7589-api-based-cms.png","imgix_url":"https://imgix.cosmicjs.com/eda42a30-df2e-11ea-b1c6-4d9e65be7589-api-based-cms.png"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"TCfQMAvoAT","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"UM6KogYpTI","value":"Best API-based CMS"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"gW1qw1uv22","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]},{"children":null,"type":"text","title":"Apps Search Term","key":"apps_search_term","id":"bS2HDCnRoj","value":"react"},{"children":null,"type":"text","title":"Articles Search Term","key":"articles_search_term","id":"Gvh851S353","value":"react"},{"children":null,"type":"html-textarea","title":"Page Overview","key":"page_overview","id":"TDtnRZUslf","value":""},{"children":null,"type":"html-textarea","title":"SEO Content","key":"seo_content","id":"5VexcyxUD5","value":""}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2020-08-15T19:35:53.398Z","created_by":"5357ef811693be2118000001","created":"2020-08-15T19:35:53.398Z","status":"published","modified_at":"2020-08-15T19:40:16.879Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2020-08-15T19:40:16.879Z","metadata":{"image":{"url":"https://cdn.cosmicjs.com/db6ee8f0-df2e-11ea-b1c6-4d9e65be7589-api-based-cms.svg","imgix_url":"https://imgix.cosmicjs.com/db6ee8f0-df2e-11ea-b1c6-4d9e65be7589-api-based-cms.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/db6ee8f0-df2e-11ea-b1c6-4d9e65be7589-api-based-cms.svg","imgix_url":"https://imgix.cosmicjs.com/db6ee8f0-df2e-11ea-b1c6-4d9e65be7589-api-based-cms.svg"},"blurb":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best API-based CMS for websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"API-based","seo_description":"Cosmic is the best API-based CMS for websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/eda42a30-df2e-11ea-b1c6-4d9e65be7589-api-based-cms.png","imgix_url":"https://imgix.cosmicjs.com/eda42a30-df2e-11ea-b1c6-4d9e65be7589-api-based-cms.png"},"code_example":"","seo_title":"Best API-based CMS","videos":[],"apps_search_term":"react","articles_search_term":"react","page_overview":"","seo_content":""}},{"_id":"5fff3b962398620007d40121","order":21,"slug":"headless-cms-the-foundation-for-modern-digital-experiences","title":"Headless CMS: The Foundation for Modern Digital Experiences","content":"<p data-empty=\"true\">In the modern world, companies must adapt to new realities constantly, and quickly. Changes are happening as a result of unique customer preferences, which in turn are driven by an increase in new communication channels including IoT devices, wearables, and incessant new mobile applications.&nbsp;</p><p data-empty=\"true\"><img src=\"https://imgix.cosmicjs.com/9caa7b10-db01-11ea-84a8-4b73110d28e6-headless-CMS.png\" data-name=\"headless CMS.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" alt=\"a Headless CMS like Cosmic sets up your content to deploy to any final destination with minimal additional effort\"></p><p dir=\"ltr\">The rapid addition of new channels has a tremendous impact on the modern <em>digital experience</em> - the interactions customers and brands have with each other across the digital landscape. The quest for an optimal digital experience has increased our focus on the customer. Customers of today, and in the future, won&#39;t be satisfied with being entertained or educated with content; increasingly they want personalization and convenience.&nbsp;</p><p dir=\"ltr\">For businesses that wish to compete, especially at the enterprise level, the table stakes for a digital presence are more complex than just &quot;having a website.&quot; In fact, modern digital experiences often demand multiple websites, applications, and endpoints for customers. Customers expect nothing less than super-fast and hyper-personalized experiences, while internally, both marketers and developers have a need for speed, autonomy, and freedom to innovate. From a business perspective, all of the above needs to happen in a way that lowers costs and saves time.</p><p dir=\"ltr\">It&#39;s enough to make business owners throw in the towel, retrogress, and pour their marketing budget into direct mailers.</p><p dir=\"ltr\">Fortunately, there are better solutions available to meet the complex digital needs of today, and as we move into the future, we believe a headless approach will ultimately become the standard for managing content across all these channels effectively.</p><h2 dir=\"ltr\">Managing Digital Experiences: Out With The Old...</h2><p dir=\"ltr\">A content management system (CMS) has long been a pivotal component for a successful digital strategy. It&rsquo;s impossible for brands to effectively create, edit, manage, store, and deliver digital content without one. But, it&rsquo;s not the only piece of technology required to effectively manage digital experiences.</p><p dir=\"ltr\">Analytics, marketing automation, and digital asset management are just a few of the additional tools brands depend on. These additional tools have a major impact - not only on the type of CMS you require, but also on the software systems you implement and even the core business logic of your applications.</p><p dir=\"ltr\">So, how have companies managed this historically?</p><h3 dir=\"ltr\">The Old Suite Approach</h3><p dir=\"ltr\">For enterprise companies, in particular, a suite approach has often been the ideal approach - one vendor to handle all of your needs, from content management to email marketing and most other things within the marketing department.&nbsp;</p><p dir=\"ltr\">To build digital experiences, companies would then incorporate a legacy CMS solution to manage a corporate website and blog. For some small companies, this approach can still work; after all, WordPress still powers <a href=\"https://w3techs.com/technologies/details/cm-wordpress\">over 30% of the internet</a>. However, one issue that brands eventually run into is that legacy CMS solutions are rigid - they restrict and define the digital experience you can create.</p><p dir=\"ltr\">One example would be WordPress being largely incapable of managing mobile application data. Its responsive web design is okay. But if you want to manage content for more complex applications? Wordpress can&#39;t hack it - or requires your dev team to build proprietary logic just to make your solution &quot;fit&quot; WordPress infrastructure.</p><p dir=\"ltr\">While these platforms provide easy to use templates that make posting content to one or two endpoints easy, they fall short of providing consumers with the extensible, omnichannel experiences that they crave. On the backend, your integrations with other business tools become increasingly difficult to maintain &nbsp;There are too many restrictions on companies; something needs to change about the way CMS is implemented.&nbsp;</p><h3 dir=\"ltr\">The Modern Best-of-Breed Approach</h3><p dir=\"ltr\">That centralized solution is usually a headless CMS. Headless technology gives teams more flexibility to choose the best tool for their jobs, in addition to better options for distributing content across multiple channels.</p><p dir=\"ltr\">As one example, it&rsquo;s quite common for marketing teams to rip and replace their martech software. In fact, according to ChiefMarTech, <a href=\"https://chiefmartec.com/2019/12/marketers-rip-replace-martech-apps/\">83% of marketers replace a martech app each year</a>. CRM tools, marketing automation, analytics, and business intelligence software are regularly pulled out, plugged in, and replaced as businesses scale or improve solutions.</p><p dir=\"ltr\">A flexible and unbiased headless CMS makes connecting (and re-connecting) these tools seamless, producing a harmonious frontend experience for users and increasing development velocity on the backend.</p><h2 dir=\"ltr\">The Role of The Headless CMS</h2><p dir=\"ltr\">How does headless accomplish this?</p><p dir=\"ltr\">Since traditional content management systems lack the functionality and flexibility to do it all, headless platforms don&rsquo;t attempt to be an all-in-one solution.</p><p dir=\"ltr\">Headless CMS act as the central repository within a best of breed stack, focusing primarily on managing a brand&rsquo;s content lifecycle. Increased focus on flexible API functionality allows companies to connect to multiple frontend channels and integrate the backend with whichever business tools they need, to build the experience they envision.</p><h3 dir=\"ltr\">Headless Architecture: Removing Backend Restraints</h3><p dir=\"ltr\">Whereas in a legacy platform, the frontend and backend systems are tightly coupled together, a headless CMS has a decoupled approach that separates the backend repository from the frontend delivery layer.&nbsp;</p><p dir=\"ltr\">So, teams still have a repository that allows them to create, store, manage and edit content and then can connect to any frontend channel they need to with the help of APIs. This removes the handcuffs from developers especially. Developers have more freedom to optimize the frontend experience for customers, using any language they want, and with more precise optimizations for unique frontends.</p><p dir=\"ltr\">Whether brands need to deliver to something traditional like a website or a mobile device, emerging channels like a VR device or smartwatch, or a channel that doesn&#39;t exist yet, a headless CMS ensures your core data is readily deployable.</p><p dir=\"ltr\">Read More: <a href=\"https://www.cosmicjs.com/blog/headless-cms-explained\">Headless CMS: Everything Explained&nbsp;</a></p><p data-empty=\"true\"><br></p><h3 dir=\"ltr\">Free-flowing Content for Free-flowing Experiences</h3><p dir=\"ltr\">The second distinguishing feature of headless CMS from other content management systems is the collaboration tools that enable IT, teams and marketers, to work together fluidly.<br><br>For instance, thanks to the frontend agnosticism of a headless CMS, developers are free to use different frontend frameworks for different channels and experiences, optimizing each channel for speed and usability in the process. No matter where the content is heading, marketers can use the same user-friendly dashboards, workflow management tools, content authoring environments, and content preview feature.</p><p dir=\"ltr\">Here&#39;s a real-world example of how this works: Medical Realities, a platform that delivers real and immersive experiences through VR, needed a way to deliver content to devices to teach surgeons using interactive models. With the help of Cosmic, a headless CMS, their developers quickly created content models that would allow their non-technical users to manage complex medical VR content and deliver it to the headsets.&nbsp;</p><p dir=\"ltr\">Read More: <a href=\"https://www.cosmicjs.com/case-studies/medical-realities-delivers-vr-surgical-content\">Medical Realities Case Study</a></p><h2 dir=\"ltr\">Cosmic: A Faster Way to Manage Modern Content Experiences</h2><p dir=\"ltr\">The modern digital experience is no longer limited to the corporate website or even the mobile device. It includes new and emerging channels such as VR headsets, smartwatches, video games, and more. Brands need a way to create and manage these experiences their customers crave quickly, and a central system that can coexist and integrate seamlessly with other tools in the Martech stack.</p><p>Cosmic is <a href=\"https://www.cosmicjs.com/headless-cms/\">a headless CMS platform</a> that enables teams to build these modern experiences by providing the new tools that developers need to create their own front ends or extend their capabilities with APIs. It also gives marketers an easy-to-use content editing experience that makes generating content for these experiences possible.&nbsp;</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"9niXHuVfLP","value":"5f5fac071936450007d8a01c","required":true,"object_type":"authors","object":{"_id":"5f5fac071936450007d8a01c","slug":"kyle-meagher","title":"Kyle Meagher","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"hsMOJCxIAj","value":"kylemeags"},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D2rdKO4lEL","value":"e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2020-09-14T17:44:39.110Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-14T17:45:09.251Z","created":"2020-09-14T17:44:39.110Z","status":"published","published_at":"2020-09-14T17:44:39.110Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"iT5rDOnlGF","value":"<p>We believe headless is positioned to dominate the CMS market in the next decade. How so? Take a peek into our insights.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"nWhT7BnJBD","value":"9caa7b10-db01-11ea-84a8-4b73110d28e6-headless-CMS.png","url":"https://cdn.cosmicjs.com/9caa7b10-db01-11ea-84a8-4b73110d28e6-headless-CMS.png","imgix_url":"https://imgix.cosmicjs.com/9caa7b10-db01-11ea-84a8-4b73110d28e6-headless-CMS.png"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"RYG21eiiCB","value":"Headless CMS will dominate the market in the next decade - but how? Explore the limitations of current solutions to understand."},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"lgoq0FZ6vt","value":""}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2021-01-13T18:27:34.360Z","created_by":"5f8088982aa32f00093977bb","modified_at":"2021-01-15T17:56:37.389Z","created":"2021-01-13T18:27:34.360Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/9caa7b10-db01-11ea-84a8-4b73110d28e6-headless-CMS.png","modified_by":"5f8088982aa32f00093977bb","publish_at":null,"published_at":"2021-01-15T17:56:37.389Z","unpublish_at":null,"metadata":{"author":{"_id":"5f5fac071936450007d8a01c","slug":"kyle-meagher","title":"Kyle Meagher","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"hsMOJCxIAj","value":"kylemeags"},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D2rdKO4lEL","value":"e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2020-09-14T17:44:39.110Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-14T17:45:09.251Z","created":"2020-09-14T17:44:39.110Z","status":"published","published_at":"2020-09-14T17:44:39.110Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","metadata":{"username":"kylemeags","profile_picture":{"url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}}},"teaser":"<p>We believe headless is positioned to dominate the CMS market in the next decade. How so? Take a peek into our insights.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/9caa7b10-db01-11ea-84a8-4b73110d28e6-headless-CMS.png","imgix_url":"https://imgix.cosmicjs.com/9caa7b10-db01-11ea-84a8-4b73110d28e6-headless-CMS.png"},"seo_meta_description":"Headless CMS will dominate the market in the next decade - but how? Explore the limitations of current solutions to understand.","published_date":""}},{"_id":"5f10d3bd2060a90007ad26cc","order":21,"slug":"webhook-triggers-via-api-npm-modules-update-and-more","title":"Webhook triggers via API, NPM modules updates, and more","content":"<p>We have a few exciting updates to help you power content for your modern websites and apps using Cosmic.</p><p><br></p><p><strong>1. Trigger webhooks via API</strong><br>You can now trigger webhooks using the API by passing <em>trigger_webhook=true</em> in the request body. Find your webhooks in <em>Bucket Settings &gt; Webhooks.</em> Be sure to check out the <a href=\"https://docs.cosmicjs.com/webhooks/#events\" rel=\"noopener noreferrer\" target=\"_blank\">Webhooks documentation</a> and <a href=\"https://docs.cosmicjs.com/rest-api/\" rel=\"noopener noreferrer\" target=\"_blank\">API documentation</a> to see with which API requests this is possible (Add, Edit, and Delete Objects and Media).</p><p><br></p><p><strong>2. Edit Object via API using <span data-reactroot=\"\" data-token-index=\"1\"><em>id</em></span></strong><br>We have added the functionality to edit Objects via the API using <em><strong>id</strong></em>. &nbsp;Which gives you the ability to edit the Object slug (which was previously not possible). Be sure to check this out in our <a href=\"https://docs.cosmicjs.com/rest-api/objects.html#edit-object\" rel=\"noopener noreferrer\" target=\"_blank\">Edit Object API documentation</a>.</p><p><br></p><p><strong>3. Cosmic NPM module updates</strong><br>Check out the <a href=\"https://www.npmjs.com/package/cosmicjs?activeTab=versions\" rel=\"noopener noreferrer\" target=\"_blank\">latest release</a> of Cosmic NPM module. The new version includes the following updates:&nbsp;</p><ul><li>Performance updates (up to 10x faster install!)</li><li>Codebase improvements (Refactoring and modularization)</li><li>Babel and webpack version bump</li><li>Production packages/dependencies shrink down</li></ul><p>This update will improve the overall developer experience as well as you&#39;ll able to deliver content to users much faster 🚀.&nbsp;</p><p><br></p><p><strong>4. Cosmic Gatsby source plugin updates</strong><br>We&#39;ve updated the packages/dependencies in the <a href=\"https://www.npmjs.com/package/gatsby-source-cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby source plugin for Cosmic</a> and fixed <em>localMedia</em> bugs related to <em>Object</em> &amp; <em>Objects</em> metafields. Check out the latest version <a href=\"https://www.npmjs.com/package/gatsby-source-cosmicjs?activeTab=versions\" rel=\"noopener noreferrer\" target=\"_blank\">here</a>.</p><p><br></p><p>We hope you enjoy these updates. If you have any questions, <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">join our Slack community</a> and <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a>.</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"xdIwbvgB9K","value":"2020-07-17"},{"children":null,"type":"object","title":"Author","key":"author","id":"cTEXcGcOFC","value":"599b30c44f629e3a5900010f","object_type":"authors","object":{"_id":"599b30c44f629e3a5900010f","slug":"jazib-sawar","title":"Jazib Sawar","content":"","metafields":[{"value":"d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","id":"MoCJXLYqwC","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","imgix_url":"https://imgix.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg"},{"value":"jazibsawar","id":"","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-08-21T19:13:08.011Z","created_by":"5357ef811693be2118000001","created":"2017-08-21T19:13:08.011Z","status":"published","modified_at":"2020-09-15T15:41:11.076Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-12-09T16:06:31.900Z","thumbnail":"https://imgix.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg"}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"wQVDeI5XLl","value":"334f2110-c7c5-11ea-99bd-bbc5ef3737c2-2RLRbRkWtpc.jpg","url":"https://cdn.cosmicjs.com/334f2110-c7c5-11ea-99bd-bbc5ef3737c2-2RLRbRkWtpc.jpg","imgix_url":"https://imgix.cosmicjs.com/334f2110-c7c5-11ea-99bd-bbc5ef3737c2-2RLRbRkWtpc.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2020-07-16T22:25:01.244Z","created_by":"597f4130c4102a386100055c","modified_at":"2020-08-10T14:02:39.393Z","created":"2020-07-16T22:25:01.244Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2020-07-17T17:00:08.887Z","metadata":{"published_date":"2020-07-17","author":{"_id":"599b30c44f629e3a5900010f","slug":"jazib-sawar","title":"Jazib Sawar","content":"","metafields":[{"value":"d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","id":"MoCJXLYqwC","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","imgix_url":"https://imgix.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg"},{"value":"jazibsawar","id":"","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-08-21T19:13:08.011Z","created_by":"5357ef811693be2118000001","created":"2017-08-21T19:13:08.011Z","status":"published","modified_at":"2020-09-15T15:41:11.076Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-12-09T16:06:31.900Z","thumbnail":"https://imgix.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","imgix_url":"https://imgix.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg"},"username":"jazibsawar"}},"featured_image":{"url":"https://cdn.cosmicjs.com/334f2110-c7c5-11ea-99bd-bbc5ef3737c2-2RLRbRkWtpc.jpg","imgix_url":"https://imgix.cosmicjs.com/334f2110-c7c5-11ea-99bd-bbc5ef3737c2-2RLRbRkWtpc.jpg"}}},{"_id":"5a2455620cb0e3291c00002e","order":21,"slug":"acculevel-deploys-a-blog","title":"Acculevel Deploys a Blog","content":"<p dir=\"ltr\"><a href=\"https://acculevel.com\" rel=\"noopener noreferrer\" target=\"_blank\">Acculevel</a> is Your Foundation Expert. Serving the Midwest United States for the last 20 years, Acculevel knows what it means to serve and do a job right. Customer retention, reviews and loyalty are the name of their game, so to optimize these efforts and keep customers engaged and informed, Acculevel is scaling up their digital presence through its upcoming website, a new mobile application and more. Led by a new Chief Technology Officer overseeing developers and content editors, here&#39;s how Acculevel is ensuring their own foundation is solid.<br><br>Mired in an installed <a href=\"https://hackernoon.com/cosmic-js-vs-wordpress-668608df4e22\" rel=\"noopener noreferrer\" target=\"_blank\">WordPress</a> system was leaving Acculevel without the flexibility needed to nimbly build and publish content campaigns to engage with customers. Acculevel&#39;s tech team is currently building out a new zippy website built on a <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a> stack, complete with API integrations for ACH Authentication (Plaid) and Payment Gateway (Stripe). Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editors to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/516cb890-daa8-11e7-92aa-b5a1b0875421-21761700_1534030483286380_3096937493413845441_n.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a seamless on-boarding experience for creating a Bucket to manage blog content for our growing organization. We needed a programming-language agnostic API to manage content both within our existing WordPress website as well as within our new Node.js web application. Cosmic fit the bill perfectly with its simple Object schema and powerful Metafields. With Cosmic, content is just data and you can pull it however you&#39;d like, wherever you like, allowing us &nbsp;to build new tools in the future such as survey tools, employee forums and more.&rdquo;</p><p><cite>&mdash; Dylan Marsh, Chief Technology Officer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Acculevel ","key":"company","title":"Company","type":"text","children":null},{"value":"Construction","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editor to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","imgix_url":"https://imgix.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-12-03T19:49:54.515Z","created_by":"5716b504e9c686d006000073","created":"2017-12-03T19:49:54.515Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"company":"Acculevel ","industry_type":"Construction","teaser":"Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editor to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","imgix_url":"https://imgix.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg"}}},{"_id":"5d4c245d2f744c56f69a1ee6","slug":"content-management-system-for-native-apps","title":"Content Management System for Native Apps","content":"<p>Cosmic JS provides a flexible content management system for teams building native apps. When you create content in the Cosmic JS Headless Content Management System, you&#39;re able to deliver it to all your websites and native apps. Create once and deliver everywhere. Content creators are given a web-based Dashboard to create content that iOS and Android apps can consume just like their website. This ensures messaging-consistency and the ability to reach all of your users, regardless of their device.<br><br></p><h3>What is Headless CMS Software?</h3><p>Headless CMS Software works by providing non-technical editors with a Dashboard UI to model, create and publish content while providing developers with API tools and resources to integrate content with any website or app. By decoupling content from code, teams create a central content repository that can power all of their content-powered applications.&nbsp;</p>","metafields":[{"value":"Content Management System for Native Apps","key":"solution_name","title":"Solution Name","type":"text","children":null},{"value":"633ad600-9dc1-11e9-a5b4-e5df9f8049d3-Plato.png","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/633ad600-9dc1-11e9-a5b4-e5df9f8049d3-Plato.png","imgix_url":"https://imgix.cosmicjs.com/633ad600-9dc1-11e9-a5b4-e5df9f8049d3-Plato.png"},{"object_type":"case-studies","value":"5ade6e0e2b218820ec24bff1,5bd889bf80b80325461575c5,5bea030f3ca4d02ee5b4abbd","key":"case_studies","title":"Case Studies","type":"objects","children":null,"objects":[{"_id":"5ade6e0e2b218820ec24bff1","slug":"medical-realities-delivers-vr-surgical-content","title":"Medical Realities Delivers VR Surgical Content","content":"<p>The <a href=\"https://www.medicalrealities.com\" rel=\"noopener noreferrer\" target=\"_blank\">Medical Realties</a> Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/5dc112a0-5aa8-11e8-a7f7-e17cbb39f395-ice_screenshot_20180518-092612.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Medical Realities team needed a way for educators (non-technical editors) to manage content that could be served to VR headsets for consumption by trainees, so they chose Cosmic to manage and deliver their content from the cloud through an API.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-10999922_465521620265848_6799915322872806436_o.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily spin up content models that would allow our non-technical editors to manage the most sophisticated medical VR content out there. Our developers were equipped with robust Docs and Example Apps to get them started and were able to use the bleeding-edge frameworks necessary to run Virtual Reality.&quot;</p><p><cite>&mdash; Joe Marritt, Lead Web Developer&nbsp;</cite></p></blockquote>","metafields":[{"value":"Medical Realities","key":"company","title":"Company","type":"text","children":null},{"value":"Healthcare and Virtual Reality ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"The Medical Realties Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","imgix_url":"https://imgix.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-04-23T23:36:46.885Z","created_by":"5716b504e9c686d006000073","created":"2018-04-23T23:36:46.885Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-05-18T17:07:50.800Z"},{"_id":"5bd889bf80b80325461575c5","slug":"plato-delivers-mobile-news-feed-content-with-cosmic-js","title":"Plato Delivers Mobile News Feed Content with Cosmic","content":"<p dir=\"ltr\">Plato&#39;s mission is to bring people together through meaningful &amp; social games. <a href=\"http://www.platoapp.com\" rel=\"noopener noreferrer\" target=\"_blank\">Plato</a> combines chat &amp; games seamlessly, as the first messenger built from the ground up to support full multiplayer games. With a team comprised of Yahoo and gaming veterans plus backing from WhatsApp, Plato is available now on iOS &amp; Android.<br><br></p><p><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b09c33a0-dc63-11e8-a63d-c7054455c7d9-ice_screenshot_20181030-114842.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">Plato had a home-built CMS that, between operational costs and the engineering salaries to maintain it, was costing far too much. The team decided to replace their internal system with Cosmic to allow their developers to build new content models when they need to while empowering editors to manage content without bottlenecking the development team.&nbsp;</p><p dir=\"ltr\">Plato&#39;s new tech stack is Golang based and hosted on AWS. Plato&#39;s mobile clients, written in Swift and Kotlin, access their news feed content, which is ATOM Syndication Format. The application uses the Cosmic REST API to pull articles and package them into an ATOM-compliant feed.&nbsp;</p><p dir=\"ltr\"><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/42e9ed20-dc63-11e8-9019-332e53831a9a-14963156_1599170143430300_6292826317590698217_n.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;It is refreshing to use an API-first CMS, rather than trying to integrate with a complex, monolithic system and adapt it to our specific use case.&rdquo;</p><p><cite>&mdash; Jesse Macnish, Chief Technology Officer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Plato","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Plato's mission is to bring people together through meaningful & social games. Plato combines chat & games seamlessly, as the first messenger built from the ground up to support full multiplayer games. With a team comprised of Yahoo and gaming veterans plus backing from WhatsApp, Plato is available now on iOS & Android.\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-30T16:41:35.346Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-01-08T23:23:29.527Z"},{"_id":"5bea030f3ca4d02ee5b4abbd","slug":"killing-floor-2-launches-twisted-christmas-seasons-beatings","title":"Killing Floor 2 Launches Twisted Christmas: Season's Beatings","content":"<p dir=\"ltr\"><a href=\"http://www.tripwireinteractive.com\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a> recently launched its corporate website on Cosmic and can now easily manage microsite content for each game via a dedicated studio manager as its content creator. Killing Floor 2 is one of the studio&#39;s most popular games and incorporates seasonal promotions associated with its product release schedule.&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/6c590e60-e6cd-11e8-a2b5-d3e39a574612-ice_screenshot_20181112-133358.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><a href=\"http://twistedchristmas2018.killingfloor2.com\" rel=\"noopener noreferrer\" target=\"_blank\">Twisted Christmas</a>, a seasonal campaign designed to promote Killing Floor 2, has an &quot;Advent Calendar&quot; that debuts a new piece of content everyday leading up to Killing Floor 2&#39;s release. The team at Tripwire Interactive was able to build their application and create their marketing landing page easily using Cosmic. Using the Scheduled Publishing feature, they created all of the content for the countdown and set each Object to publish at its respective date. Now they&#39;re free to work on other projects knowing their content is publishing on schedule. <a href=\"https://cosmicjs.com/case-studies/tripwire-interactive-builds-a-react-corporate-website\" rel=\"noopener noreferrer\" target=\"_blank\">Read more</a> about how Tripwire Interactive builds apps faster using Cosmic.</p><p dir=\"ltr\"><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team\r\nhas been enjoying the ease of use with the new system.&quot;</p><p><cite>&mdash; Owen Liversidge, Lead Developer</cite></p></blockquote><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/5a608800-e6cd-11e8-97d3-11ffe223301f-ezgif-4-10b62f50c536.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"Killing Floor 2","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Twisted Christmas, a seasonal campaign designed to promote Killing Floor 2, has an \"Advent Calendar\" that debuts a new piece of content everyday leading up to Killing Floor 2's release. The team at Tripwire Interactive was able to build their application and create their marketing landing page easily using Cosmic. Using the Scheduled Publishing feature, they created all of the content for the countdown and set each Object to publish at its respective date. Now they're free to work on other projects knowing their content is publishing on schedule. Read more about how Tripwire Interactive builds apps faster using Cosmic.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"89f06f40-e6cd-11e8-93f0-a94cde6f34a7-KF2_Logo.5b251745.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/89f06f40-e6cd-11e8-93f0-a94cde6f34a7-KF2_Logo.5b251745.png","imgix_url":"https://imgix.cosmicjs.com/89f06f40-e6cd-11e8-93f0-a94cde6f34a7-KF2_Logo.5b251745.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-11-12T22:47:43.586Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-11-13T14:43:47.754Z"}]},{"repeater_fields":"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\"","value":"cross-platform-blog","key":"app_slugs","title":"App Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"cross-platform-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"react-native-twitter-clone","type":"text","required":false}]}]},{"repeater_fields":"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\"","value":"imgix-editor","key":"extension_slugs","title":"Extension Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"imgix-editor","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"export-to-csv","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"mux-videos","type":"text","required":false}]}]},{"key":"testimonial","title":"Testimonial","type":"html-textarea","children":null,"value":"<p>&quot;It is refreshing to use an API-first CMS, rather than trying to integrate with a complex, monolithic system and adapt it to our specific use case.&rdquo;</p>"},{"value":"Jesse Macnish, Chief Technology Officer at Plato Chat","key":"testimonial_credit","title":"Testimonial Credit","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created":"2019-08-08T13:32:13.551Z","created_at":"2019-07-08T15:03:43.051Z","modified_at":"2019-08-08T13:33:05.559Z","status":"published","locale":null,"published_at":"2019-08-08T13:33:05.559Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"order":21,"metadata":{"solution_name":"Content Management System for Native Apps","image":{"url":"https://cdn.cosmicjs.com/633ad600-9dc1-11e9-a5b4-e5df9f8049d3-Plato.png","imgix_url":"https://imgix.cosmicjs.com/633ad600-9dc1-11e9-a5b4-e5df9f8049d3-Plato.png"},"case_studies":[{"_id":"5ade6e0e2b218820ec24bff1","slug":"medical-realities-delivers-vr-surgical-content","title":"Medical Realities Delivers VR Surgical Content","content":"<p>The <a href=\"https://www.medicalrealities.com\" rel=\"noopener noreferrer\" target=\"_blank\">Medical Realties</a> Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/5dc112a0-5aa8-11e8-a7f7-e17cbb39f395-ice_screenshot_20180518-092612.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Medical Realities team needed a way for educators (non-technical editors) to manage content that could be served to VR headsets for consumption by trainees, so they chose Cosmic to manage and deliver their content from the cloud through an API.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-10999922_465521620265848_6799915322872806436_o.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily spin up content models that would allow our non-technical editors to manage the most sophisticated medical VR content out there. Our developers were equipped with robust Docs and Example Apps to get them started and were able to use the bleeding-edge frameworks necessary to run Virtual Reality.&quot;</p><p><cite>&mdash; Joe Marritt, Lead Web Developer&nbsp;</cite></p></blockquote>","metafields":[{"value":"Medical Realities","key":"company","title":"Company","type":"text","children":null},{"value":"Healthcare and Virtual Reality ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"The Medical Realties Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","imgix_url":"https://imgix.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-04-23T23:36:46.885Z","created_by":"5716b504e9c686d006000073","created":"2018-04-23T23:36:46.885Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-05-18T17:07:50.800Z","metadata":{"company":"Medical Realities","industry_type":"Healthcare and Virtual Reality ","teaser":"The Medical Realties Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application. \n","logo":{"url":"https://cdn.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","imgix_url":"https://imgix.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png"}}},{"_id":"5bd889bf80b80325461575c5","slug":"plato-delivers-mobile-news-feed-content-with-cosmic-js","title":"Plato Delivers Mobile News Feed Content with Cosmic","content":"<p dir=\"ltr\">Plato&#39;s mission is to bring people together through meaningful &amp; social games. <a href=\"http://www.platoapp.com\" rel=\"noopener noreferrer\" target=\"_blank\">Plato</a> combines chat &amp; games seamlessly, as the first messenger built from the ground up to support full multiplayer games. With a team comprised of Yahoo and gaming veterans plus backing from WhatsApp, Plato is available now on iOS &amp; Android.<br><br></p><p><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b09c33a0-dc63-11e8-a63d-c7054455c7d9-ice_screenshot_20181030-114842.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">Plato had a home-built CMS that, between operational costs and the engineering salaries to maintain it, was costing far too much. The team decided to replace their internal system with Cosmic to allow their developers to build new content models when they need to while empowering editors to manage content without bottlenecking the development team.&nbsp;</p><p dir=\"ltr\">Plato&#39;s new tech stack is Golang based and hosted on AWS. Plato&#39;s mobile clients, written in Swift and Kotlin, access their news feed content, which is ATOM Syndication Format. The application uses the Cosmic REST API to pull articles and package them into an ATOM-compliant feed.&nbsp;</p><p dir=\"ltr\"><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/42e9ed20-dc63-11e8-9019-332e53831a9a-14963156_1599170143430300_6292826317590698217_n.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;It is refreshing to use an API-first CMS, rather than trying to integrate with a complex, monolithic system and adapt it to our specific use case.&rdquo;</p><p><cite>&mdash; Jesse Macnish, Chief Technology Officer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Plato","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Plato's mission is to bring people together through meaningful & social games. Plato combines chat & games seamlessly, as the first messenger built from the ground up to support full multiplayer games. With a team comprised of Yahoo and gaming veterans plus backing from WhatsApp, Plato is available now on iOS & Android.\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-30T16:41:35.346Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-01-08T23:23:29.527Z","metadata":{"company":"Plato","industry_type":"Gaming ","teaser":"Plato's mission is to bring people together through meaningful & social games. Plato combines chat & games seamlessly, as the first messenger built from the ground up to support full multiplayer games. With a team comprised of Yahoo and gaming veterans plus backing from WhatsApp, Plato is available now on iOS & Android.\n\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e6fd2940-1390-11e9-a4d9-67aa1af4f618-pauHfhZ9_400x400.jpg"}}},{"_id":"5bea030f3ca4d02ee5b4abbd","slug":"killing-floor-2-launches-twisted-christmas-seasons-beatings","title":"Killing Floor 2 Launches Twisted Christmas: Season's Beatings","content":"<p dir=\"ltr\"><a href=\"http://www.tripwireinteractive.com\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a> recently launched its corporate website on Cosmic and can now easily manage microsite content for each game via a dedicated studio manager as its content creator. Killing Floor 2 is one of the studio&#39;s most popular games and incorporates seasonal promotions associated with its product release schedule.&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/6c590e60-e6cd-11e8-a2b5-d3e39a574612-ice_screenshot_20181112-133358.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><a href=\"http://twistedchristmas2018.killingfloor2.com\" rel=\"noopener noreferrer\" target=\"_blank\">Twisted Christmas</a>, a seasonal campaign designed to promote Killing Floor 2, has an &quot;Advent Calendar&quot; that debuts a new piece of content everyday leading up to Killing Floor 2&#39;s release. The team at Tripwire Interactive was able to build their application and create their marketing landing page easily using Cosmic. Using the Scheduled Publishing feature, they created all of the content for the countdown and set each Object to publish at its respective date. Now they&#39;re free to work on other projects knowing their content is publishing on schedule. <a href=\"https://cosmicjs.com/case-studies/tripwire-interactive-builds-a-react-corporate-website\" rel=\"noopener noreferrer\" target=\"_blank\">Read more</a> about how Tripwire Interactive builds apps faster using Cosmic.</p><p dir=\"ltr\"><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team\r\nhas been enjoying the ease of use with the new system.&quot;</p><p><cite>&mdash; Owen Liversidge, Lead Developer</cite></p></blockquote><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/5a608800-e6cd-11e8-97d3-11ffe223301f-ezgif-4-10b62f50c536.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"Killing Floor 2","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Twisted Christmas, a seasonal campaign designed to promote Killing Floor 2, has an \"Advent Calendar\" that debuts a new piece of content everyday leading up to Killing Floor 2's release. The team at Tripwire Interactive was able to build their application and create their marketing landing page easily using Cosmic. Using the Scheduled Publishing feature, they created all of the content for the countdown and set each Object to publish at its respective date. Now they're free to work on other projects knowing their content is publishing on schedule. Read more about how Tripwire Interactive builds apps faster using Cosmic.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"89f06f40-e6cd-11e8-93f0-a94cde6f34a7-KF2_Logo.5b251745.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/89f06f40-e6cd-11e8-93f0-a94cde6f34a7-KF2_Logo.5b251745.png","imgix_url":"https://imgix.cosmicjs.com/89f06f40-e6cd-11e8-93f0-a94cde6f34a7-KF2_Logo.5b251745.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-11-12T22:47:43.586Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-11-13T14:43:47.754Z","metadata":{"company":"Killing Floor 2","industry_type":"Gaming","teaser":"Twisted Christmas, a seasonal campaign designed to promote Killing Floor 2, has an \"Advent Calendar\" that debuts a new piece of content everyday leading up to Killing Floor 2's release. The team at Tripwire Interactive was able to build their application and create their marketing landing page easily using Cosmic. Using the Scheduled Publishing feature, they created all of the content for the countdown and set each Object to publish at its respective date. Now they're free to work on other projects knowing their content is publishing on schedule. Read more about how Tripwire Interactive builds apps faster using Cosmic.\n","logo":{"url":"https://cdn.cosmicjs.com/89f06f40-e6cd-11e8-93f0-a94cde6f34a7-KF2_Logo.5b251745.png","imgix_url":"https://imgix.cosmicjs.com/89f06f40-e6cd-11e8-93f0-a94cde6f34a7-KF2_Logo.5b251745.png"}}}],"app_slugs":[{"slug":"cross-platform-blog"},{"slug":"react-native-twitter-clone"}],"extension_slugs":[{"slug":"imgix-editor"},{"slug":"export-to-csv"},{"slug":"mux-videos"}],"testimonial":"<p>&quot;It is refreshing to use an API-first CMS, rather than trying to integrate with a complex, monolithic system and adapt it to our specific use case.&rdquo;</p>","testimonial_credit":"Jesse Macnish, Chief Technology Officer at Plato Chat"}},{"_id":"5e7293190fbea60007a5c8f1","order":22,"slug":"two-factor-authentication-emoji-nav-icons-and-database-upgrade","title":"Two-Factor Authentication, Emoji Nav Icons, and Database Upgrade","content":"<p>We&#39;ve got an exciting release for you which includes two-factor authentication, new emoji nav icons, and a big database upgrade.<br><br><strong>🔒Two-Factor Authentication</strong><br>Two-factor authentication is now available on all accounts <strong>for free</strong>. Go to <a href=\"https://app.cosmicjs.com/account/2fa\"><em>Account Settings &gt; Two-Factor Authentication</em></a> to connect your account to your mobile phone for an added layer of security. This feature does not apply to users using a third-party login such as Google, GitHub, or SSO.</p><p><br></p><p style=\"text-align: center;\"><img src=\"https://cdn.cosmicjs.com/b1f93af0-69fb-11ea-8503-3f98f82225d5-verify.png\" class=\"fr-fic fr-dib\" style=\"max-width: 400px; width: 100%;\"></p><p><br><strong>🚀Emoji Nav Icons</strong><br>You can now add Emojis to the Object Type sidebar nav. Go to <em>Object Type &gt; Settings</em> to replace the default folder icon with any one of your favorite emojis. This is a great way to organize content visually, and also fun.</p><p><br><img src=\"https://cdn.cosmicjs.com/88c9dd60-69fb-11ea-8503-3f98f82225d5-emojis.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br><strong>⚡MongoDB Database Upgrade</strong><br>You may not have noticed, but we&#39;ve recently undergone a pretty massive database upgrade and migration. What you MAY have noticed is that the dashboard and API requests (non-cached endpoints) are now up to 50% faster and more resilient to sudden bursts of traffic. This is because our database is now powered by the best-in-class, auto-scaling infrastructure at <a href=\"https://www.mongodb.com/cloud/atlas\" rel=\"noopener noreferrer\" target=\"_blank\">MongoDB Atlas</a>.</p><p><br></p><p>We hope you enjoy these new features, security, and infrastructure upgrades. We&#39;re constantly improving our service to make your experience better. If you have any questions or comments, please feel free to <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">join our community on Slack</a>.</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"wiJldkeqES","value":"2020-03-20"},{"children":null,"type":"object","title":"Author","key":"author","id":"iTUta8EFRi","value":"5768b253163172890e00002c","object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"pjIx2ZCwMA","value":"c82676c0-5cc8-11ea-8649-b9c3b12e7d52-UhH0uL9YahM.jpg","url":"https://cdn.cosmicjs.com/c82676c0-5cc8-11ea-8649-b9c3b12e7d52-UhH0uL9YahM.jpg","imgix_url":"https://imgix.cosmicjs.com/c82676c0-5cc8-11ea-8649-b9c3b12e7d52-UhH0uL9YahM.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2020-03-18T21:31:05.415Z","created_by":"5357ef811693be2118000001","modified_at":"2020-08-10T13:59:43.225Z","created":"2020-03-18T21:31:05.415Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2020-03-20T14:01:49.744Z","metadata":{"published_date":"2020-03-20","author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":"https://cdn.cosmicjs.com/c82676c0-5cc8-11ea-8649-b9c3b12e7d52-UhH0uL9YahM.jpg","imgix_url":"https://imgix.cosmicjs.com/c82676c0-5cc8-11ea-8649-b9c3b12e7d52-UhH0uL9YahM.jpg"}}},{"_id":"59666b26c863d9eb6c0001f5","slug":"brand-new-congress-elects-a-new-cms","title":"Brand New Congress Elects a New CMS","content":"<p>Every democracy requires representation. <a href=\"https://brandnewcongress.org\" rel=\"noopener noreferrer\" target=\"_blank\">Brand New Congress</a> intends to elect a new set of representatives, and is doing so with the help of Cosmic to deliver their content via the cloud.</p><p style=\"text-align: center;\"><br><img src=\"https://cosmicjs.imgix.net/60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png\" style=\"max-width: 500px; width: 100%;\" class=\"fr-fic fr-dib\"></p><p style=\"text-align: center;\"><br></p><blockquote><p>&ldquo;Brand New Congress moved from a traditional CMS to Cosmic as part of a re-implementation of our website. It&rsquo;s been great! First, Cosmic&rsquo;s API-first approach creates a separation between content and implementation, which gave us the flexibility to implement our website in a way that made the most sense for our use case: mostly server side rendered with small React widgets, without worrying about compatibility with existing CMSes. Second, Cosmic&rsquo;s user roles &ndash; developer and editor &ndash; where the developer defines a schema and the editor edits objects within those parameters &ndash; give me (the developer) the confidence that my content editors cannot accidentally\r\nbreak the site or edit the content in some incompatible way.&rdquo;</p><p><cite>&mdash; Ben Paul Ryan Parker, Director of Technology, Brand New Congress</cite></p></blockquote>","metafields":[{"value":"Brand New Congress","key":"company","title":"Company","type":"text","children":null},{"value":"Non-Profit","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Every democracy requires representation. Brand New Congress intends to elect a new set of representatives, and is doing so with the help of Cosmic to deliver their content via the cloud. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png","imgix_url":"https://imgix.cosmicjs.com/60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T18:32:06.453Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","order":22,"publish_at":null,"metadata":{"company":"Brand New Congress","industry_type":"Non-Profit","teaser":"Every democracy requires representation. Brand New Congress intends to elect a new set of representatives, and is doing so with the help of Cosmic to deliver their content via the cloud. \n","logo":{"url":"https://cdn.cosmicjs.com/60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png","imgix_url":"https://imgix.cosmicjs.com/60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png"}}},{"_id":"5bea030f3ca4d02ee5b4abbd","order":22,"slug":"killing-floor-2-launches-twisted-christmas-seasons-beatings","title":"Killing Floor 2 Launches Twisted Christmas: Season's Beatings","content":"<p dir=\"ltr\"><a href=\"http://www.tripwireinteractive.com\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a> recently launched its corporate website on Cosmic and can now easily manage microsite content for each game via a dedicated studio manager as its content creator. Killing Floor 2 is one of the studio&#39;s most popular games and incorporates seasonal promotions associated with its product release schedule.&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/6c590e60-e6cd-11e8-a2b5-d3e39a574612-ice_screenshot_20181112-133358.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><a href=\"http://twistedchristmas2018.killingfloor2.com\" rel=\"noopener noreferrer\" target=\"_blank\">Twisted Christmas</a>, a seasonal campaign designed to promote Killing Floor 2, has an &quot;Advent Calendar&quot; that debuts a new piece of content everyday leading up to Killing Floor 2&#39;s release. The team at Tripwire Interactive was able to build their application and create their marketing landing page easily using Cosmic. Using the Scheduled Publishing feature, they created all of the content for the countdown and set each Object to publish at its respective date. Now they&#39;re free to work on other projects knowing their content is publishing on schedule. <a href=\"https://cosmicjs.com/case-studies/tripwire-interactive-builds-a-react-corporate-website\" rel=\"noopener noreferrer\" target=\"_blank\">Read more</a> about how Tripwire Interactive builds apps faster using Cosmic.</p><p dir=\"ltr\"><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team\r\nhas been enjoying the ease of use with the new system.&quot;</p><p><cite>&mdash; Owen Liversidge, Lead Developer</cite></p></blockquote><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/5a608800-e6cd-11e8-97d3-11ffe223301f-ezgif-4-10b62f50c536.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"Killing Floor 2","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Twisted Christmas, a seasonal campaign designed to promote Killing Floor 2, has an \"Advent Calendar\" that debuts a new piece of content everyday leading up to Killing Floor 2's release. The team at Tripwire Interactive was able to build their application and create their marketing landing page easily using Cosmic. Using the Scheduled Publishing feature, they created all of the content for the countdown and set each Object to publish at its respective date. Now they're free to work on other projects knowing their content is publishing on schedule. Read more about how Tripwire Interactive builds apps faster using Cosmic.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"89f06f40-e6cd-11e8-93f0-a94cde6f34a7-KF2_Logo.5b251745.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/89f06f40-e6cd-11e8-93f0-a94cde6f34a7-KF2_Logo.5b251745.png","imgix_url":"https://imgix.cosmicjs.com/89f06f40-e6cd-11e8-93f0-a94cde6f34a7-KF2_Logo.5b251745.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-11-12T22:47:43.586Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-11-13T14:43:47.754Z","metadata":{"company":"Killing Floor 2","industry_type":"Gaming","teaser":"Twisted Christmas, a seasonal campaign designed to promote Killing Floor 2, has an \"Advent Calendar\" that debuts a new piece of content everyday leading up to Killing Floor 2's release. The team at Tripwire Interactive was able to build their application and create their marketing landing page easily using Cosmic. Using the Scheduled Publishing feature, they created all of the content for the countdown and set each Object to publish at its respective date. Now they're free to work on other projects knowing their content is publishing on schedule. Read more about how Tripwire Interactive builds apps faster using Cosmic.\n","logo":{"url":"https://cdn.cosmicjs.com/89f06f40-e6cd-11e8-93f0-a94cde6f34a7-KF2_Logo.5b251745.png","imgix_url":"https://imgix.cosmicjs.com/89f06f40-e6cd-11e8-93f0-a94cde6f34a7-KF2_Logo.5b251745.png"}}},{"_id":"5d4c24d22f744c56f69a1ee8","slug":"content-management-system-for-modern-stack-websites","title":"Content Management System for Modern Stack Websites ","content":"<p>The Cosmic JS Content Management System provides flexibility for teams managing content for modern stack websites, quickly and out-of-the-box. Your team is free to use their favorite modern tools to power content for websites, mobile apps, static websites and more. Create structured content models to reuse across all your websites and applications. API tools and resources are available to help you start building with the latest static site generators, workflows and integrations.</p><h3><br>What is Headless CMS Software?</h3><p>Headless CMS Software works by providing non-technical editors with a Dashboard UI to model, create and publish content while providing developers with API tools and resources to integrate content with any website or app. By decoupling content from code, teams create a central content repository that can power all of their content-powered applications.&nbsp;</p>","metafields":[{"value":"Content Management System for Modern Stack Websites ","key":"solution_name","title":"Solution Name","type":"text","children":null},{"value":"abe9e700-9dc2-11e9-a5b4-e5df9f8049d3-tripwire.png","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/abe9e700-9dc2-11e9-a5b4-e5df9f8049d3-tripwire.png","imgix_url":"https://imgix.cosmicjs.com/abe9e700-9dc2-11e9-a5b4-e5df9f8049d3-tripwire.png"},{"object_type":"case-studies","value":"5b4753096d4f364510bf1290,5bd206599dca8d10e941b69b,5a73423ee520776813591ee2","key":"case_studies","title":"Case Studies","type":"objects","children":null,"objects":[{"_id":"5b4753096d4f364510bf1290","slug":"hypometer-technologies-fantasy-insider-and-stats-insider","title":"Hypometer Technologies: Fantasy Insider and Stats Insider","content":"<p><a href=\"http://www.thehypometer.com\" rel=\"noopener noreferrer\" target=\"_blank\">Hypometer Technologies</a> is revolutionizing the Australian sporting experience by making predictive analytics accessible to the masses. Their next generation sports media platforms are the form guide for every big game, and the go-to sites for trusted predictive analytics.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>Historically the team managed content via WordPress, but as they scaled their content WordPress started to bottleneck them. They pivoted to working with the WordPress API, which resulted in slow load times as WordPress would call all assets and return unnecessary data in the API call.&nbsp;</p><p>Recently the tech team was searching for a solution to manage dynamic content for their blogs, <a href=\"https://www.fantasyinsider.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">Fantasy Insider</a> and <a href=\"https://www.statsinsider.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">Stats Insider</a>. They wanted to remain decoupled from their application&#39;s codebase when managing content, so they started researching headless CMS systems. They chose Cosmic due to the simplicity of API integration and the content editing tools that would empower their marketers and writers.&nbsp;</p><p>In addition, Cosmic allowed the Hypometer team to write scripts to migrate existing WordPress post content over to Cosmic for editing and publishing.&nbsp;</p><p><br></p><h3>Fantasy Insider</h3><p><strong>Built On:</strong> Python | Angular | Cosmic</p><p><a href=\"https://www.fantasyinsider.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">Fantasy Insider</a> is the market leader for daily fantasy sports information in Australia, with over half of the active market visiting the site for content or predictive tools each week.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/3403b360-8c20-11e8-897c-ffeb4b6a74c8-cruncher_tool_heromockup.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><h3><br></h3><h3><br></h3><h3>Stats Insider</h3><p><strong>Built On:</strong> Python | Angular | Cosmic</p><p>Launched in early 2018, <a href=\"https://www.statsinsider.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">Stats Insider</a> is Australia&#39;s first advanced sports analytics and predictive data platform for sports fans, punters and fantasy sports players.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/47f104e0-8c20-11e8-99fd-2526f825b178-si_fb_coverphoto_ornge_nrl-soccer.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>Stats Insider will be providing information and predictions for US sports from August. Stay up to date with them on <a href=\"http://twitter.com/statsinsider\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>. &nbsp;<a href=\"http://twitter.com/statsinsider\"></a></p><p><br></p><blockquote><p>&quot;The headless CMS we chose had to tick a lot of boxes. At the end of the day, though, it needed to be easy for our external writers to use. We recorded a quick screencast video internally showing how to set up a piece of content, sent that out to our team, and I haven&rsquo;t had a question from any of our writers since. We&rsquo;ve just started to use Cosmic for other things like an activity status bar on Stats Insider which frees up more time for our developers and makes our workflow more flexible.&rdquo;</p><p><cite>&mdash; Katie Prowd, Co-Founder of Fantasy Insider</cite></p></blockquote>","metafields":[{"value":"Hypometer Technologies","key":"company","title":"Company","type":"text","children":null},{"value":"Fantasy Sports","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Hypometer Technologies is revolutionizing the Australian sporting experience by making predictive analytics accessible to the masses. Their next generation sports media platforms are the form guide for every big game, and the go-to sites for trusted predictive analytics.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png","imgix_url":"https://imgix.cosmicjs.com/1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-12T13:09:29.236Z","created_by":"5716b504e9c686d006000073","created":"2018-07-12T13:09:29.236Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-07-20T13:31:54.633Z"},{"_id":"5bd206599dca8d10e941b69b","slug":"derive-systems-runs-on-cosmic-js","title":"Derive Systems runs on Cosmic","content":"<p dir=\"ltr\"><a href=\"https://derivesystems.com\" rel=\"noopener noreferrer\" target=\"_blank\">Derive Systems</a>  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. </p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/3d484f50-d881-11e8-a05d-ade53a62d98b-Derive Systems.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">The team at Derive Systems was in search of a headless CMS that would give their developers flexibility out-of-the-box while enabling their content managers to manage content in a familiar and modern CMS Dashboard. They chose Cosmic due to its easy content modeling tools for their Blog, Press, About and Team Sections. Derive now runs a Next.js, React and Express framework that utilizes the Cosmic GraphQL API to deliver its content.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/ea968040-d882-11e8-8793-13fe540ddec9-Derive Systems GIF.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&ldquo;Leveraging the Cosmic GraphQL API allows for easy updates to our news and blog, while keeping payloads small and fast. Integration with Cosmic could not be easier thanks to their great support. We look forward to developing more features on the platform.&rdquo;</p><br><p><cite>&mdash; Dustin Brink, Front End Developer at Derive Systems&nbsp;</cite></p></blockquote>","metafields":[{"value":"Derive Systems","key":"company","title":"Company","type":"text","children":null},{"value":"Automotive","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Derive Systems  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","imgix_url":"https://imgix.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-25T18:07:21.426Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-11-15T14:51:19.007Z"},{"_id":"5a73423ee520776813591ee2","slug":"rocket-radio-builds-a-podcast-streaming-website","title":"Rocket Radio Builds a Podcast-Streaming Website","content":"<p dir=\"ltr\"><a href=\"http://www.rocketradio.com\" rel=\"noopener noreferrer\" target=\"_blank\">Rocket Radio</a> is a San Francisco Bay Area Music Network that creates podcasts featuring music and interviews with established and rising stars in the music industry. With shows covering all music genres, they needed a new website that allowed for numerous content editors and developers representing a blended team. See how Rocket Radio &nbsp;built their new podcast website using <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a>, <a href=\"https://cosmicjs.com/knowledge-base/react-cms\" rel=\"noopener noreferrer\" target=\"_blank\">React.js</a>, Redux and Cosmic.</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://cosmic-s3.imgix.net/15880780-270b-11e8-9dc5-e74ed0ce0965-29177246_412275625864297_3165994124966057316_n.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Rocket Radio tech team built out a single page application with Node, React and Redux using <a href=\"https://cosmicjs.com/apps\" rel=\"noopener noreferrer\" target=\"_blank\">Example Apps</a> from the <a href=\"https://cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a>. The team was able to leverage the Cosmic API to build out core components from Authentication to a news gallery to podcast listening features.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/67c166a0-27d7-11e8-97d1-3747ad2387c0-rocketradio_casestudy.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;From Docs to Example Apps and Service, it was all there. Cosmic provided a huge boost in cutting development time all while helping our team meet its goals. I would certainly recommend Cosmic to anyone seeking to build out a website using some of the latest technology while looking to stay ahead of the game.&quot;</p><p><cite>&mdash; Gus A., Senior Software Engineer&nbsp;</cite></p></blockquote><p><br></p><div class=\"fr-embedly \" data-original-embed=\"<a href='https://twitter.com/RocketRadio_/status/1035254459251580928' class='embedly-card'></a>\"><a href=\"https://twitter.com/RocketRadio_/status/1035254459251580928\" class=\"embedly-card\"></a></div>","metafields":[{"value":"Rocket Radio","key":"company","title":"Company","type":"text","children":null},{"value":"Music and Entertainment","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Rocket Radio is a San Francisco Bay Area Music Network that creates podcasts featuring music and interviews with established and rising stars in the music industry. With shows covering all music genres, they needed a new website that allowed for numerous content editors and developers representing a blended team. See how Rocket Radio  built their new podcast website using Node.js React.js, Redux and Cosmic.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"acbb5cf0-076d-11e8-a43c-e17c6c324439-IMG_0380.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/acbb5cf0-076d-11e8-a43c-e17c6c324439-IMG_0380.jpg","imgix_url":"https://imgix.cosmicjs.com/acbb5cf0-076d-11e8-a43c-e17c6c324439-IMG_0380.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-02-01T16:37:18.070Z","created_by":"5716b504e9c686d006000073","created":"2018-02-01T16:37:18.070Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-08-30T20:32:56.765Z"}]},{"repeater_fields":"\"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\"\"","value":"gatsby-blog","key":"app_slugs","title":"App Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"gatsby-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"jamstack-fitness-website","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"cross-platform-blog","type":"text","required":false}]}]},{"repeater_fields":"\"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\"\"","value":"wordpress-importer","key":"extension_slugs","title":"Extension Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"wordpress-importer","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"algolia-search","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"imgix-editor","type":"text","required":false}]}]},{"key":"testimonial","title":"Testimonial","type":"html-textarea","children":null,"value":"<p>&quot;Cosmic JS allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team has been enjoying the ease of use with the new system.&quot;</p>"},{"value":"Owen Liversidge, Lead Developer at Tripwire Interactive","key":"testimonial_credit","title":"Testimonial Credit","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created":"2019-08-08T13:34:10.745Z","created_at":"2019-07-08T15:04:56.206Z","modified_at":"2019-08-08T13:36:13.491Z","status":"published","locale":null,"published_at":"2019-08-08T13:36:13.492Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"order":22,"metadata":{"solution_name":"Content Management System for Modern Stack Websites ","image":{"url":"https://cdn.cosmicjs.com/abe9e700-9dc2-11e9-a5b4-e5df9f8049d3-tripwire.png","imgix_url":"https://imgix.cosmicjs.com/abe9e700-9dc2-11e9-a5b4-e5df9f8049d3-tripwire.png"},"case_studies":[{"_id":"5b4753096d4f364510bf1290","slug":"hypometer-technologies-fantasy-insider-and-stats-insider","title":"Hypometer Technologies: Fantasy Insider and Stats Insider","content":"<p><a href=\"http://www.thehypometer.com\" rel=\"noopener noreferrer\" target=\"_blank\">Hypometer Technologies</a> is revolutionizing the Australian sporting experience by making predictive analytics accessible to the masses. Their next generation sports media platforms are the form guide for every big game, and the go-to sites for trusted predictive analytics.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>Historically the team managed content via WordPress, but as they scaled their content WordPress started to bottleneck them. They pivoted to working with the WordPress API, which resulted in slow load times as WordPress would call all assets and return unnecessary data in the API call.&nbsp;</p><p>Recently the tech team was searching for a solution to manage dynamic content for their blogs, <a href=\"https://www.fantasyinsider.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">Fantasy Insider</a> and <a href=\"https://www.statsinsider.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">Stats Insider</a>. They wanted to remain decoupled from their application&#39;s codebase when managing content, so they started researching headless CMS systems. They chose Cosmic due to the simplicity of API integration and the content editing tools that would empower their marketers and writers.&nbsp;</p><p>In addition, Cosmic allowed the Hypometer team to write scripts to migrate existing WordPress post content over to Cosmic for editing and publishing.&nbsp;</p><p><br></p><h3>Fantasy Insider</h3><p><strong>Built On:</strong> Python | Angular | Cosmic</p><p><a href=\"https://www.fantasyinsider.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">Fantasy Insider</a> is the market leader for daily fantasy sports information in Australia, with over half of the active market visiting the site for content or predictive tools each week.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/3403b360-8c20-11e8-897c-ffeb4b6a74c8-cruncher_tool_heromockup.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><h3><br></h3><h3><br></h3><h3>Stats Insider</h3><p><strong>Built On:</strong> Python | Angular | Cosmic</p><p>Launched in early 2018, <a href=\"https://www.statsinsider.com.au\" rel=\"noopener noreferrer\" target=\"_blank\">Stats Insider</a> is Australia&#39;s first advanced sports analytics and predictive data platform for sports fans, punters and fantasy sports players.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/47f104e0-8c20-11e8-99fd-2526f825b178-si_fb_coverphoto_ornge_nrl-soccer.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>Stats Insider will be providing information and predictions for US sports from August. Stay up to date with them on <a href=\"http://twitter.com/statsinsider\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>. &nbsp;<a href=\"http://twitter.com/statsinsider\"></a></p><p><br></p><blockquote><p>&quot;The headless CMS we chose had to tick a lot of boxes. At the end of the day, though, it needed to be easy for our external writers to use. We recorded a quick screencast video internally showing how to set up a piece of content, sent that out to our team, and I haven&rsquo;t had a question from any of our writers since. We&rsquo;ve just started to use Cosmic for other things like an activity status bar on Stats Insider which frees up more time for our developers and makes our workflow more flexible.&rdquo;</p><p><cite>&mdash; Katie Prowd, Co-Founder of Fantasy Insider</cite></p></blockquote>","metafields":[{"value":"Hypometer Technologies","key":"company","title":"Company","type":"text","children":null},{"value":"Fantasy Sports","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Hypometer Technologies is revolutionizing the Australian sporting experience by making predictive analytics accessible to the masses. Their next generation sports media platforms are the form guide for every big game, and the go-to sites for trusted predictive analytics.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png","imgix_url":"https://imgix.cosmicjs.com/1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-12T13:09:29.236Z","created_by":"5716b504e9c686d006000073","created":"2018-07-12T13:09:29.236Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-07-20T13:31:54.633Z","metadata":{"company":"Hypometer Technologies","industry_type":"Fantasy Sports","teaser":"Hypometer Technologies is revolutionizing the Australian sporting experience by making predictive analytics accessible to the masses. Their next generation sports media platforms are the form guide for every big game, and the go-to sites for trusted predictive analytics.\n","logo":{"url":"https://cdn.cosmicjs.com/1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png","imgix_url":"https://imgix.cosmicjs.com/1818c5e0-8b63-11e8-8b12-1d164d145eab-15122993_1073313959433910_7212266943208762093_o.png"}}},{"_id":"5bd206599dca8d10e941b69b","slug":"derive-systems-runs-on-cosmic-js","title":"Derive Systems runs on Cosmic","content":"<p dir=\"ltr\"><a href=\"https://derivesystems.com\" rel=\"noopener noreferrer\" target=\"_blank\">Derive Systems</a>  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. </p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/3d484f50-d881-11e8-a05d-ade53a62d98b-Derive Systems.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">The team at Derive Systems was in search of a headless CMS that would give their developers flexibility out-of-the-box while enabling their content managers to manage content in a familiar and modern CMS Dashboard. They chose Cosmic due to its easy content modeling tools for their Blog, Press, About and Team Sections. Derive now runs a Next.js, React and Express framework that utilizes the Cosmic GraphQL API to deliver its content.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/ea968040-d882-11e8-8793-13fe540ddec9-Derive Systems GIF.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&ldquo;Leveraging the Cosmic GraphQL API allows for easy updates to our news and blog, while keeping payloads small and fast. Integration with Cosmic could not be easier thanks to their great support. We look forward to developing more features on the platform.&rdquo;</p><br><p><cite>&mdash; Dustin Brink, Front End Developer at Derive Systems&nbsp;</cite></p></blockquote>","metafields":[{"value":"Derive Systems","key":"company","title":"Company","type":"text","children":null},{"value":"Automotive","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Derive Systems  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","imgix_url":"https://imgix.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-25T18:07:21.426Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-11-15T14:51:19.007Z","metadata":{"company":"Derive Systems","industry_type":"Automotive","teaser":"Derive Systems  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. \n","logo":{"url":"https://cdn.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","imgix_url":"https://imgix.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg"}}},{"_id":"5a73423ee520776813591ee2","slug":"rocket-radio-builds-a-podcast-streaming-website","title":"Rocket Radio Builds a Podcast-Streaming Website","content":"<p dir=\"ltr\"><a href=\"http://www.rocketradio.com\" rel=\"noopener noreferrer\" target=\"_blank\">Rocket Radio</a> is a San Francisco Bay Area Music Network that creates podcasts featuring music and interviews with established and rising stars in the music industry. With shows covering all music genres, they needed a new website that allowed for numerous content editors and developers representing a blended team. See how Rocket Radio &nbsp;built their new podcast website using <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a>, <a href=\"https://cosmicjs.com/knowledge-base/react-cms\" rel=\"noopener noreferrer\" target=\"_blank\">React.js</a>, Redux and Cosmic.</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://cosmic-s3.imgix.net/15880780-270b-11e8-9dc5-e74ed0ce0965-29177246_412275625864297_3165994124966057316_n.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Rocket Radio tech team built out a single page application with Node, React and Redux using <a href=\"https://cosmicjs.com/apps\" rel=\"noopener noreferrer\" target=\"_blank\">Example Apps</a> from the <a href=\"https://cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a>. The team was able to leverage the Cosmic API to build out core components from Authentication to a news gallery to podcast listening features.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/67c166a0-27d7-11e8-97d1-3747ad2387c0-rocketradio_casestudy.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;From Docs to Example Apps and Service, it was all there. Cosmic provided a huge boost in cutting development time all while helping our team meet its goals. I would certainly recommend Cosmic to anyone seeking to build out a website using some of the latest technology while looking to stay ahead of the game.&quot;</p><p><cite>&mdash; Gus A., Senior Software Engineer&nbsp;</cite></p></blockquote><p><br></p><div class=\"fr-embedly \" data-original-embed=\"<a href='https://twitter.com/RocketRadio_/status/1035254459251580928' class='embedly-card'></a>\"><a href=\"https://twitter.com/RocketRadio_/status/1035254459251580928\" class=\"embedly-card\"></a></div>","metafields":[{"value":"Rocket Radio","key":"company","title":"Company","type":"text","children":null},{"value":"Music and Entertainment","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Rocket Radio is a San Francisco Bay Area Music Network that creates podcasts featuring music and interviews with established and rising stars in the music industry. With shows covering all music genres, they needed a new website that allowed for numerous content editors and developers representing a blended team. See how Rocket Radio  built their new podcast website using Node.js React.js, Redux and Cosmic.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"acbb5cf0-076d-11e8-a43c-e17c6c324439-IMG_0380.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/acbb5cf0-076d-11e8-a43c-e17c6c324439-IMG_0380.jpg","imgix_url":"https://imgix.cosmicjs.com/acbb5cf0-076d-11e8-a43c-e17c6c324439-IMG_0380.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-02-01T16:37:18.070Z","created_by":"5716b504e9c686d006000073","created":"2018-02-01T16:37:18.070Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-08-30T20:32:56.765Z","metadata":{"company":"Rocket Radio","industry_type":"Music and Entertainment","teaser":"Rocket Radio is a San Francisco Bay Area Music Network that creates podcasts featuring music and interviews with established and rising stars in the music industry. With shows covering all music genres, they needed a new website that allowed for numerous content editors and developers representing a blended team. See how Rocket Radio  built their new podcast website using Node.js React.js, Redux and Cosmic.\n","logo":{"url":"https://cdn.cosmicjs.com/acbb5cf0-076d-11e8-a43c-e17c6c324439-IMG_0380.jpg","imgix_url":"https://imgix.cosmicjs.com/acbb5cf0-076d-11e8-a43c-e17c6c324439-IMG_0380.jpg"}}}],"app_slugs":[{"slug":"gatsby-blog"},{"slug":"jamstack-fitness-website"},{"slug":"cross-platform-blog"}],"extension_slugs":[{"slug":"wordpress-importer"},{"slug":"algolia-search"},{"slug":"imgix-editor"}],"testimonial":"<p>&quot;Cosmic JS allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team has been enjoying the ease of use with the new system.&quot;</p>","testimonial_credit":"Owen Liversidge, Lead Developer at Tripwire Interactive"}},{"_id":"5ff34da19c8c990007c6f1c1","order":22,"slug":"introducing-merge-requests","title":"Introducing Merge Requests","content":"<p><img src=\"https://cdn.cosmicjs.com/5a67d0e0-54e1-11eb-8ef3-2b509a9da61d-merge-request.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>Traditionally, CMS systems have long relied on a draft / published model for content updates within a single database. And for many use cases this is fine. But what we&rsquo;ve noticed with our users, is that they want to create multiple environments to stage updates for review, preview the changes, then push the changes to production.</p><p>The problem with this is that there wasn&#39;t an easy way to merge content changes between environments in review stages (such as Development, Staging, Production). This is especially true when you want to make bulk edits to lots of content.</p><p>It&#39;s for this reason, we&#39;re excited to announce a huge leap forward for content management...</p><h3><br><strong>Introducing&nbsp;</strong><em><strong>Merge Requests</strong></em></h3><p><strong>What are <em>Merge Requests</em>?</strong><br><em>Merge Requests</em> is a new feature that enables Git-like workflows between your Cosmic Bucket environments. With Merge Requests, you are now able to merge content between Bucket environments with bulk edits, preview, and approval workflows. Here&#39;s how it works...<br><br></p><p><strong>Edit Content -&nbsp;</strong>A content editor creates or edits content in a source Bucket.</p><p><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/eada1510-51ea-11eb-ba68-91d1fc5c8777-add-content.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><p><br></p><p><strong>Create Merge Request</strong><strong>&nbsp;-&nbsp;</strong>The content editor then creates a merge request from the source Bucket into a target Bucket. Diffs are displayed in a list for review.</p><p><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/de4dc920-51f1-11eb-9dee-df51ce912356-add-merge-request.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><p><br></p><p><strong>Request Approvals -&nbsp;</strong>Team admins may be invited to review and approve the updates.</p><p><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/02ce92c0-51f2-11eb-9dee-df51ce912356-add-reviewer.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><p><br></p><p><strong>Approve and Merge Changes &nbsp;-&nbsp;</strong>The team admin can then use preview links to preview changes on the user-facing application or website. Once all approvals are submitted, the admin merges the request into the target Bucket.</p><p><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/efec6220-5211-11eb-8ee7-1df9cfd96d21-approve-merge.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><p><br></p><p><strong>Revert Changes -&nbsp;</strong>If there is a need to revert, a backup will automatically be made prior to the merge, and you will be able to restore to this backup instantly, and at anytime in the future. (Automatic backups will need to be enabled\r\non the Production Bucket)</p><p><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video autoplay=\"\" class=\"fr-draggable fr-fvc fr-dvi card-shadow video-popout lazy-load\" data-video=\"https://cdn.cosmicjs.com/49e25230-5212-11eb-aa1f-55f7cf15d947-revert.mp4\" loop=\"\" muted=\"\" playsinline=\"\">Your browser does not support HTML5 video.</video></span></p><p><br></p><p><br><strong>When is it available?</strong><br>Today.<br><br><strong>How much does it cost?</strong><br>It&#39;s free on every Cosmic account.</p><h3><br></h3><h3><strong>Next Steps</strong></h3><p>There&#39;s a few ways to get started and learn more:</p><ol><li><strong>Install the Starter -</strong> Install the <a href=\"https://www.cosmicjs.com/apps/next-merge\" rel=\"noopener noreferrer\" target=\"_blank\">Next Merge starter</a> which includes merge request preview capabilities.</li><li><strong>Preview API -</strong>\r\n<a href=\"https://docs.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">View the docs</a> to get more information on how to implement the merge request preview content for your applications. Currently available via the REST API and <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">NPM module</a>.</li><li><strong>Dashboard -</strong>\r\n<a href=\"https://app.cosmicjs.com/login\" rel=\"noopener noreferrer\" target=\"_blank\">Log into your Cosmic</a> dashboard and click the merge request icon on any Bucket.</li></ol><h3><br><strong>Conclusion</strong></h3><p>Merge Requests enables your team to move beyond the rigid draft / publish content process into a more fluid, collaborative, and comprehensive workflow.</p><p>We hope you enjoy using Merge Requests to optimize your content management workflows. This feature is still a work in progress (currently in beta), and we would greatly appreciate any feedback or bug reports. If you have any questions, please feel free to <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">reach out on Slack</a>, let us know what you think <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">on Twitter</a>, and join the conversation around this feature <a href=\"https://www.producthunt.com/posts/cosmic-merge-requests\" rel=\"noopener noreferrer\" target=\"_blank\">on Product Hunt</a>.<br><br>Cheers,<br>Cosmic Team</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"fQFhwO6GLe","value":"5ffa1d1e0046b0000799cb7b","required":true,"object_type":"authors","object":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"OATLowHTHQ","value":"<p>Introducing Merge Requests, a huge leap forward for content management that brings the power of Git to your content workflows.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"U6LqoaKFcx","value":"5a67d0e0-54e1-11eb-8ef3-2b509a9da61d-merge-request.jpg","url":"https://cdn.cosmicjs.com/5a67d0e0-54e1-11eb-8ef3-2b509a9da61d-merge-request.jpg","imgix_url":"https://imgix.cosmicjs.com/5a67d0e0-54e1-11eb-8ef3-2b509a9da61d-merge-request.jpg"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"NSgSdkrZOd","value":"Merge Requests enables your team to move beyond the rigid draft/publish content process into a more fluid, collaborative, and comprehensive workflow."},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"kK7uJrvUSs","value":"2021-01-12"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2021-01-04T17:17:20.944Z","created_by":"5357ef811693be2118000001","modified_at":"2022-10-06T13:44:43.282Z","created":"2021-01-04T17:17:20.944Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/5a67d0e0-54e1-11eb-8ef3-2b509a9da61d-merge-request.jpg","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2022-10-06T13:44:43.282Z","metadata":{"author":{"_id":"5ffa1d1e0046b0000799cb7b","slug":"cosmic","title":"Cosmic","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"ZogvxZg6OL","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D0qLJ4RPBe","value":"10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2021-01-09T21:16:14.533Z","created_by":"5357ef811693be2118000001","modified_at":"2021-01-09T21:18:26.147Z","created":"2021-01-09T21:16:14.533Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/e55ef990-52bf-11eb-986d-4d7ff5faa3ab-logo.svg","published_at":"2021-01-09T21:18:26.147Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg","imgix_url":"https://imgix.cosmicjs.com/10b814f0-52c0-11eb-986d-4d7ff5faa3ab-logo.jpg"}}},"teaser":"<p>Introducing Merge Requests, a huge leap forward for content management that brings the power of Git to your content workflows.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/5a67d0e0-54e1-11eb-8ef3-2b509a9da61d-merge-request.jpg","imgix_url":"https://imgix.cosmicjs.com/5a67d0e0-54e1-11eb-8ef3-2b509a9da61d-merge-request.jpg"},"seo_meta_description":"Merge Requests enables your team to move beyond the rigid draft/publish content process into a more fluid, collaborative, and comprehensive workflow.","published_date":"2021-01-12"}},{"_id":"595f9e469fe97aca73000d7f","order":22,"slug":"ionic-cms","title":"Ionic CMS","content":"<p>Cosmic JS makes it easy to manage content for your Ionic applications. Install the <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Official Cosmic JS JavaScript Client</a> to add dynamic content to your app. Get a feel for Ionic by taking a spin through <a href=\"https://cosmicjs.com/apps?languages=Ionic\" rel=\"noopener noreferrer\" target=\"_blank\">our Ionic apps</a> and check out the tutorials below.</p><h3>Ionic CMS Articles</h3><p><a href=\"https://cosmicjs.com/blog/how-to-build-a-mobile-product-catalog-app-using-angular-js-ionic-and-cosmic-js\" rel=\"noopener noreferrer\" target=\"_blank\">How to Build a Mobile Product Catalog App using Angular JS, Ionic and Cosmic JS</a></p><h3>Ionic CMS Resources</h3><p><a href=\"https://cosmicjs.com/docs/\">Cosmic JS Docs</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\"></a><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official JavaScript Client</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3>Examples</h3><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><code style=' font-size: inherit; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: 0px 0px; text-align: left;'>npm i cosmicjs</code></pre><p>Then in your JavaScript file, get your content:</p><div class=\"fr-embedly  \" data-original-embed=\"<a href='https://runkit.com/tonyspiro/5ad9109c320cd6001286359c' class='embedly-card'></a>\"><a href=\"https://runkit.com/tonyspiro/5ad9109c320cd6001286359c\" class=\"embedly-card\"></a></div>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"0ECZ8BgrgT","value":"e9a56ce0-6322-11e7-8774-41dfff8ae5dc-bYMCvtHD.jpg","url":"https://cdn.cosmicjs.com/e9a56ce0-6322-11e7-8774-41dfff8ae5dc-bYMCvtHD.jpg","imgix_url":"https://imgix.cosmicjs.com/e9a56ce0-6322-11e7-8774-41dfff8ae5dc-bYMCvtHD.jpg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"HSMNZPVrPg","value":"e6b99790-6322-11e7-8774-41dfff8ae5dc-bYMCvtHD.jpg","url":"https://cdn.cosmicjs.com/e6b99790-6322-11e7-8774-41dfff8ae5dc-bYMCvtHD.jpg","imgix_url":"https://imgix.cosmicjs.com/e6b99790-6322-11e7-8774-41dfff8ae5dc-bYMCvtHD.jpg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"z8ZMNiuRVz","value":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for Ionic websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"yqS45awsIh","value":"Ionic"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"0nc7tHopal","value":"Cosmic is the best CMS for Ionic websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"jTkrzwOJFL","value":"e391cab0-6322-11e7-8774-41dfff8ae5dc-bYMCvtHD.jpg","url":"https://cdn.cosmicjs.com/e391cab0-6322-11e7-8774-41dfff8ae5dc-bYMCvtHD.jpg","imgix_url":"https://imgix.cosmicjs.com/e391cab0-6322-11e7-8774-41dfff8ae5dc-bYMCvtHD.jpg"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"ia4krTu3iF","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"5hbEGEzr9A","value":"Best Headless CMS for Ionic"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"frgtgqfrpylludl8pnsi","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-22T23:07:51.159Z","created_by":"5357ef811693be2118000001","created":"2017-07-07T14:44:22.632Z","status":"published","modified_at":"2020-06-27T19:18:52.084Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-27T19:18:52.084Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/e9a56ce0-6322-11e7-8774-41dfff8ae5dc-bYMCvtHD.jpg","imgix_url":"https://imgix.cosmicjs.com/e9a56ce0-6322-11e7-8774-41dfff8ae5dc-bYMCvtHD.jpg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/e6b99790-6322-11e7-8774-41dfff8ae5dc-bYMCvtHD.jpg","imgix_url":"https://imgix.cosmicjs.com/e6b99790-6322-11e7-8774-41dfff8ae5dc-bYMCvtHD.jpg"},"blurb":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for Ionic websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Ionic","seo_description":"Cosmic is the best CMS for Ionic websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/e391cab0-6322-11e7-8774-41dfff8ae5dc-bYMCvtHD.jpg","imgix_url":"https://imgix.cosmicjs.com/e391cab0-6322-11e7-8774-41dfff8ae5dc-bYMCvtHD.jpg"},"code_example":"","seo_title":"Best Headless CMS for Ionic","videos":[]}},{"_id":"5edf9614ce98fe0007c45abb","order":22,"slug":"introducing-advanced-queries","title":"Introducing Advanced Queries","content":"<p>We are excited to announce the release of <a href=\"https://docs.cosmicjs.com/api-reference/queries\" rel=\"noopener noreferrer\" target=\"_blank\">Advanced Queries (Beta)</a> now available for all accounts. This is huge for teams that would like to use Cosmic beyond basic content management, enabling laser-focused logic to deliver content.<br><br></p><p><strong>How it works</strong><br>Advanced queries give you powerful NoSQL database-like functionality for data fetching. Using the Cosmic REST API endpoint and available clients (including the Cosmic GraphQL API) you can customize your NoSQL-style query (in JSON format) to customize selectors and query logic. See below examples and <a href=\"https://docs.cosmicjs.com/api-reference/queries\" rel=\"noopener noreferrer\" target=\"_blank\">the docs</a> for more info.</p><p><br></p><p><img src=\"https://cdn.cosmicjs.com/6d8f74e0-aa5d-11ea-b7ee-f54844952438-advanced-queries-keys.png\" style=\"width: 350px;\" class=\"fr-fic fr-dib fr-fil\"></p><p><br></p><p><img src=\"https://cdn.cosmicjs.com/71ea91a0-aa5d-11ea-b7ee-f54844952438-advanced-queries-selectors.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><h3><br><img src=\"https://cdn.cosmicjs.com/547c6a90-aad4-11ea-acab-c986a56b1c02-logic.png\" style=\"width: 450px;\" class=\"fr-fic fr-dib fr-fil\"></h3><p><br></p><h3><strong>Examples</strong></h3><p>To keep things concise, use the following <code>bucket</code> variable for the following examples.</p><pre class=\"  language-javascript\"><code class=\"  language-javascript\"><span class=\"token keyword\">const</span> bucket <span class=\"token operator\">=</span> Cosmic<span class=\"token punctuation\">.</span><span class=\"token function\">bucket</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">  slug<span class=\"token punctuation\">:</span> <span class=\"token string\">&#39;bucket-slug&#39;</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-javascript\">  read_key<span class=\"token punctuation\">:</span> <span class=\"token string\">&quot;your-read-key-found-in-bucket-settings&quot;</span></code>\r\n<code class=\"  language-javascript\"><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre><p><br></p><p><strong>Match Objects with exact title</strong></p><pre class=\"  language-javascript\"><code class=\"  language-javascript\">bucket<span class=\"token punctuation\">.</span><span class=\"token function\">getObjects</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">  type<span class=\"token punctuation\">:</span> <span class=\"token string\">&#39;posts&#39;</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-javascript\">  props<span class=\"token punctuation\">:</span> <span class=\"token string\">&#39;slug,title,content&#39;</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-javascript\">  query<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">    </code><code class=\"  language-javascript\"><span class=\"token string\">&quot;title&quot;</span><span class=\"token punctuation\">:</span> <span class=\"token string\">&quot;Post 1&quot;</span></code>\r\n<code class=\"  language-javascript\">  <span class=\"token punctuation\">}</span></code>\r\n<code class=\"  language-javascript\"><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre><p><br></p><p><strong>Match Objects</strong><strong>&nbsp;greater than or equal to metadata value</strong></p><pre class=\"  language-javascript\"><code class=\"  language-javascript\">bucket<span class=\"token punctuation\">.</span><span class=\"token function\">getObjects</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">  type<span class=\"token punctuation\">:</span> <span class=\"token string\">&#39;posts&#39;</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-javascript\">  props<span class=\"token punctuation\">:</span> <span class=\"token string\">&#39;slug,title,content&#39;</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-javascript\">  query<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">    <span class=\"token string\">&quot;metadata.price&quot;</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">      <span class=\"token string\">&quot;$gte&quot;</span><span class=\"token punctuation\">:</span> <span class=\"token number\">9.99</span></code>\r\n<code class=\"  language-javascript\">    </code><code class=\"  language-javascript\"><span class=\"token punctuation\">}</span></code>\r\n<code class=\"  language-javascript\">  <span class=\"token punctuation\">}</span></code>\r\n<code class=\"  language-javascript\"><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre><p><br><strong>Match Objects with</strong><strong>&nbsp;nested JSON metadata value (JSON Metafield)</strong></p><pre class=\"  language-javascript\"><code class=\"  language-javascript\">bucket<span class=\"token punctuation\">.</span><span class=\"token function\">getObjects</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">  type<span class=\"token punctuation\">:</span> <span class=\"token string\">&#39;posts&#39;</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-javascript\">  props<span class=\"token punctuation\">:</span> <span class=\"token string\">&#39;slug,title,content&#39;</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-javascript\">  query<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">    <span class=\"token string\">&quot;metadata.json_data&quot;</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">      <span class=\"token string\">&quot;is_awesome&quot;</span><span class=\"token punctuation\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-javascript\">      <span class=\"token string\">&quot;other_data&quot;</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">        <span class=\"token string\">&quot;nested&quot;</span><span class=\"token punctuation\">:</span> <span class=\"token string\">&quot;yep&quot;</span></code>\r\n<code class=\"  language-javascript\">      <span class=\"token punctuation\">}</span></code>\r\n<code class=\"  language-javascript\">    <span class=\"token punctuation\">}</span></code>\r\n<code class=\"  language-javascript\">  <span class=\"token punctuation\">}</span></code>\r\n<code class=\"  language-javascript\"><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre><p><br></p><p><strong>Match Objects with</strong><strong>&nbsp;any metadata values</strong></p><pre class=\"  language-javascript\"><code class=\"  language-javascript\">bucket<span class=\"token punctuation\">.</span><span class=\"token function\">getObjects</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">  type<span class=\"token punctuation\">:</span> <span class=\"token string\">&#39;posts&#39;</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-javascript\">  props<span class=\"token punctuation\">:</span> <span class=\"token string\">&#39;slug,title,content&#39;</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-javascript\">  query<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">    <span class=\"token string\">&quot;$or&quot;</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span></code>\r\n<code class=\"  language-javascript\">      <span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">         <span class=\"token string\">&quot;metadata.grade&quot;</span><span class=\"token punctuation\">:</span> <span class=\"token string\">&quot;A&quot;</span></code>\r\n<code class=\"  language-javascript\">      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-javascript\">      <span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">        </code><code class=\"  language-javascript\"><span class=\"token string\">&quot;metadata.grade&quot;</span><span class=\"token punctuation\">:</span> <span class=\"token string\">&quot;B&quot;</span></code>\r\n<code class=\"  language-javascript\">      <span class=\"token punctuation\">}</span></code>\r\n<code class=\"  language-javascript\">    <span class=\"token punctuation\">]</span></code>\r\n<code class=\"  language-javascript\">  <span class=\"token punctuation\">}</span></code>\r\n<code class=\"  language-javascript\"><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre><p><br></p><p><strong>Match Objects with string in content using a regular expression. Case insensitive with $options.</strong></p><pre class=\"  language-javascript\"><code class=\"  language-javascript\">bucket<span class=\"token punctuation\">.</span><span class=\"token function\">getObjects</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">  type<span class=\"token punctuation\">:</span> <span class=\"token string\">&#39;posts&#39;</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-javascript\">  props<span class=\"token punctuation\">:</span> <span class=\"token string\">&#39;slug,title,content&#39;</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-javascript\">  query<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">    <span class=\"token string\">&quot;content&quot;</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">      <span class=\"token string\">&quot;$regex&quot;</span><span class=\"token punctuation\">:</span> <span class=\"token string\">&quot;jamstack&quot;</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-javascript\">      <span class=\"token string\">&quot;$options&quot;</span><span class=\"token punctuation\">:</span> <span class=\"token string\">&quot;i&quot;</span></code>\r\n<code class=\"  language-javascript\">    <span class=\"token punctuation\">}</span></code>\r\n<code class=\"  language-javascript\">  <span class=\"token punctuation\">}</span></code>\r\n<code class=\"  language-javascript\"><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre><p><br></p><p><strong>Match Objects with&nbsp;any Multiple Object Metafield values</strong></p><pre class=\"  language-javascript\"><code class=\"  language-javascript\">bucket<span class=\"token punctuation\">.</span><span class=\"token function\">getObjects</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">  type<span class=\"token punctuation\">:</span> <span class=\"token string\">&#39;posts&#39;</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-javascript\">  props<span class=\"token punctuation\">:</span> <span class=\"token string\">&#39;slug,title,content&#39;</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-javascript\">  query<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">    <span class=\"token string\">&quot;metadata.categories&quot;</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">      <span class=\"token string\">&quot;$in&quot;</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">&quot;category_id-1&quot;</span><span class=\"token punctuation\">,</span><span class=\"token string\">&quot;category_id-2&quot;</span><span class=\"token punctuation\">]</span></code>\r\n<code class=\"  language-javascript\">    <span class=\"token punctuation\">}</span></code>\r\n<code class=\"  language-javascript\">  <span class=\"token punctuation\">}</span></code>\r\n<code class=\"  language-javascript\"><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre><p><br></p><p><strong>Match Objects that&nbsp;don&#39;t have any Multiple Object Metafield values</strong></p><pre class=\"  language-javascript\"><code class=\"  language-javascript\">bucket<span class=\"token punctuation\">.</span><span class=\"token function\">getObjects</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">  type<span class=\"token punctuation\">:</span> <span class=\"token string\">&#39;posts&#39;</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-javascript\">  props<span class=\"token punctuation\">:</span> <span class=\"token string\">&#39;slug,title,content&#39;</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-javascript\">  query<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">    <span class=\"token string\">&quot;metadata.categories&quot;</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">      <span class=\"token string\">&quot;$nin&quot;</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">&quot;category_id-1&quot;</span><span class=\"token punctuation\">,</span><span class=\"token string\">&quot;category_id-2&quot;</span><span class=\"token punctuation\">]</span></code>\r\n<code class=\"  language-javascript\">    <span class=\"token punctuation\">}</span></code>\r\n<code class=\"  language-javascript\">  <span class=\"token punctuation\">}</span></code>\r\n<code class=\"  language-javascript\"><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre><p><a href=\"https://docs.cosmicjs.com/api-reference/queries\" rel=\"noopener noreferrer\" target=\"_blank\">See the docs for the full list of query selectors and logic operators</a>.</p><p><br><strong>Advanced Queries in the GraphQL API</strong><br>You may need to set the variable outside of the main query area. Add something like this to the Query Variables area:</p><pre class=\"  language-javascript\"><code class=\"  language-javascript\"><span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">  <span class=\"token string\">&quot;query&quot;</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">    <span class=\"token string\">&quot;title&quot;</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span></code>\r\n<code class=\"  language-javascript\">      <span class=\"token string\">&quot;$regex&quot;</span><span class=\"token punctuation\">:</span> <span class=\"token string\">&quot;another&quot;</span><span class=\"token punctuation\">,</span></code>\r\n<code class=\"  language-javascript\">      <span class=\"token string\">&quot;$options&quot;</span><span class=\"token punctuation\">:</span> <span class=\"token string\">&quot;i&quot;</span></code>\r\n<code class=\"  language-javascript\">    <span class=\"token punctuation\">}</span></code>\r\n<code class=\"  language-javascript\">  <span class=\"token punctuation\">}</span></code>\r\n<code class=\"  language-javascript\"><span class=\"token punctuation\">}</span></code></pre><p><br></p><p><strong><a href=\"https://cosmic-graphql-playground.netlify.app/?endpoint=https%3A%2F%2Fgraphql.cosmicjs.com%2Fv2&query=%20query%20%28%24query%3A%20JSON%29%20%7B%0A%20%20%20%20getObjects%28%0A%20%20%20%20%20%20%20%20bucket_slug%3A%20%22simple-react-blog%22%2C%0A%20%20%20%20%20%20%20%20input%3A%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20type%3A%22posts%22%0A%20%20%20%20%20%20%20%20%20%20query%3A%20%24query%0A%20%20%20%20%20%20%20%20%20%20props%3A%20%22title%2Cslug%2Cmetadata.author%22%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%29%20%7B%0A%20%20%20%20objects%20%7B%0A%20%20%20%20%20%20%20%20title%0A%20%20%20%20%20%20%09slug%0A%20%20%20%20%20%20%20%20metadata%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D\" rel=\"noopener noreferrer\" target=\"_blank\">View full screen &nbsp;</a></strong>\r\n<iframe src=\"https://cosmic-graphql-playground.netlify.app/?endpoint=https%3A%2F%2Fgraphql.cosmicjs.com%2Fv2&query=%20query%20%28%24query%3A%20JSON%29%20%7B%0A%20%20%20%20getObjects%28%0A%20%20%20%20%20%20%20%20bucket_slug%3A%20%22simple-react-blog%22%2C%0A%20%20%20%20%20%20%20%20input%3A%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20type%3A%22posts%22%0A%20%20%20%20%20%20%20%20%20%20query%3A%20%24query%0A%20%20%20%20%20%20%20%20%20%20props%3A%20%22title%2Cslug%2Cmetadata.author%22%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%29%20%7B%0A%20%20%20%20objects%20%7B%0A%20%20%20%20%20%20%20%20title%0A%20%20%20%20%20%20%09slug%0A%20%20%20%20%20%20%20%20metadata%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D\" frameborder=\"0\" style=\"width: 100%; height: 470px;\"></iframe></p><p><br>We hope you enjoy using Advanced Queries to give you more power and flexibility to get your Cosmic content. This is a Beta release and we would like your feedback as we improve this feature, so please let us know what you think! Reach out to us <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">on Twitter</a> and <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">join the conversation in Slack</a>.</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"31rW3UWlhX","value":"2020-06-10"},{"children":null,"type":"object","title":"Author","key":"author","id":"80zPHTilRS","value":"5768b253163172890e00002c","object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"vtvRTkYjSW","value":"e7553760-aa62-11ea-b7ee-f54844952438-advanced-queries-2.jpg","url":"https://cdn.cosmicjs.com/e7553760-aa62-11ea-b7ee-f54844952438-advanced-queries-2.jpg","imgix_url":"https://imgix.cosmicjs.com/e7553760-aa62-11ea-b7ee-f54844952438-advanced-queries-2.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2020-06-09T14:00:52.980Z","created_by":"5357ef811693be2118000001","modified_at":"2022-08-01T15:02:08.673Z","created":"2020-06-09T14:00:52.980Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2022-08-01T15:02:08.673Z","metadata":{"published_date":"2020-06-10","author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":"https://cdn.cosmicjs.com/e7553760-aa62-11ea-b7ee-f54844952438-advanced-queries-2.jpg","imgix_url":"https://imgix.cosmicjs.com/e7553760-aa62-11ea-b7ee-f54844952438-advanced-queries-2.jpg"}}},{"_id":"5ade0e3508e4a82d641d2b14","order":23,"slug":"vendor-surf-builds-a-search-engine-for-mortgage-vendors","title":"Vendor Surf Builds a Search Engine for Mortgage Vendors","content":"<p><a href=\"https://www.vendorsurf.com\" rel=\"noopener noreferrer\" target=\"_blank\">Vendor Surf</a> exists out of the problem of not having a technology-driven online vendor marketplace for mortgage industry vendors to get discovered. &nbsp;All that had existed previously were static and unintelligent directories, the equivalent of Yellow Pages. &nbsp;Vendor Surf is an incredibly robust search engine using more than 3,000 unique search filters for sourcing.</p><p>Vendor Surf&#39;s mission is to revolutionize the sourcing of vendor partners, and they are currently doing so through their content-rich digital marketplace where vendors can list themselves and clients can search for vendors based on common industry parameters.&nbsp;</p><p>Vendor Surf needed a content management platform that enables its marketers and editors to manage dynamic content while giving their developers the keys to build their Angular application using the best tools for the job, unrestricted by programming language or framework. Vendor Surf and its agency chose Cosmic.</p><p><br></p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/ae707110-4715-11e8-9053-51a4b4c9097d-22141293_1988595651387014_6785594129037856780_n.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&ldquo;It was absolutely imperative to embed a flexible and dependable content management system into our solution. We are adding and updating content all day, every day, and have to be able to respond to our client and marketplace needs in an instant. &nbsp;We are power-users of Cosmic, highly dependent upon it for a substantial portion of our content.&rdquo;</p><p><cite>&mdash; Scott Roller, Vendor Surf Co-Founder &nbsp;</cite></p></blockquote><p><br></p><p><br></p><div class=\"fr-embedly    \" data-original-embed=\"<a href='https://twitter.com/VendorSurf/status/985953079446196226' class='embedly-card'></a>\"><a href=\"https://twitter.com/VendorSurf/status/985953079446196226\" class=\"embedly-card\"></a></div>","metafields":[{"value":"Vendor Surf","key":"company","title":"Company","type":"text","children":null},{"value":"Vendor Search Engine","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Vendor Surf exists out of the problem of not having a technology-driven online vendor marketplace for mortgage industry vendors to get discovered.  All that had existed previously were static and unintelligent directories, the equivalent of Yellow Pages.  Vendor Surf is an incredibly robust search engine using more than 3,000 unique search filters for sourcing.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"799ba950-4715-11e8-ac62-c16ace591024-STnky8wl_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/799ba950-4715-11e8-ac62-c16ace591024-STnky8wl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/799ba950-4715-11e8-ac62-c16ace591024-STnky8wl_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-04-23T16:47:49.405Z","created_by":"5716b504e9c686d006000073","created":"2018-04-23T16:47:49.405Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-07-11T13:00:52.571Z","metadata":{"company":"Vendor Surf","industry_type":"Vendor Search Engine","teaser":"Vendor Surf exists out of the problem of not having a technology-driven online vendor marketplace for mortgage industry vendors to get discovered.  All that had existed previously were static and unintelligent directories, the equivalent of Yellow Pages.  Vendor Surf is an incredibly robust search engine using more than 3,000 unique search filters for sourcing.\n","logo":{"url":"https://cdn.cosmicjs.com/799ba950-4715-11e8-ac62-c16ace591024-STnky8wl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/799ba950-4715-11e8-ac62-c16ace591024-STnky8wl_400x400.jpg"}}},{"_id":"5ece7202f614730008d3bbba","order":23,"slug":"nextjs-static-blog-increased-media-upload-size-limit-and-more","title":"Next.js Static Blog, Increased Media Upload Size Limit, and more","content":"<p>We have a few exciting updates to help you power content for your modern websites and apps using Cosmic.</p><p><br><strong>1. Next.js Static Blog</strong><br>Check out the newest app in our Apps Marketplace to help you learn how to use Cosmic with the Next.js framework. The new <a href=\"https://www.cosmicjs.com/apps/nextjs-static-blog\" rel=\"noopener noreferrer\" target=\"_blank\">Next.js Static Blog</a> includes draft content preview functionality, automatic image optimization, and has a killer lighthouse score <span class=\"fr-emoticon fr-deletable\">😍</span>&nbsp;</p><p style=\"text-align: center;\"><img src=\"https://cdn.cosmicjs.com/7b7547b0-a021-11ea-a164-7313a52d2f9d-lighthouse.png\" style=\"width: 100%; max-width: 400px;\" class=\"fr-fic fr-dib\"></p><p><br><strong>2. Increased Media Upload in the API</strong><br>We&#39;ve now increased the size limit on file uploads to the REST API limit to 900MB. Check out the details in <a href=\"https://docs.cosmicjs.com/rest-api/media.html#add-media\" rel=\"noopener noreferrer\" target=\"_blank\">the documentation</a>. So enjoy uploading all those home movies via our API <span class=\"fr-emoticon fr-deletable\">😀</span>&nbsp;</p><p><br><strong>3. Workspaces navigation update</strong><br>You will now notice that you have easier access to your <a href=\"https://www.cosmicjs.com/workspaces\">workspaces</a>. Located in the top right nav dropdown after logging in, you can see your listed workspaces and get to those projects faster (<a href=\"https://twitter.com/tonyspiro/status/1265443048328175616\" rel=\"noopener noreferrer\" target=\"_blank\">no Slack issues here</a>). This makes switching between workspaces much easier. <a href=\"https://www.cosmicjs.com/enterprise?subject=Workspace%20Request#sales-form\">Contact sales</a> to get your white label company-branded workspace set up.<br><br><strong>4. Localization Improvements</strong><br>We&#39;ve improved the process of creating localized content. On the Edit Object page for localized content, you will now see a button that says &quot;Add New Version&quot; if a new localized version is available. You will also see a list of created localized versions for easy access.</p><p><br></p><p>We hope you enjoy these updates. If you have any questions, <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">join our Slack community</a> and <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a>.</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"3afsuEjBD5","value":"2020-05-28"},{"children":null,"type":"object","title":"Author","key":"author","id":"JNDLcoclpM","value":"5768b253163172890e00002c","object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"TZNq89MKbR","value":"dfea02a0-a029-11ea-a164-7313a52d2f9d-nextjs-cms.png","url":"https://cdn.cosmicjs.com/dfea02a0-a029-11ea-a164-7313a52d2f9d-nextjs-cms.png","imgix_url":"https://imgix.cosmicjs.com/dfea02a0-a029-11ea-a164-7313a52d2f9d-nextjs-cms.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2020-05-27T13:58:26.175Z","created_by":"5357ef811693be2118000001","modified_at":"2020-08-10T13:59:43.225Z","created":"2020-05-27T13:58:26.175Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2020-05-28T15:34:41.136Z","metadata":{"published_date":"2020-05-28","author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":"https://cdn.cosmicjs.com/dfea02a0-a029-11ea-a164-7313a52d2f9d-nextjs-cms.png","imgix_url":"https://imgix.cosmicjs.com/dfea02a0-a029-11ea-a164-7313a52d2f9d-nextjs-cms.png"}}},{"_id":"5d4c2560f052fe58796fd232","slug":"content-management-system-for-ecommerce-websites","title":"Content Management System for Ecommerce Websites","content":"<p>The Cosmic JS Content Management System provides flexible content modeling that allows e-commerce teams to manage product inventories, seasonal sales campaigns and product-centric landing pages all from the Cosmic JS Dashboard. Developers, marketers, data analysts and product managers can all collaborate in Cosmic JS using unique user roles and permissions. Teams can revise published products, schedule new product launches and integrate with any cart or payment gateway.<br><br></p><h3>What is Headless CMS Software?</h3><p>Headless CMS Software works by providing non-technical editors with a Dashboard UI to model, create and publish content while providing developers with API tools and resources to integrate content with any website or app. By decoupling content from code, teams create a central content repository that can power all of their content-powered applications.&nbsp;</p>","metafields":[{"value":"Content Management System for Ecommerce Websites","key":"solution_name","title":"Solution Name","type":"text","children":null},{"value":"d03eb2f0-9f54-11e9-ac09-4be8a5631b5e-6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen-Shot-2018-04-17-at-6.48.12-AM.png","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/d03eb2f0-9f54-11e9-ac09-4be8a5631b5e-6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen-Shot-2018-04-17-at-6.48.12-AM.png","imgix_url":"https://imgix.cosmicjs.com/d03eb2f0-9f54-11e9-ac09-4be8a5631b5e-6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen-Shot-2018-04-17-at-6.48.12-AM.png"},{"object_type":"case-studies","value":"59f49a7cee2adb545c0005bc,59663607a6a3f55962000e40,5aa7cd8c3078516dd48d6ad2","key":"case_studies","title":"Case Studies","type":"objects","children":null,"objects":[{"_id":"59f49a7cee2adb545c0005bc","slug":"life-is-good-shares-gratitude","title":"Life is Good Shares Gratitude","content":"<p>The <a href=\"https://www.lifeisgood.com/?utm_source=cosmicjs.com&utm_medium=referral&utm_campaign=gratitudewall\" rel=\"noopener noreferrer\" target=\"_blank\">Life is Good</a> community shares one simple, unifying mission: to spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add &quot;sticky notes&quot; with their name and what they are grateful for to the gratitude board.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7dbdb6b0-c59a-11e7-a9fd-155dbd0b0a76-Optimism_Tree_default.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Gratitude Wall is adapted from the Cosmic <a href=\"https://cosmicjs.com/apps/sticky-notes\" rel=\"noopener noreferrer\" target=\"_blank\">Sticky Notes App</a>, built on <a href=\"https://cosmicjs.com/knowledge-base/react-cms\" rel=\"noopener noreferrer\" target=\"_blank\">React</a>, Redux and <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a>. The Wall is currently running on Heroku and is i-framed into WordPress on its landing page. The Life is Good team also built a simple moderation application so that their team can easily approve or delete User Generated Content as it flows in. They also built client-side moderation during content entry, which checks against a banned list of words and blocks submission.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen Shot 2017-11-16 at 1.59.39 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a robust scaffolding to accept, store, and moderate User Generated Content and display it in a custom web app in real time. With Cosmic, we were able to develop an MVP in a matter of hours and focus our resources on UX and design versus content management. The Cosmic Support Team was extremely helpful throughout the process. We&rsquo;re excited to leverage these tools again for future projects.&rdquo;</p><p><cite>&mdash; Chris Schwab, Front End Engineer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Life is Good","key":"company","title":"Company","type":"text","children":null},{"value":"Ecommerce | Apparel","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-28T14:55:56.103Z","created_by":"5716b504e9c686d006000073","created":"2017-10-28T14:55:56.103Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-07-25T21:53:35.289Z"},{"_id":"59663607a6a3f55962000e40","slug":"big-fish-launches-marketing-and-tutorial-content-for-games","title":"Big Fish Launches Marketing and Tutorial Content for Games","content":"<p>When <a href=\"http://www.bigfishgames.com\" rel=\"noopener noreferrer\" target=\"_blank\">Big Fish</a> launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch. Big Fish wanted their game studios to have the ability to curate and update content on each of their landing pages. Other CMS systems weren&rsquo;t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b671fa80-ba81-11e7-9419-d7ce2df8354d-Screen Shot 2017-10-26 at 2.12.42 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/bf97f050-ba82-11e7-b96e-3b4c8df8fb98-Screen Shot 2017-10-26 at 2.20.03 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><blockquote><p>&quot;We use Cosmic buckets for each of our mobile game landing pages. While our API and storage usage is low, the number of buckets we need is high, which makes the new Clusters Feature a perfect solution for our company use cases. It allows us to\r\nhave a single consolidated invoice, with an overall API and data-limit, but up to 35 buckets for our use.&quot;</p><p><cite>&mdash; Jessica Chappell, Web Developer&nbsp;</cite></p></blockquote><p>Read <a href=\"http://www.bigfishgames.com/blog\" rel=\"noopener noreferrer\" target=\"_blank\">more</a> about Big Fish and their games.</p>","metafields":[{"value":"Big Fish","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T14:45:27.402Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-11-08T23:15:38.911Z"},{"_id":"5aa7cd8c3078516dd48d6ad2","slug":"bookabus-builds-a-localized-transportation-website","title":"Bookabus Builds a Localized Transportation Website","content":"<p><a href=\"https://www.bookabus.eu\" rel=\"noopener noreferrer\" target=\"_blank\">Bookabus</a> is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it&rsquo;s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen Shot 2018-04-17 at 6.48.12 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Bookabus needed a new website to communicate their transport routes, terms and marketing materials. &nbsp;A big requirement was the ability to localize their content into different languages for the different areas they&#39;re servicing, including the UK, Netherlands, Germany, Spain, and Belgium. &nbsp;They chose to build their new transportation website with Cosmic because of the ease of use and powerful localization capabilities.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/be1ed900-4236-11e8-bd9f-93df74f6ae30-Screen Shot 2018-04-17 at 6.59.27 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate dynamic content into our website. The product is a great value for your money. This is especially true given that their customer service is top-notch.&quot;</p><p><cite>&mdash; Harrie Pieters, Web Developer&nbsp;</cite></p></blockquote>","metafields":[{"value":"Bookabus","key":"company","title":"Company","type":"text","children":null},{"value":"Transportation","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Bookabus is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it’s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","imgix_url":"https://imgix.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-13T13:09:32.089Z","created_by":"5716b504e9c686d006000073","created":"2018-03-13T13:09:32.089Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-04-19T21:23:26.384Z"}]},{"repeater_fields":"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\"","value":"ecommerce-app","key":"app_slugs","title":"App Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"ecommerce-app","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"gatsby-ecommerce-website","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"ecommerce-personalization","type":"text","required":false}]}]},{"repeater_fields":"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\"","value":"wordpress-importer","key":"extension_slugs","title":"Extension Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"wordpress-importer","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"product-manager","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"amazon-product-search","type":"text","required":false}]}]},{"key":"testimonial","title":"Testimonial","type":"html-textarea","children":null,"value":"<p>&quot;Cosmic JS allowed us to easily integrate dynamic content into our website. The product is a great value for your money. This is especially true given that their customer service is top-notch.&quot;</p>"},{"value":"Harrie Pieters, Web Developer at Bookabus","key":"testimonial_credit","title":"Testimonial Credit","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created":"2019-08-08T13:36:32.191Z","created_at":"2019-07-08T15:07:19.015Z","modified_at":"2019-08-08T13:37:14.175Z","status":"published","locale":null,"published_at":"2019-08-08T13:37:14.175Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"order":23,"metadata":{"solution_name":"Content Management System for Ecommerce Websites","image":{"url":"https://cdn.cosmicjs.com/d03eb2f0-9f54-11e9-ac09-4be8a5631b5e-6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen-Shot-2018-04-17-at-6.48.12-AM.png","imgix_url":"https://imgix.cosmicjs.com/d03eb2f0-9f54-11e9-ac09-4be8a5631b5e-6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen-Shot-2018-04-17-at-6.48.12-AM.png"},"case_studies":[{"_id":"59f49a7cee2adb545c0005bc","slug":"life-is-good-shares-gratitude","title":"Life is Good Shares Gratitude","content":"<p>The <a href=\"https://www.lifeisgood.com/?utm_source=cosmicjs.com&utm_medium=referral&utm_campaign=gratitudewall\" rel=\"noopener noreferrer\" target=\"_blank\">Life is Good</a> community shares one simple, unifying mission: to spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add &quot;sticky notes&quot; with their name and what they are grateful for to the gratitude board.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7dbdb6b0-c59a-11e7-a9fd-155dbd0b0a76-Optimism_Tree_default.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Gratitude Wall is adapted from the Cosmic <a href=\"https://cosmicjs.com/apps/sticky-notes\" rel=\"noopener noreferrer\" target=\"_blank\">Sticky Notes App</a>, built on <a href=\"https://cosmicjs.com/knowledge-base/react-cms\" rel=\"noopener noreferrer\" target=\"_blank\">React</a>, Redux and <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a>. The Wall is currently running on Heroku and is i-framed into WordPress on its landing page. The Life is Good team also built a simple moderation application so that their team can easily approve or delete User Generated Content as it flows in. They also built client-side moderation during content entry, which checks against a banned list of words and blocks submission.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen Shot 2017-11-16 at 1.59.39 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a robust scaffolding to accept, store, and moderate User Generated Content and display it in a custom web app in real time. With Cosmic, we were able to develop an MVP in a matter of hours and focus our resources on UX and design versus content management. The Cosmic Support Team was extremely helpful throughout the process. We&rsquo;re excited to leverage these tools again for future projects.&rdquo;</p><p><cite>&mdash; Chris Schwab, Front End Engineer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Life is Good","key":"company","title":"Company","type":"text","children":null},{"value":"Ecommerce | Apparel","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-28T14:55:56.103Z","created_by":"5716b504e9c686d006000073","created":"2017-10-28T14:55:56.103Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-07-25T21:53:35.289Z","metadata":{"company":"Life is Good","industry_type":"Ecommerce | Apparel","teaser":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","logo":{"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}}},{"_id":"59663607a6a3f55962000e40","slug":"big-fish-launches-marketing-and-tutorial-content-for-games","title":"Big Fish Launches Marketing and Tutorial Content for Games","content":"<p>When <a href=\"http://www.bigfishgames.com\" rel=\"noopener noreferrer\" target=\"_blank\">Big Fish</a> launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch. Big Fish wanted their game studios to have the ability to curate and update content on each of their landing pages. Other CMS systems weren&rsquo;t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b671fa80-ba81-11e7-9419-d7ce2df8354d-Screen Shot 2017-10-26 at 2.12.42 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/bf97f050-ba82-11e7-b96e-3b4c8df8fb98-Screen Shot 2017-10-26 at 2.20.03 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><blockquote><p>&quot;We use Cosmic buckets for each of our mobile game landing pages. While our API and storage usage is low, the number of buckets we need is high, which makes the new Clusters Feature a perfect solution for our company use cases. It allows us to\r\nhave a single consolidated invoice, with an overall API and data-limit, but up to 35 buckets for our use.&quot;</p><p><cite>&mdash; Jessica Chappell, Web Developer&nbsp;</cite></p></blockquote><p>Read <a href=\"http://www.bigfishgames.com/blog\" rel=\"noopener noreferrer\" target=\"_blank\">more</a> about Big Fish and their games.</p>","metafields":[{"value":"Big Fish","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T14:45:27.402Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-11-08T23:15:38.911Z","metadata":{"company":"Big Fish","industry_type":"Gaming","teaser":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","logo":{"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}}},{"_id":"5aa7cd8c3078516dd48d6ad2","slug":"bookabus-builds-a-localized-transportation-website","title":"Bookabus Builds a Localized Transportation Website","content":"<p><a href=\"https://www.bookabus.eu\" rel=\"noopener noreferrer\" target=\"_blank\">Bookabus</a> is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it&rsquo;s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/6845e0b0-4235-11e8-86fe-0b7f31f36651-Screen Shot 2018-04-17 at 6.48.12 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Bookabus needed a new website to communicate their transport routes, terms and marketing materials. &nbsp;A big requirement was the ability to localize their content into different languages for the different areas they&#39;re servicing, including the UK, Netherlands, Germany, Spain, and Belgium. &nbsp;They chose to build their new transportation website with Cosmic because of the ease of use and powerful localization capabilities.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/be1ed900-4236-11e8-bd9f-93df74f6ae30-Screen Shot 2018-04-17 at 6.59.27 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate dynamic content into our website. The product is a great value for your money. This is especially true given that their customer service is top-notch.&quot;</p><p><cite>&mdash; Harrie Pieters, Web Developer&nbsp;</cite></p></blockquote>","metafields":[{"value":"Bookabus","key":"company","title":"Company","type":"text","children":null},{"value":"Transportation","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Bookabus is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it’s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","imgix_url":"https://imgix.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-13T13:09:32.089Z","created_by":"5716b504e9c686d006000073","created":"2018-03-13T13:09:32.089Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-04-19T21:23:26.384Z","metadata":{"company":"Bookabus","industry_type":"Transportation","teaser":"Bookabus is an innovative start-up in the travel and mobility industry, serving as one of the largest coach hire and bus rental booking services in Europe. Whether it’s a day trip with 20 people or a large-scale event with 500 people, Bookabus, together with its partners, ensures a carefree and high-quality travel experience for groups and events. \n","logo":{"url":"https://cdn.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png","imgix_url":"https://imgix.cosmicjs.com/61777d70-26bf-11e8-808d-f7104bba2cfa-7bb0413cfa3f2b5a11182ebb782aa208.png"}}}],"app_slugs":[{"slug":"ecommerce-app"},{"slug":"gatsby-ecommerce-website"},{"slug":"ecommerce-personalization"}],"extension_slugs":[{"slug":"wordpress-importer"},{"slug":"product-manager"},{"slug":"amazon-product-search"}],"testimonial":"<p>&quot;Cosmic JS allowed us to easily integrate dynamic content into our website. The product is a great value for your money. This is especially true given that their customer service is top-notch.&quot;</p>","testimonial_credit":"Harrie Pieters, Web Developer at Bookabus"}},{"_id":"5e5449c239bf16000708589f","order":23,"slug":"ux-updates-sort-metafields-and-more","title":"UX Updates, Sort Metafields, and more","content":"<p>We&#39;re happy to let you know about some great user experience improvements. For this release, we focused on improving the Edit Object process, content editor experience, and also squeezed in a request for an improvement to scheduled publishing.</p><p><br><strong>1. Edit Object Improvements</strong><br>You will now notice that we simplified the edit Object module on the right side of the Dashboard. Along with a less-busy UI, the UX is also greatly improved. Clicking any of the save buttons will now save without a page refresh. This is a much better\r\nexperience, especially for Objects that have a lot of Metafields which require lots of page scrolling.</p><p><img src=\"https://cdn.cosmicjs.com/0ecf9a50-5753-11ea-a154-d7799b75e215-edit-object-module.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br><strong>2. Sort Metafields</strong><br>It&#39;s our goal to make it easier for developers and content creators to collaborate to build great products together. But, as happens sometimes in product development, we overestimated a content creator feature need. Such is the case for Metafield sorting.&nbsp;</p><p>So the ability to sort Metafields has been removed from the editor role (but still available for developers and admin). BUT, if you do need to allow editors to sort Metafields, this can be added to the user&#39;s role in <em>Your Bucket &gt; Settings &gt; Team</em>. Use the &quot;View as editor&quot; switch on each page in the\r\ndashboard to see what this experience is like for your content creators.</p><p><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video class=\"fr-draggable fr-fvc fr-dvi\" controls=\"\" src=\"https://cdn.cosmicjs.com/90e784b0-5755-11ea-a154-d7799b75e215-view-as.mp4\" style=\"width: 100%;\">Your browser does not support HTML5 video.</video></span></p><p><br><strong>3. New Revision added when Object is automatically published / unpublished</strong><br>With scheduled publishing / unpublishing, you can automate when your Objects are available or removed from the API. Now when your Object has been automatically published or unpublished, a new revision will be created to indicate the date of the automatic event. This is good for record-keeping.</p><p><br><strong>4. Give us feedback!</strong><br>We&#39;ve also added a quick input area to give us feedback. We would love to hear from you, so drop us a line! :)</p><p><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video class=\"fr-draggable fr-fvc fr-dvi\" controls=\"\" src=\"https://cdn.cosmicjs.com/fcf5b820-5755-11ea-a154-d7799b75e215-feedback.mp4\" style=\"width: 100%;\">Your browser does not support HTML5 video.</video></span></p><p>We hope you enjoy these new features and updates. Any questions or comments? Reach out to us <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">on Twitter</a> and join the conversation on <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">our Slack channel</a>.</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"A1CcytYQ51","value":"2020-02-25"},{"children":null,"type":"object","title":"Author","key":"author","id":"oZ4BKll2z7","value":"5768b253163172890e00002c","object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"etwYntj7GT","value":"e8cdf700-c36b-11e9-a488-7925a97cd338--udZnjsCzsE.jpg","url":"https://cdn.cosmicjs.com/e8cdf700-c36b-11e9-a488-7925a97cd338--udZnjsCzsE.jpg","imgix_url":"https://imgix.cosmicjs.com/e8cdf700-c36b-11e9-a488-7925a97cd338--udZnjsCzsE.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2020-02-24T22:10:10.803Z","created_by":"5357ef811693be2118000001","modified_at":"2020-08-10T13:59:43.225Z","created":"2020-02-24T22:10:10.803Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2020-02-25T16:22:01.472Z","metadata":{"published_date":"2020-02-25","author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":"https://cdn.cosmicjs.com/e8cdf700-c36b-11e9-a488-7925a97cd338--udZnjsCzsE.jpg","imgix_url":"https://imgix.cosmicjs.com/e8cdf700-c36b-11e9-a488-7925a97cd338--udZnjsCzsE.jpg"}}},{"_id":"5fb5af5c9877b80008051536","order":23,"slug":"how-to-choose-a-modern-cms-future-proof-your-content-2021","title":"How to Choose the Best CMS: Guide + PDF [2021]","content":"<p>When traditional CMS platforms like WordPress first revolutionized web development in the early 2000&#39;s, companies - and their web presences - looked a bit different.</p><p>Businesses were almost exclusively located in offices, most enterprise-level software and servers were located on-premise, and relied on monolithic architectures.</p><p>The times, they have a-changed.</p><p>Today many of those solutions are not just a bit outdated, they&#39;re fundamentally broken.</p><p>A new way of creating digital experiences is required for consumers to interact with your brand, and at the heart of this new approach is a fundamentally new kind of content management system.<br><br><strong>What&#39;s in this article?</strong><br>We&#39;ll discuss what CMS is, a little history, and how CMS lives in the heart of the modern MarTech (Marketing Technology) ecosystem.</p><p>Then we&#39;ll look at how and why content management systems are evolving due to the greater demands placed on them today, and in the coming years.</p><p>Finally, we&#39;ve created a list of considerations you should hold in mind when evaluating content management systems based on a modern stack&#39;s demands. We&#39;ve tried to cover all the bases - technology to marketing to administration.</p><p>There&#39;s an editable workbook included for you to use to compare CMS systems based on these considerations, and take notes.<br><br><strong>Quick Links</strong><br>i. <a href=\"#new-approach\">Why Is a New Approach to Customer Interaction Needed?</a><br>ii. <a href=\"#why-modern-cms\">Why Do Organizations Need Modern Content Management Systems?</a><br>iii. <a href=\"#what-is-modern-cms\">Exactly What is a Modern CMS</a><br>iv. <a href=\"#consider-new-cms\">Everything to Consider When Choosing a Modern CMS</a><br>v. <a class=\"fr-file\" href=\"https://cdn.cosmicjs.com/6b33f230-3977-11eb-9178-3f6d9415ab76-How-to-Choose-the-Best-CMS-For-the-Future-2021.pdf\" id=\"link1\" rel=\"noopener noreferrer\" target=\"_blank\">Editable Workbook for CMS Comparisons [PDF Downloadable]</a></p><p><img src=\"https://imgix.cosmicjs.com/deeb5c60-341b-11eb-9c4b-5ff458b1095b-modern-cms.png?w=100&auto=format\" data-image=\"https://imgix.cosmicjs.com/deeb5c60-341b-11eb-9c4b-5ff458b1095b-modern-cms.png?w=1200&auto=format\" style=\"width: 100%;\" alt=\"The modern internet experience requires more complex Content Management solutions than traditional CMS is equipped to handle. What are you to do? Use our list to help you choose the best CMS for your business.\" class=\"fr-fic fr-dib lazy-load\"></p><p style=\"text-align: center;\"><em>Today&#39;s diverse content channels hardly resemble the more singular content channels of past decades. As our Content Channels evolve, so must our Content Management Systems.</em></p><h2 id=\"new-approach\"><br>The Evolution of CMS</h2><p>Two decades ago, customers interacted with brands in-person, on landlines, or on their desktop sites, providing the same experience to everyone who interacted with a particular brand.</p><p>The iPhone was just a spark of an idea - a full 7 years away from its first iteration.</p><h3>Why is a New Approach to Content Management Evolving?</h3><p>Nowadays, however, things are a bit different. &nbsp;New channels have emerged that include not just desktop and mobile but also smart watches, smart speakers, digital kiosks and a host of other channels.</p><p>Developers have also made changes to how they build applications and many focus on using new-and-improved JavaScript frameworks and microservices architecture. Content is changing, and becoming much more customized to devices for user-experiences.</p><p>Yet organizations still require a content management system (CMS) to aid with content storage, editing and delivery to the web. The user-experience shift from the perspective of customers, developers, and content creators has meant that organizations\r\nneed to reassess what they look for in a CMS.</p><p><strong>To help you understand the new landscape from a high-level, we&rsquo;ve provided a detailed list of the factors that need to be considered when choosing a modern CMS at the end of this article.</strong> You can also read on to learn more about the CMS landscape, and why new CMS solutions are necessary in the first place.<br><br><a href=\"https://cdn.cosmicjs.com/6b33f230-3977-11eb-9178-3f6d9415ab76-How-to-Choose-the-Best-CMS-For-the-Future-2021.pdf\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://imgix.cosmicjs.com/5e36a5e0-3987-11eb-9178-3f6d9415ab76-Does-your-CMS-Make-or-Break-Your-MarTech-Stack-1.png?w=1200&auto=format\" id=\"cta1\" alt=\"choose a cms with our free PDF\" class=\"fr-fic fr-dii\"></a><br></p><h2 id=\"why-modern-cms\"><br>Why Do Organizations Need Modern Content Management Systems?</h2><p>The primary purpose of a CMS is to provide organizations with a way to store, edit, deliver and otherwise manage their content resources.</p><p>Traditional CMSs have been the solution to this problem for most businesses until relatively recently, and they&#39;ve worked quite well.</p><p>They&#39;re still quite effective for creating and managing blogs, but when it comes to modern businesses, whether mid-size or larger enterprises, a lot more might be required.</p><p>In 2021, some of the more advanced and cutting-edge CMS solutions will help businesses:</p><h3>Manage Content Across Multiple Channels</h3><p>The legacy CMS platform was created for one singular channel, a brand website. <strong>Today, brands must contend with multiple channels</strong> including mobile and smart devices. Content for these additional channels needs to be managed with the same ease that single channels were managed with in the past.</p><p>The new wave of CMS can help companies to create, manage, and deploy this content in specific and meaningful ways.</p><p>Instead of using the old-school approach of a legacy CMS - copy-and-pasting your desktop website with responsive formatting - a<strong>&nbsp;Modern CMS enables your team to create content that takes full advantage of whatever channel you&#39;re deploying to</strong>,\r\nwith minimally duplicated efforts during content creation.</p><p style=\"text-align: center;\"><span class=\"fr-img-caption fr-dib fr-draggable\" contenteditable=\"false\" draggable=\"false\"><span class=\"fr-img-wrap\" style=\"width: 594px;\"><img src=\"https://cdn.cosmicjs.com/a5433640-33fd-11eb-9c4b-5ff458b1095b-1606845005784.jpg\" style=\"width: 100%;\" alt=\"Future Content Management channels are going to look increasingly diverse\" class=\"fr-fil fr-dib\"><span class=\"fr-inner\" contenteditable=\"true\"></span></span></span></p><div style=\"text-align: center;\"><em>Future Content Management channels are going to look increasingly diverse</em></div><p><br></p><h3>Building a Modern Tech Stack</h3><p>Marketing and application development involve more than just creativity today. Art, science, and analytics combine as brands create multiple types of content that appeals to different personas. The modern CMS is the core component within today&rsquo;s\r\nMarTech stack.</p><p><strong>Content is what drives the customer experience</strong>, <strong>so it winds up at or near the center of most stacks.</strong> Consequently, the CMS needs to be able to integrate with the other key members of the stack including: analytics, CRM, DAM, email marketing automation, front-end frameworks, and more.</p><h3>Fostering Inter-and-Intra-Department Collaboration</h3><p>Finally, a CMS isn&rsquo;t just used by one department. Marketing, IT and others are crucial to creating the experiences which customers want.</p><p>As a result, the CMS acts as a means for these sometimes siloed departments to come together for one common purpose.</p><p>This is really well captured by a quote from one of our <a href=\"https://www.cosmicjs.com/customers/movespring\">Customer Case Studies, MoveSpring</a>:</p><blockquote><p>... [our development goals were]<strong>&nbsp;challenging for a developer not familiar with WordPress</strong>. We have other dynamic content we&#39;d like <strong>our [content and Sales team] to drive without relying on our development team</strong>... <strong>with Cosmic</strong>\r\n<strong>our developer was able to get our new blog up and running within days.</strong></p></blockquote><p>These benefits are central to what makes the new CMS philosophy so revolutionary.</p><p><strong>Development teams skillsets can become more universal</strong> - focusing on key languages instead of specific toolsets - and <strong>content teams can manage more dynamic content with less need for development help.</strong></p><p>Faster, better applications and content are the result.</p><h2 id=\"what-is-modern-cms\"><br>Exactly What is a Modern CMS?</h2><p>Most businesses are well aware of the benefits that a CMS can provide for them. But they will also wonder why sticking with a traditional or legacy CMS is no longer sufficient.</p><p><img src=\"https://cdn.cosmicjs.com/0efc87c0-33ff-11eb-9c4b-5ff458b1095b-1606845612691.jpg\" style=\"width: 100%;\" alt=\"Headless is one way you can prepare your CMS for the future\" class=\"fr-dib\"></p><p style=\"text-align: center;\"><em>Headless CMS is one way you can prepare your CMS for the future</em></p><p><strong>A modern CMS allows brands to do a lot more than just store content and distribute it to a specific channel.</strong></p><p>The new approach to CMS - based on a headless or decoupled back-end system - is a tangible response to the modern web and everything it has to offer. Here are some of the things that a modern CMS does:</p><h3>Responds to Changes in Customer Demands</h3><p><strong>Customers today don&rsquo;t interact with brands on one channel.</strong> Instead, they rely on multiple channels to gather information and interact with brands in several ways throughout the buyer&rsquo;s journey.</p><p>Customers also seek out personalization, and brands need to deliver, since 80% of customers are more likely to make a purchase <a href=\"https://us.epsilon.com/pressroom/new-epsilon-research-indicates-80-of-consumers-are-more-likely-to-make-a-purchase-when-brands-offer-personalized-experiences\" rel=\"noopener noreferrer\" target=\"_blank\">when a brand gives them a personalized experience.</a></p><p>A consistent, personalized experience across multiple channels<strong>&nbsp;</strong>provides what is known as omnichannel marketing.</p><p>This focus on omnichannel marketing and personalized experiences is all meant to improve the customer experience. And according to <a href=\"https://www.gartner.com/en/marketing/insights/customer-experience\" rel=\"noopener noreferrer\" target=\"_blank\">Gartner</a>,\r\n&ldquo;marketing leaders must develop effective customer experience strategies to optimize customer interactions and drive business outcomes.&rdquo;</p><h3>Meets the Requirements of the Modern Web</h3><p>Modern web applications are fast and responsive. This comes as a result of the shift towards progressive web applications and single page applications.</p><p>Meanwhile, brands have shifted from complex monolithic applications to microservices architectures, which are easier to build, maintain and scale. <strong>These changes have made many legacy applications slow, and sometimes unable to keep up\r\nwith the increasingly demanding needs of customers.</strong></p><p>In the coming decade, CMS will help teams circumvent these challenges. Advancements in decoupled architecture and headless content management, for example, allow teams to deploy content to independent front-end interfaces, creating faster and customized\r\nexperiences.</p><p>Your application will never be restricted by a single interface, and you can continue to re-use existing codebase.</p><h3>Embraces the Growth of SaaS and Remote Work</h3><p>As cloud computing has grown, so too has the shift towards software as a service subscription.</p><p><strong>No longer saddled by on-premise solutions, many companies have done away with expensive servers and maintenance costs and instead turned to the cloud.</strong></p><p>Many Modern CMS solutions are highly optimized for cloud-based computing solutions, reliant upon CDN and remote storage, but some solutions offer on-premise implementations as well.</p><p>This shift has also meant that it is now easier for organizations to embrace remote work since their employees can more easily access everything needed to do their jobs.</p><h3>Addresses the Growing Trends of APIs</h3><p>Rather than build custom solutions to serve non-core business functions, many organizations are turning to API-service adoption to offload their non-core business logic.</p><p>This has seen companies such as Stripe, Twilio and Algolia come to the forefront and connect to businesses through APIs to provide them with services for payments, communications and more.</p><p><strong>A modern CMS can help facilitate this trend by providing integrations with these API-driven functions.</strong></p><h2><a href=\"https://cdn.cosmicjs.com/6b33f230-3977-11eb-9178-3f6d9415ab76-How-to-Choose-the-Best-CMS-For-the-Future-2021.pdf\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://imgix.cosmicjs.com/5e36a5e0-3987-11eb-9178-3f6d9415ab76-Does-your-CMS-Make-or-Break-Your-MarTech-Stack-1.png?w=1200&auto=format\" class=\"fr-fic fr-dii\" id=\"cta2\" alt=\"downloadable workbook for choosing a cms\"></a><br></h2><h2 id=\"consider-new-cms\"><br>Modern CMS Considerations</h2><p>Given the host of CMS options available, the exact features your company needs can vary. However, we&rsquo;ve provided some important considerations which can help you zero in on the factors that are most relevant to your situation.</p><h2>Choosing a Content Management System</h2><ol><li>Is it Headless?</li><li>Does it support multichannel or omnichannel?</li><li>Does it simplify your content operations?</li><li>Does it support global content delivery?</li><li>Can your CMS scale with you?</li><li>Do you have in house development and content teams?</li><li>Are updates and maintenance handled out-the-box?</li><li>Is the CMS extendable?</li><li>Do you need eCommerce integration?</li><li>Does it offer support for a migration from your existing CMS?</li><li>Is your CMS self-hosted?</li><li>Does it support GraphQL?</li><li>Does it increase or decrease your team&rsquo;s Time to Completion?</li><li>Does it increase or decrease the development teams&rsquo; velocity?</li><li>Does it complicate or simplify your development team&#39;s process?</li><li>Can your developers work in parallel?</li><li>What is the quality of the API documentation?</li><li>Are you using Jamstack?</li><li>Does it offer personalization features (Customer segmentation, content personalization, user roles &amp; permissions etc.)</li><li>Does your organization need dynamic content?</li><li>Does your organization need localization?</li><li>Does your content team have the tools they need to create modern digital experiences?</li><li>How is the content editor experience?</li></ol><h3><strong>Questions Every Organization Should Ask When Choosing a New Content Management System</strong></h3><h3>1. Is it Headless?</h3><p>A headless or decoupled architecture is the basis of any modern CMS. While a traditional CMS tightly couples the backend storage and frontend delivery together, <a href=\"/headless-cms/\">a headless CMS instead separates them.</a></p><p>With the backend content storage separated from the frontend presentation layer, developers are free to connect any frontend channel they wish with the help of APIs. This future-proofs your content and makes it accessible on multiple devices, and provides\r\na host of other technological advantages, like extensive API-accessibility for your builds.</p><p>This API-first mentality is the foundation of the fast-growing Jamstack model for application development. Jamstack is a school of thought that re-defines the way developers think about the internet for a more modern approach, and at its core, is a headless\r\nCMS. In the future, more and more applications will be built with the JAMStack methodology.</p><h3>2. Does it support multichannel or omnichannel?</h3><p>One of the key aspects of the modern customer experience is that it is available across multiple channels. Desktops, mobile phones, tablets and a host of other smart devices offer a channel for brands to interact with their customers.</p><p>A modern CMS should facilitate content delivery to these multiple channels and also offer brands the ability to personalize that content to create not just a multichannel experience but an omnichannel one.</p><h3>3. Does it simplify your content operations?</h3><p>Content creation and delivery takes a process. The combination of people, processes and technology necessary to produce and deliver content is known as content operations.</p><p>Your CMS is an important piece of this and should simplify your content operations, not make it more difficult for you to juggle content production across multiple channels.</p><h3>4. Does it support global content delivery?</h3><p>When content requests are made from relatively the same geographic location where that content is hosted, then delivery happens quickly. With the help of a CDN, content can be displayed to users no matter where they are accessing your website.</p><p>A modern CMS that supports global content delivery can ensure that your content is always available, even during periods of peak traffic. This availability also makes it easier for you to gather data on your users and reduces the need for additional infrastructure.</p><h3>5. Can your CMS scale with you?</h3><p>Scalability is essential for any growing business. When choosing a CMS it should include the functionality that can not only meet your needs now but also have the capacity to continue meeting the needs of your business in the future.</p><p>As you add new products and services, require new features and extensions and more hosting space, your CMS should be able to meet your demand.</p><h3>6. Do you have in house development and content teams?</h3><p>One of the issues with traditional CMS platforms is that they can sometimes lead to bottlenecks when it comes to content delivery and workflows. Sometimes this can be solved when both your content and development teams are in house.</p><p>However, in today&rsquo;s modern work environment, these teams are sometimes independent or remote. A modern CMS can facilitate appropriate workflows which improve collaboration and allow your teams to create content quickly and at scale.</p><h3>7. Are updates and maintenance handled out-the-box?</h3><p>Just like any other piece of software, a CMS requires maintenance to fix bugs, handle security issues and ensure everything runs smoothly.</p><p>A modern CMS should be able to provide all of these things for you, especially if you&rsquo;re using a SaaS platform.</p><h3>8. Is the CMS extendable?</h3><p>The core function of your CMS is to manage your content. This includes creating, editing, previewing and publishing to multiple channels.</p><p>However, all of the functionality your business requires isn&rsquo;t always available out-the-box. A modern CMS can provide the extensibility and additional apps you need to produce that added functionality.</p><h3>9. Do you need eCommerce integration?</h3><p>If you want to sell products on your website then you will need to be able to add eCommerce functionality or integrate with an external eCommerce platform.</p><p>Whether you need to manage product inventories, seasonal sales campaigns or product-centric landing pages, your modern CMS should have the ability to do this so that you can provide your customers with a cohesive experience and not have to send them to\r\nanother website to complete their checkout.</p><h3>10. Does it offer support for a migration from your existing CMS?</h3><p>If you&rsquo;re currently using a traditional CMS or simply don&rsquo;t have the features you require in your current CMS then it could be time for a change.</p><p>However, migrating from your existing CMS can be a pain. One benefit of a modern CMS is that it can help you with the migration process from your legacy CMS without too much manual work from you.</p><h3>11. Is your CMS self-hosted?</h3><p>Do you need to run your CMS on your own server? Or is there an option for you to use the CMS provider to host the platform for you to ease maintenance and hosting costs.</p><h2>Most Relevant for CTOs and Development Teams</h2><h3>12. Does it support GraphQL?</h3><p>A headless CMS will use APIs, <a href=\"https://docs.cosmicjs.com/rest-api/\">usually REST</a>, to send content in the form of data to other applications or frontend interfaces.</p><p>However, a modern CMS should also offer <a href=\"https://docs.cosmicjs.com/graphql-api/\">support for GraphQL</a> since it provides added flexibility by giving you a more declarative way to source data, preventing you from over fetching or under fetching data, saving both time and resources.</p><p>Why GraphQL? If you&#39;re not already looped in, we&#39;ve done a thorough breakdown <a href=\"https://www.cosmicjs.com/blog/what-is-graphql\">the rise of GraphQL</a> and how it&#39;s going to become a big player in the world of Headless and Jamstack in the future.</p><h3>13. Does it increase or decrease your team&rsquo;s Time to Completion?</h3><p>Time to Completion (TTC) is the amount of time it takes for a task to be completed. When creating digital experiences with CMSs that lack specific features, marketers and developers can become frustrated with how long it takes to edit content.</p><p>A modern CMS should decrease TTC and make it easier for both teams to complete tasks.</p><h3>14. Does it increase or decrease the development teams&rsquo; velocity?</h3><p>In the digital landscape, developers need to be able to move fast and spend their time on tasks which drive business outcomes. When they become handicapped by technology and additional requests from other departments it can negatively impact their ability\r\nto move with speed.</p><p>A modern CMS can facilitate existing workflows and make it easier for developers to complete requests and connect to new channels.</p><h3>15. Is your development team small?</h3><p>The modern web experience requires not just content creators and marketers but also developers to make it work. However, legacy platforms can sometimes hamper smaller development teams and make it difficult for them to manage things for multiple channels.</p><p>For instance, when working with traditional CMS platforms, developers often have to analyze complex code to understand what&rsquo;s happening, worry about security and maintenance and still find the time to create experiences that customers will enjoy.</p><p>With a modern CMS, frontend developers can spend their time focused on improving the UI/UX as they deploy content to multiple channels, while backend developers or the CMS providers ensure maintenance, security and everything else in between is handled.</p><h3>16. Can your developers work in parallel (asynchronously?)</h3><p>One issue with some CMS platforms is that frontend developers and backend developers can&rsquo;t work on different things at the same time.</p><p>A modern CMS can facilitate developers working in parallel which saves them time and prevents workflow interruptions.</p><h3>17. What is the quality of the API documentation?</h3><p>Strong <a href=\"https://docs.cosmicjs.com/\">API documentation</a> can improve the developer experience tenfold and make it easier for developers to integrate quickly.</p><p>The better the API documentation the easier it will be for your developers to integrate your modern CMS with existing workflows and applications and get the most out of it.</p><p>Which of the following does your organization commonly use? (Node.js, Vue.js, Angular, MongoDB, Next.js, Express, Gatsby etc.) Is your CMS frontend agnostic?</p><p>There are several JavaScript frameworks, databases and development stacks that make up the modern web.</p><p>Each organization will have its own preference so you need to decide if the CMS you&rsquo;re using has what your organization requires. At the very least, a modern CMS will be frontend agnostic and be flexible enough for your team to get the most out\r\nof it.</p><h3>18. Are you using Jamstack?</h3><p><a href=\"https://jamstack.org/\">Jamstack</a> has grown to become a popular stack among developers because it provides them the ability to create blazing fast websites.</p><p>With JavaScript, APIs and Markdown, developers realize increased speed, scalability and security when building modern web applications. A CMS that supports jamstack can make the lives of your developers much easier.</p><h2>Most Relevant for CMOs and Content Marketing Teams</h2><h3>19. Does it offer personalization features (Customer segmentation, content personalization, user roles &amp; permissions etc.)</h3><p>Delivering content to multiple channels isn&rsquo;t necessarily enough for a modern CMS. Today&rsquo;s customers have become accustomed to content being tailored to their specific needs.</p><p>Consequently, a modern CMS should allow your brand to tailor content for different customer personas and create unique experiences for them. Content should be personalized based on behavior that personas exhibit when they visit a site repeatedly or from\r\na specific location. Also, for the content editors, roles and permissions can ensure that they only have to focus on the aspects of the CMS that are critical for them to do their jobs.</p><h3>20. Does your organization need dynamic content?</h3><p>In the past much of the content created on the web was static and simple. Now however, dynamic content reigns supreme and brands have had to adapt.</p><p>This dynamic content doesn&rsquo;t just remain the same throughout the customer journey but changes and adapts based on user preferences and customer behavior. When coupled with the need customers have for personalization, then it&rsquo;s important for\r\nbrands to have a modern CMS with the headless capabilities that facilitate creation and maintenance of dynamic content.</p><h3>21. Does your organization need localization?</h3><p>Is your brand serving a global, multilingual, or international audience? It takes multiple versions of content, many times translated into different languages to adequately serve a global audience.</p><p>A modern CMS should provide the flexibility for you to not only serve content to your audience in the language they desire, but also <a href=\"https://www.cosmicjs.com/headless-cms#localizationhttps://www.cosmicjs.com/articles/how-to-localize-content-with-cosmic-js-jdc0go0z\">make it easier on the content teams creating the content.</a></p><h3>22. Does your content team have the tools they need to create modern digital experiences?</h3><p>Managing content for multiple platforms means that content teams will require an extensive list of tooling. This includes the ability to add rich text and multimedia, previews and content scheduling.</p><p>Also, the tools to create landing pages and marketing funnels plus edit copy for multiple channels and create search engine optimized content.</p><h3>23. How is the content editor experience?</h3><p>If your content editors have a tough time editing content for the channels where you want to deploy your content then your users will have an even worse time viewing the content. A great content editor experience can lead to a great customer experience.</p><h3><br>Download the Editable Workbook to Help You Choose the Best CMS Solution</h3><p>Cutting straight to the chase - <a href=\"https://cdn.cosmicjs.com/6b33f230-3977-11eb-9178-3f6d9415ab76-How-to-Choose-the-Best-CMS-For-the-Future-2021.pdf\" id=\"link2\" rel=\"noopener noreferrer\" target=\"_blank\">here&#39;s the link to the editable workbook</a>.\r\nIt includes a brief snippet of information on each of these considerations to refresh you on the topics we covered.</p><p>How&#39;d we do? We&#39;d love your feedback on this article and the PDF. If you like it, or if you have any thoughts as to how we can make this downloadable more helpful for you and your team, <a href=\"/contact\">drop us a comment.</a></p><h3><br>Choosing the Right CMS for Your Business</h3><p>Having a modern CMS brings you one step closer to adequately delivering the quality experiences that consumers of today crave. With the right tools and technology in place, your development team, content creators and business leaders can feel much more\r\nconfident about navigating today&rsquo;s modern web and the changing customer landscape.</p><p><em>Cosmic is a <a href=\"https://www.cosmicjs.com/headless-cms\">headless CMS platform</a> that exceeds the expectations of a modern CMS. Leave your outdated technology stack behind and empower your content and development teams with everything they need for deploying dynamic content applications.</em></p><p><br></p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"Q24wM12AIn","value":"5f5fac071936450007d8a01c","required":true,"object_type":"authors","object":{"_id":"5f5fac071936450007d8a01c","slug":"kyle-meagher","title":"Kyle Meagher","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"hsMOJCxIAj","value":"kylemeags"},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D2rdKO4lEL","value":"e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2020-09-14T17:44:39.110Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-14T17:45:09.251Z","created":"2020-09-14T17:44:39.110Z","status":"published","published_at":"2020-09-14T17:44:39.110Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"TNz39ALLOJ","value":"<p>What should you be thinking about when hunting for a future-proof CMS? We&#39;ve listed every consideration your organization will need when it comes to choosing a Modern CMS.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"KTgKG7OQA9","value":"deeb5c60-341b-11eb-9c4b-5ff458b1095b-modern-cms.png","url":"https://cdn.cosmicjs.com/deeb5c60-341b-11eb-9c4b-5ff458b1095b-modern-cms.png","imgix_url":"https://imgix.cosmicjs.com/deeb5c60-341b-11eb-9c4b-5ff458b1095b-modern-cms.png"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"LsUBbw34gU","value":"Hunting for a future-proof CMS that fits your business needs? We've listed every consideration your organization will need to choose a CMS that's right for your needs."},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"HAK5LxX43j","value":"2020-12-01"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2020-11-18T23:33:48.431Z","created_by":"5f8088982aa32f00093977bb","modified_at":"2021-01-09T18:40:36.180Z","created":"2020-11-18T23:33:48.431Z","status":"published","thumbnail":"https://imgix.cosmicjs.com/deeb5c60-341b-11eb-9c4b-5ff458b1095b-modern-cms.png","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2021-01-09T18:40:36.180Z","metadata":{"author":{"_id":"5f5fac071936450007d8a01c","slug":"kyle-meagher","title":"Kyle Meagher","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"hsMOJCxIAj","value":"kylemeags"},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D2rdKO4lEL","value":"e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2020-09-14T17:44:39.110Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-14T17:45:09.251Z","created":"2020-09-14T17:44:39.110Z","status":"published","published_at":"2020-09-14T17:44:39.110Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","metadata":{"username":"kylemeags","profile_picture":{"url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}}},"teaser":"<p>What should you be thinking about when hunting for a future-proof CMS? We&#39;ve listed every consideration your organization will need when it comes to choosing a Modern CMS.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/deeb5c60-341b-11eb-9c4b-5ff458b1095b-modern-cms.png","imgix_url":"https://imgix.cosmicjs.com/deeb5c60-341b-11eb-9c4b-5ff458b1095b-modern-cms.png"},"seo_meta_description":"Hunting for a future-proof CMS that fits your business needs? We've listed every consideration your organization will need to choose a CMS that's right for your needs.","published_date":"2020-12-01"}},{"_id":"5980bfe4c27214be7f0001ac","order":23,"slug":"cloud-cms","title":"Cloud CMS","content":"<p>Cosmic JS makes it easy to manage content for your applications through its Cloud CMS. Install the <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Official Cosmic JS JavaScript Client</a> to integrate content into your app in minutes. &nbsp;Get a feel for Cosmic JS by taking a spin through <a href=\"https://cosmicjs.com/apps\" rel=\"noopener noreferrer\" target=\"_blank\">our apps</a> and check out the tutorials below.</p><h3>Cloud CMS &nbsp;Articles</h3><p><a href=\"https://cosmicjs.com/blog/the-cosmic-stack\" rel=\"noopener noreferrer\" target=\"_blank\">The Cosmic Stack</a><br><a href=\"https://cosmicjs.com/blog/three-reasons-why-agencies-should-be-using-a-cms-api\" rel=\"noopener noreferrer\" target=\"_blank\">Three Reasons Why Agencies Should be Using a CMS API</a><br><a href=\"https://cosmicjs.com/blog/managing-users-who-manage-content\" rel=\"noopener noreferrer\" target=\"_blank\">Managing Users Who Manage Content</a><br><a href=\"https://cosmicjs.com/blog/introducing-the-new-content-editor\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Content Editor</a></p><h3>Cloud CMS Resources</h3><p><a href=\"https://cosmicjs.com/docs/\">Cosmic JS Docs</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\"></a><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official JavaScript Client</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3>Examples</h3><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><code style=' font-size: inherit; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: 0px 0px; text-align: left;'>npm i cosmicjs</code></pre><p>Then in your JavaScript file, get your content:</p><div class=\"fr-embedly   \" data-original-embed=\"<a href='https://runkit.com/tonyspiro/5ad9109c320cd6001286359c' class='embedly-card'></a>\"><a href=\"https://runkit.com/tonyspiro/5ad9109c320cd6001286359c\" class=\"embedly-card\"></a></div>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"ydqUbGyK35","value":"1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg","url":"https://cdn.cosmicjs.com/1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg","imgix_url":"https://imgix.cosmicjs.com/1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"thV2lcozJb","value":"1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg","url":"https://cdn.cosmicjs.com/1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg","imgix_url":"https://imgix.cosmicjs.com/1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"2fwVa8XqAS","value":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best Cloud CMS for websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"jU7282gSGi","value":"Cloud"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"awtdBQN2n4","value":"Cosmic is the best Cloud CMS for websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"S87LUlZwhB","value":"2d5bcc60-6286-11e7-8d46-7b261262b385-Screen Shot 2017-07-06 at 3.03.09 PM.png","url":"https://cdn.cosmicjs.com/2d5bcc60-6286-11e7-8d46-7b261262b385-Screen Shot 2017-07-06 at 3.03.09 PM.png","imgix_url":"https://imgix.cosmicjs.com/2d5bcc60-6286-11e7-8d46-7b261262b385-Screen Shot 2017-07-06 at 3.03.09 PM.png"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"IzTdTbcrDn","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"0kMoZPP4qb","value":"Best Headless Cloud CMS "},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"ipas8FOPz4","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]},{"children":null,"type":"text","title":"Apps Search Term","key":"apps_search_term","id":"v95tq5i2enaf3oreecdk","value":""},{"children":null,"type":"text","title":"Articles Search Term","key":"articles_search_term","id":"apps_search_term_kef9yhcej8gy","value":""},{"children":null,"type":"html-textarea","title":"Page Overview","key":"page_overview","id":"zYuPyDtTWY","value":""},{"children":null,"type":"html-textarea","title":"SEO Content","key":"seo_content","id":"6dT4bcaDeW","value":""}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-22T23:07:51.159Z","created_by":"5357ef811693be2118000001","created":"2017-08-01T17:52:36.803Z","status":"published","modified_at":"2020-08-15T19:40:53.901Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-08-15T19:40:53.901Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg","imgix_url":"https://imgix.cosmicjs.com/1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg","imgix_url":"https://imgix.cosmicjs.com/1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg"},"blurb":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best Cloud CMS for websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Cloud","seo_description":"Cosmic is the best Cloud CMS for websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/2d5bcc60-6286-11e7-8d46-7b261262b385-Screen Shot 2017-07-06 at 3.03.09 PM.png","imgix_url":"https://imgix.cosmicjs.com/2d5bcc60-6286-11e7-8d46-7b261262b385-Screen Shot 2017-07-06 at 3.03.09 PM.png"},"code_example":"","seo_title":"Best Headless Cloud CMS ","videos":[],"apps_search_term":"","articles_search_term":"","page_overview":"","seo_content":""}},{"_id":"59da6014a6d9036802002182","order":24,"slug":"cms-api","title":"CMS API","content":"<p>Cosmic JS offers developers a powerful API and content editors an intuitive editing experience to power content for your applications. Install the <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Official Cosmic JS JavaScript Client</a> to integrate content into your app in minutes. &nbsp;Get a feel for Cosmic JS by taking a spin through <a href=\"https://cosmicjs.com/apps\" rel=\"noopener noreferrer\" target=\"_blank\">our apps</a> and check out the tutorials below.</p><h3>CMS API Articles</h3><p><a href=\"https://cosmicjs.com/why-cms-api\">Why Go API-first?</a><br><a href=\"https://cosmicjs.com/blog/the-cosmic-stack\" rel=\"noopener noreferrer\" target=\"_blank\">The Cosmic Stack</a><br><a href=\"https://cosmicjs.com/blog/three-reasons-why-agencies-should-be-using-a-cms-api\" rel=\"noopener noreferrer\" target=\"_blank\">Three Reasons Why Agencies Should be Using a CMS API</a><br><a href=\"https://cosmicjs.com/blog/managing-users-who-manage-content\" rel=\"noopener noreferrer\" target=\"_blank\">Managing Users Who Manage Content</a><br><a href=\"https://cosmicjs.com/blog/introducing-the-new-content-editor\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Content Editor</a></p><h3>CMS API Resources</h3><p><a href=\"https://cosmicjs.com/docs/\">Cosmic JS Docs</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\"></a><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official JavaScript Client</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3>Examples</h3><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><code style=' font-size: inherit; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: 0px 0px; text-align: left;'>npm i cosmicjs</code></pre><p>Then in your JavaScript file, get your content:</p><div class=\"fr-embedly   \" data-original-embed=\"<a href='https://runkit.com/tonyspiro/5ad9109c320cd6001286359c' class='embedly-card'></a>\"><a href=\"https://runkit.com/tonyspiro/5ad9109c320cd6001286359c\" class=\"embedly-card\"></a></div>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"4Epfe1uz2d","value":"1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg","url":"https://cdn.cosmicjs.com/1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg","imgix_url":"https://imgix.cosmicjs.com/1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"oH5FFyIb4W","value":"1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg","url":"https://cdn.cosmicjs.com/1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg","imgix_url":"https://imgix.cosmicjs.com/1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"VQgls3hf2w","value":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS API for websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"n78Fivgj6k","value":"CMS API"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"LWkA8t0XHr","value":"Cosmic is the best CMS API for websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"8pTxOJ5QS0","value":"2d5bcc60-6286-11e7-8d46-7b261262b385-Screen Shot 2017-07-06 at 3.03.09 PM.png","url":"https://cdn.cosmicjs.com/2d5bcc60-6286-11e7-8d46-7b261262b385-Screen Shot 2017-07-06 at 3.03.09 PM.png","imgix_url":"https://imgix.cosmicjs.com/2d5bcc60-6286-11e7-8d46-7b261262b385-Screen Shot 2017-07-06 at 3.03.09 PM.png"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"idISJ3XGyf","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"lURnkKUwZY","value":"Best Headless CMS API"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"frgtgqfrpylludl8pnsi","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-22T23:07:51.159Z","created_by":"5357ef811693be2118000001","created":"2017-10-08T17:27:48.385Z","status":"published","modified_at":"2020-06-27T19:21:59.867Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-27T19:21:59.867Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg","imgix_url":"https://imgix.cosmicjs.com/1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg","imgix_url":"https://imgix.cosmicjs.com/1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg"},"blurb":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS API for websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"CMS API","seo_description":"Cosmic is the best CMS API for websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/2d5bcc60-6286-11e7-8d46-7b261262b385-Screen Shot 2017-07-06 at 3.03.09 PM.png","imgix_url":"https://imgix.cosmicjs.com/2d5bcc60-6286-11e7-8d46-7b261262b385-Screen Shot 2017-07-06 at 3.03.09 PM.png"},"code_example":"","seo_title":"Best Headless CMS API","videos":[]}},{"_id":"5f5fabc81936450007d8a01b","order":24,"slug":"best-headless-cms-list","title":"The Complete List of Headless CMS [47 Top-Tier Products]","content":"<p dir=\"ltr\"><img data-image=\"https://imgix.cosmicjs.com/a30a1400-f845-11ea-8023-b50824df693d-top-headless-cms.jpg?w=1200&auto=format\" src=\"https://imgix.cosmicjs.com/a30a1400-f845-11ea-8023-b50824df693d-top-headless-cms.jpg?w=10&auto=format\" style=\"width: 100%;\" class=\"fr-fic fr-dib fr-shadow lazy-load\" alt=\"We've aggregated the list of the 47 best CMS products of 2020\"></p><p dir=\"ltr\"><br>When it comes to contemporary customer experiences, content is the differentiator. Each brand is vying to spin up content-rich landing pages, products, websites, and applications faster than the competition. And ideally, for a fraction of the time and cost.</p><p dir=\"ltr\">Each team member, from developers to content editors to the C-suite, wants to create and deliver compelling content across channels, without the need to micromanage their content infrastructure at every turn.&nbsp;</p><p dir=\"ltr\">As users demand more speed and connectedness from their digital experiences, savvy businesses have realized that a faster approach to content publishing starts with an innovative content management system; one that gives them enhanced control over content\r\ncreation and distribution.&nbsp;</p><p dir=\"ltr\">If you&rsquo;re looking for your next content management system, or are simply curious about the options on the market, familiarizing yourself with <a href=\"https://en.wikipedia.org/wiki/Headless_software\" rel=\"noopener noreferrer\" target=\"_blank\">headless architecture</a>,\r\nand the products offering it, is vital.&nbsp;</p><p dir=\"ltr\">If you already know about the headless approach to content and just want to see the list, <a href=\"#best-headless-cms\">go on and skip ahead</a>. Otherwise, we&rsquo;ve provided a few details about a <a href=\"https://www.cosmicjs.com/headless-cms\">headless CMS</a>and headless architecture in general, including how to choose between pure headless and decoupled headless CMS.<br><br></p><h2 dir=\"ltr\">What is a Headless CMS?</h2><p dir=\"ltr\">If you&rsquo;re in the content experience space you probably know about <a href=\"https://www.cosmicjs.com/blog/headless-cms-explained\">headless CMS</a> already. The headless market has done nothing but grow over recent years and new options are being developed at neck-breaking speeds. &nbsp;</p><p data-empty=\"true\">A headless CMS is a backend-only content management system that unlike a traditional CMS, removes the presentation layer, or the frontend, from the backend data storage, allowing developers to use any frontend tool they want to present the content they\r\nhave created.</p><p data-empty=\"true\">In the headless environment, content is stored on the cloud or in on-premise databases and provided as a service through APIs, which are, besides the separation between content and presentation, what make a headless CMS the best option to future-proof\r\nyour business. While some channels aren&rsquo;t yet highly used across the board, headless architecture and APIs enable you to deliver content beyond websites and apps and onto IoT, AR, VR and other emerging technology devices.&nbsp;</p><p data-empty=\"true\">This means that headless CMS are better equipped to create, distribute, and optimize omnichannel content experiences that deliver value directly to customers and clients. At the same time, the headless architecture makes CMS extensible and capable of\r\naugmenting what they do with a simple API.&nbsp;</p><p data-empty=\"true\">So how do we evaluate what makes a headless CMS truly top class? Let&#39;s take a look at the elements of the headless architecture, so that you can better understand what goes into our ranking system.<br><br></p><h2 dir=\"ltr\">The Elements of Headless Architecture</h2><p>According to <a href=\"https://headlesscms.org/about\"></a><a href=\"//headlesscms.org\">headlesscms.org</a>, &ldquo;Headless CMS&#39; are [the] opposite of legacy systems like WordPress, Drupal, Joomla, etc. [Legacy systems] traditionally have to be hosted and built together with the site every time it&rsquo;s\r\nserved. A headless CMS doesn&rsquo;t care where it&rsquo;s serving its content to. It&rsquo;s no longer attached to the frontend, and the content can be viewed on any platform.&rdquo;</p><p dir=\"ltr\">The headless architecture separates the management of a website into two different systems: one for content creation and storage, and another system that&rsquo;s responsible for consuming and presenting data through the use of an interface, no matter\r\nwhat it is.&nbsp;</p><p data-empty=\"true\">In a headless CMS, the frontend is removed from the equation, leaving only the backend, which acts as an API-based content repository, delivering content to any frontend framework, from single page applications to digital signage to good old fashioned\r\nwebsites. &nbsp;</p><p data-empty=\"true\">From a technical perspective, headless architecture is composed of the following elements:&nbsp;</p><ul><li dir=\"ltr\"><p dir=\"ltr\">A database or backend where content and digital assets are stored,&nbsp;</p></li><li dir=\"ltr\"><p dir=\"ltr\">A content management system where content is created</p></li><li dir=\"ltr\"><p dir=\"ltr\">An API that serves as a bridge between the CMS backend and the frontend,</p></li></ul><p><br></p><h2 dir=\"ltr\">Choosing A &lsquo;Pure&rsquo; Headless Or Decoupled CMS</h2><p dir=\"ltr\">By now, you might be convinced that headless architecture is the answer to the users&rsquo; increasing need for omnichannel experiences. A headless CMS simplifies content delivery and gives developers unparalleled flexibility when it comes to developing\r\nnew digital experiences. The thing is, for marketers, a &lsquo;pure&rsquo; headless CMS can be problematic, especially for teams without a developer on hand to create the head.</p><p dir=\"ltr\">Decoupled or hybrid CMS were born as an answer to this issue. They make it easy for marketers to create content and usually include templates and drag-and-drop interfaces to simplify things.</p><p dir=\"ltr\">A &lsquo;pure&rsquo; headless CMS is built to be an API-first CMS, whereas a decoupled CMS is more like a traditional CMS with an optional head and APIs attached; yet, as some vendors use the terms carelessly, it can be hard for users to understand the\r\ndifference.&nbsp;</p><p dir=\"ltr\">A hybrid or decoupled CMS is a CMS whose &lsquo;head&rsquo; or templating system is separated from the content creation and storage part. Unlike traditional CMS that often force users to use the templating engine that comes with the CMS, a decoupled CMS\r\ncan connect and integrate to custom heads depending on the channel.&nbsp;</p><p dir=\"ltr\">If you want more information about the differences between pure headless and decoupled CMS, check out our &lsquo;<a href=\"https://www.cosmicjs.com/blog/headless-cms-explained\">Headless CMS: Everything You Need to Know</a>&rsquo; article.&nbsp;</p><p dir=\"ltr\">Now, without further ado, here&rsquo;s our list of the top 47 headless CMS you need to keep an eye on going into 2021.<br><br></p><h2 dir=\"ltr\" id=\"best-headless-cms\">The Big List of 47 Headless CMS</h2><ol><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#ApostropheCMS\">ApostropheCMS</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#Cosmic\">Cosmic</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#Bold\">Bold</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#CraftCMS\">Craft CMS</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#Ghost\">Ghost</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#Zesty\">Zesty</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#Strapi\">Strapi</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#Prismic\">Prismic</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#CockpitCMS\">Cockpit CMS</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#NetlifyCMS\">Netlify CMS</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#XOOPSCMS\">XOOPS CMS</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#DialogueWise\">Dialogue Wise</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#Sanity\">Sanity</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#Directus\">Directus</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#Storyblok\">Storyblok</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#Scrivito\">Scrivito</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#Amplience\">Amplience</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#CloudCMS\">Cloud CMS</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#ContentaCMS\">Contenta CMS</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#Cotonti\">Cotonti</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#Flotiq\">Flotiq</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#GenticsMesh\">Gentics Mesh</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#PushTable\">PushTable</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#Squidex\">Squidex</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#Superdesk\">Superdesk</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#TakeShape\">TakeShape</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#Xamoom\">Xamoom</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#Contentful\">Contentful</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#DatoCMS\">DatoCMS</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#KenticoKontent\">Kentico Kontent</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#ButterCMS\">Butter CMS</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#Contentstack\">Contentstack</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#AgilityCMS\">Agility CMS</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#Mura\">Mura</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#dotCMS\">dotCMS</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#IngeniuxCMS\">Ingeniux CMS</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#CrafterCMS\">Crafter CMS</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#EvoqContent\">Evoq Content</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#Coredna\">Core dna</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#Magnolia\">Magnolia</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#Hygraph\">Hygraph</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#NavigaWriter\">Naviga Writer</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#ACE\">ACE - ATEX Content Engine</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#CrownpeakDXM\">Crownpeak DXM</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#eZ\">eZ Platform Enterprise Edition</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#FirstSpirit\">FirstSpirit</a></p></li><li dir=\"ltr\"><p dir=\"ltr\"><a href=\"#Solodev\">Solodev</a></p></li></ol><p data-empty=\"true\"><br></p><ol><li><h3 dir=\"ltr\" id=\"ApostropheCMS\"><a href=\"https://apostrophecms.com/\">ApostropheCMS</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/18b1bfa0-f783-11ea-8f94-e992506f3ab2-ApostropheCMS.png\" class=\"fr-fic fr-dii\" alt=\"ApostropheCMS is a Javascript-based CMS with drag-and-drop editors that's free to download\"></p><p dir=\"ltr\">Founded in 2008 and based in Philadelphia, ApostropheCMS is a free open source CMS with multi-tenant support. Apostrophe is 100% JavaScript based and uses MongoDB for intuitive document storage. It&rsquo;s built on Express framework and makes creating\r\ntemplates using Nunjucks and LESS stylesheet easy. REST APIs make connecting to headless capabilities easy and also includes in-context editing and drag-and-drop content for non-technical users.&nbsp;</p><p dir=\"ltr\"><strong>Availability: Free to download</strong><br><br></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"Cosmic\"><a href=\"https://www.cosmicjs.com/\">Cosmic</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://imgix.cosmicjs.com/ba431720-05c4-11eb-90c9-bd3368c184cc-cosmic-headless-cms.png?w=1200&auto=format\" class=\"fr-fic fr-dii\" alt=\"CosmicJS is an industry leading Headless CMS for all types of application\"></p><p dir=\"ltr\">Cosmic is a headless, API-first CMS built for developers by developers. It is fully extendable, making it perfectly equipped for building custom dashboards with best-in-class API services including REST and <a href=\"https://www.cosmicjs.com/blog/what-is-graphql\">GraphQL</a>APIs.\r\nModern content teams can seamlessly collaborate and rely on an easy-to-use content editing experience that allows for faster shipping times. In addition Cosmic includes out-of-the-box features like rich text, media manager, global CDN, flexible user roles\r\nand permissions, optional add-ons include webhooks, localization, revision history, single sign on, scheduled publishing, and more.</p><p dir=\"ltr\"><strong>Availability: Personal (Free), Starter, Pro, Enterprise</strong><br><br></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"Bold\"><a href=\"https://www.quintype.com/products/bold\">Bold</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/fdf1bb50-f77a-11ea-8f94-e992506f3ab2-Bold-CMS.png\" class=\"fr-fic fr-dii\" alt=\"Bold CMS is a machine learning CMS based in Bangalore, India\"></p><p dir=\"ltr\">Quintype Technologies Pvt. Ltd, founded in 2014 is headquartered in Bangalore India. Bold, is an enterprise headless CMS developed by Quintype Technologies with omnichannel distribution and personalization. This is further boosted by machine learning\r\nalgorithms that help deliver improved digital experiences. Bold is customizable for newsroom workflows and content categorization. It offers REST APIs for front-end control and a secure enterprise cloud with DDOS protection, SSL and auto-scaling infrastructure.</p><p dir=\"ltr\"><strong>Availability: Free Trial, Premium (based on traffic), Custom Enterprise</strong><br><br></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"CraftCMS\"><a href=\"https://craftcms.com/\">Craft CMS</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/2a3c89b0-f77b-11ea-8f94-e992506f3ab2-Craft-CMS.png\" class=\"fr-fic fr-dii\" alt=\"Number 4 on the Headless CMS list is Craft Headless CMS\"></p><p dir=\"ltr\">Originating in Oregon in 2013, Craft CMS is an open source headless CMS that empowers creative marketers with a user-friendly interface and a customizable backend. It features decoupled capabilities supported by GraphQL API as well as integrations for\r\ncommerce, Salesforce and HubSpot. Included is support for 25 languages, a plug-in store and more.</p><p dir=\"ltr\"><strong>Availability: Free, Pro, Enterprise</strong><br><br></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"Ghost\"><a href=\"https://ghost.org/\">Ghost</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/59b8c1e0-f77b-11ea-8f94-e992506f3ab2-Ghost-CMS.png\" class=\"fr-fic fr-dii\" alt=\"The 5th CMS on this Headless list is Ghost, loved by writers, publishers, and podcasters\"></p><p dir=\"ltr\">Singapore-based Ghost was founded in 2013 and simplifies the process for creators that want to publish content online and grow an audience. It is an open source headless Node.js CMS that is Jamstack customizable. REST APIs can connect to custom themes\r\nor Jamstack frontends. Integrations are available with open source developer SDKs for hundreds of apps directly or via Zapier.</p><p dir=\"ltr\"><strong>Availability: Basic, Standard, Business</strong><br><br></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"Zesty\"><a href=\"https://www.zesty.io/\">Zesty</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/83a38030-f77b-11ea-8f94-e992506f3ab2-Zesty.png\" class=\"fr-fic fr-dii\" alt=\"Zesty enables IoT and application deployment with quick and snappy control over your workflow\"></p><p dir=\"ltr\">Zesty.io is a cloud-based, headless CMS designed for marketing teams. Zesty enables marketers to build content-rich websites and deliver content across apps and IoT devices. Founded in 2010 in San Diego, California, Zesty speeds content creation with\r\ncontent indexing, SEO management, customized templates, and video content. Zesty also enables users to plan a workflow as well as take full control over the authoring process.&nbsp;</p><p dir=\"ltr\"><strong>Availability: Small Business, Business, Mid-Size Enterprise, and Enterprise</strong><br><br></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"Strapi\"><a href=\"https://strapi.io/\">Strapi</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/154a2ed0-f77c-11ea-8f94-e992506f3ab2-Strapi.png\" class=\"fr-fic fr-dii\" alt=\"Strapi is a popular open-source CMS based on API first content management\"></p><p dir=\"ltr\">Strapi is an open-source headless CMS based on Node.js, which makes it useful for developers to lay the foundation for a solid user experience. Strapi enables developers to build simple database configurations with Mongo, Postgres, and MySQL as well as\r\nmodify the backend code to build a functioning web application in no time.&nbsp;</p><p dir=\"ltr\"><strong>Availability: Standard, Gold, Silver</strong><br><br></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"Prismic\"><a href=\"https://prismic.io/\">Prismic</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/42e6d190-f77c-11ea-8f94-e992506f3ab2-Prismic.png\" class=\"fr-fic fr-dii\" alt=\"Prismic is a developer-first, San Francisco-based API platform that's gaining popularity in the US and offers free models\"></p><p dir=\"ltr\">Prismic is a developer-first headless CMS that was founded in 2013. It lets developers create custom fields that content teams can use. Users can build with any JavaScript framework whether Gatsby, React or Vue and use flexible queries with RESTful API\r\nand GraphQL. Preview and scheduling for publishing content with ecommerce and other features also available.</p><p dir=\"ltr\"><strong>Availability: Free, Medium, Platinum, Enterprise</strong><br><br></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"CockpitCMS\"><a href=\"https://getcockpit.com/\">Cockpit CMS</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/70fff750-f77c-11ea-8f94-e992506f3ab2-Cockpit-CMS.png\" class=\"fr-fic fr-dii\" alt=\"Coming in 13th is the API-first Cockpit CMS, free to download and simple to use\"></p><p dir=\"ltr\">The brain-child of Artur Heinze, Germany-based Cockpit was developed in 2013. It is an open source API-driven headless CMS with a flexible content structure and support for multiple devices and cross channel distribution. An API-first and JSON content\r\napproach manages structured content that can be reused across channels.&nbsp;</p><p dir=\"ltr\"><strong>Availability: Free to download</strong><br><br></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"NetlifyCMS\"><a href=\"https://www.netlifycms.org/\">Netlify CMS</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/920ccfe0-f77c-11ea-8f94-e992506f3ab2-NetlifyCMS.png\" class=\"fr-fic fr-dii\" alt=\"Netlify is a free to download, open-source and CMS complete with highly functional Git integration\"></p><p dir=\"ltr\">From the creators of Jamstack, San Francisco Netlify CMS is built on client-side JavaScript, reusable APIs and prebuilt Markup which provides better performance and security than platforms like WordPress. It offers open source content management that\r\nfits into the Git workflow. Netlify combines with any SSG for flexible and fast projects.&nbsp;</p><p dir=\"ltr\"><strong>Availability: Free to download</strong><br>&nbsp;</p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"XOOPSCMS\"><a href=\"https://xoops.org/\">XOOPS CMS</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/c20a1ef0-f77c-11ea-8f94-e992506f3ab2-Xoops.png\" class=\"fr-fic fr-dii\"></p><p dir=\"ltr\">XOOPS CMS is an extensible, object-oriented dynamic content management written in PHP. XOOPS enables users to build community websites, company portals and intranet sites, weblogs, and many different digital experiences. XOOPS CMS enables developers to\r\ninstall and uninstall modules quickly to develop faster and with less interference and uses relational databases such as MySQL to store data and run the CMS.&nbsp;</p><p dir=\"ltr\"><strong>Availability: Free to download</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"DialogueWise\"><a href=\"https://dialoguewise.com/\">Dialogue Wise</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/f0ba5490-f77c-11ea-8f94-e992506f3ab2-Dialogue-Wise.png\" class=\"fr-fic fr-dii\" alt=\"Dialogue Wise CMS has some unique device and location based services for a headless CMS worth checking out\"></p><p dir=\"ltr\">Australian DialogueWise is an API-based headless CMS that provides location, device and sentiment-based content delivery methods. It includes web hooks that notify about any changes in content as well as provides a test-sandbox for previewing content and custom scripting to personalize experiences.<br><br><strong>Availability: Free, Small, Medium, Enterprise</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"Sanity\"><a href=\"https://www.sanity.io/\">Sanity</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/0d839000-f77d-11ea-8f94-e992506f3ab2-Sanity.png\" class=\"fr-fic fr-dii\" alt=\"Sanity is one of the more popular leading CMS systems, based on a &quot;structured&quot; content model\"></p><p dir=\"ltr\">Founded in 2016, Sanity is a fast and flexible API-first headless platform for building cutting edge experiences with structured content. Create custom front ends with GraphQL or GROQ, Sanity&rsquo;s open source querying language to push content anywhere.\r\nSanity also offers real-time collaboration, document revision and instant previews.</p><p dir=\"ltr\"><strong>Availability: Free, Advanced, Enterprise</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"Directus\"><a href=\"https://directus.io/\">Directus</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/30dd8ce0-f77d-11ea-8f94-e992506f3ab2-Directus-CMS.png\" class=\"fr-fic fr-dii\" alt=\"SQL based Directus is a data first headless CMS and API that allows self-hosting\"></p><p dir=\"ltr\">Directus, is a NYC-based data-first headless CMS. It is open source and manages content as a pure SQL database without the need for a property data model or content storage. Directus uses APIs or SDKs to connect to kiosks, wearables, IoT devices and more\r\nand includes customizable workflows.</p><p dir=\"ltr\"><strong>Availability: Self-hosted, Basic, Standard, Pro, Enterprise</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"Storyblok\"><a href=\"https://www.storyblok.com/\">Storyblok</a></h3><p data-empty=\"true\"><br></p><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/4c4c6870-f77d-11ea-8f94-e992506f3ab2-Storyblok.png\" class=\"fr-fic fr-dii\" alt=\"Storyblok's value promise is in their content and image delivery model, and they serve several international brands\"></p><p dir=\"ltr\">Storyblok is a headless CMS with a powerful visual editor that makes it simpler for marketers to build digital experiences. Storyblok provides users with the flexibility and freedom to be used for a myriad of use cases, which enables marketers to configure\r\nit the way they want and create digital content that suits the audience&rsquo;s needs. Also, with Storyblok developers can define content types and receive structured content in JSON that the editor can use to preview it completely decoupled from the\r\nbackend.</p><p dir=\"ltr\"><strong>Availability: Free, Basic, Advanced, and Premium</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"Scrivito\"><a href=\"https://www.scrivito.com/\">Scrivito</a></h3><p data-empty=\"true\"><br></p><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/757388a0-f77d-11ea-8f94-e992506f3ab2-Scrivito-CMS.png\" class=\"fr-fic fr-dii\" alt=\"Scrivito is designed specifically for enterprise teams and offers a great WYSIWYG editor\"></p><p data-empty=\"true\"><br></p><p dir=\"ltr\">An enterprise-class SaaS platform founded in Berlin,Germany in 2015, Scrivito is a multi-tenant decoupled CMS that delivers assets using APIs. Powered by AWS it also leverages React.js and Jamstack, a WYSIWYG editor, customizable permissions and a versatile\r\ncontent browser.</p><p dir=\"ltr\"><strong>Availability: Team, Company, Enterprise, Enterprise Plus</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"Amplience\"><a href=\"https://amplience.com/\">Amplience</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/8ca35af0-f77d-11ea-8f94-e992506f3ab2-Amplience-CMS.png\" class=\"fr-fic fr-dii\" alt=\"Amplience is a headless content manager created specifically for retail\"></p><p dir=\"ltr\">Founded in 2008, London-based Amplience is a best-of-breed CMS for the retail industry. Amplience combines content, experiences and commerce. It provides capabilities to plan, schedule, product and deliver dynamic content, optimize content for product\r\npages and deliver to all channels and devices.</p><p dir=\"ltr\"><strong>Availability: Request pricing</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"CloudCMS\"><a href=\"https://www.cloudcms.com/\">Cloud CMS</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/a4f231d0-f77d-11ea-8f94-e992506f3ab2-Cloud-CMS.png\" class=\"fr-fic fr-dii\" alt=\"Cloud CMS is a decoupled Enterprise Headless content management platform\"></p><p dir=\"ltr\">Boston-based Cloud CMS was founded in 2010 and provides a &nbsp;decoupled JSON and binary content platform. Git-like version control is available with feature-rich RESTful API and GraphQL. Cloud CMS uses Amazon DocumentDB as an alternative to MongoDB.\r\nAvailable as a SaaS model or with on-prem hosting using Docker Containers.&nbsp;</p><p dir=\"ltr\"><strong>Available: Starter, Business, Plus, Enterprise</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"ContentaCMS\"><a href=\"https://www.contentacms.org/\">Contenta CMS</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/d72b4010-f77d-11ea-8f94-e992506f3ab2-Contenta-CMS.png\" class=\"fr-fic fr-dii\" alt=\"Contenta is a Drupal-focused CMS and API-first platform\"></p><p dir=\"ltr\">ContentaCMS provides a decoupled Drupal distribution. It is a standard API-ready platform that makes using decoupled Drupal easier. Free and open source it includes tools and configuration &nbsp;to move away from server-side rendered sites and distribute to a variety of frontends.<br><br><strong>Available: Free to download</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"Cotonti\"><a href=\"https://www.cotonti.com/\">Cotonti</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/ee726af0-f77d-11ea-8f94-e992506f3ab2-Contonti.png\" class=\"fr-fic fr-dii\" alt=\"If you're looking for a flexible and free-to-use CMS, check out Contonti\"></p><p dir=\"ltr\">An open-source PHP-based content management framework. Cotonti is fast and lightweight while remaining modular and extensible, allowing for additional plugins and integrations. It is powered by its own template engine and has an easily learned interface\r\nfor inexperienced programmers as well.</p><p dir=\"ltr\"><strong>Availability: Free to download</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"Flotiq\"><a href=\"https://flotiq.com/\">Flotiq</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/0b650050-f77e-11ea-8f94-e992506f3ab2-Flotiq.png\" class=\"fr-fic fr-dii\" alt=\"Deploy to Heroku instantly with Flotiq CMS, a free to download CMS\"></p><p dir=\"ltr\">Flotiq is an API-first CMS that connects content to Gatsby and deploys to Herekoku instantly. Secure and scalable with feature packed User APIs and SDKs and works with Jamstack.<br><br><strong>Availability: Free to download</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"GenticsMesh\"><a href=\"https://getmesh.io/\">Gentics Mesh</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/a0d16980-f77e-11ea-8f94-e992506f3ab2-Gentics-Mesh.png\" class=\"fr-fic fr-dii\" alt=\"You'll find a completely standalone CMS in Genetics Mesh - no dependencies required\"></p><p dir=\"ltr\">Austrian company Gentics&rsquo; products include an open source CMS that requires no setup or dependencies. Offers custom content components and dynamic layouts, GraphQL and RESTful APIs as well as Elasticsearch support.</p><p dir=\"ltr\"><strong>Availability: Free to download</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"PushTable\"><a href=\"https://www.pushtable.com/\">PushTable</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/a5456570-f77e-11ea-8f94-e992506f3ab2-PushTable.png\" class=\"fr-fic fr-dii\" alt=\"PushTable utililzes Googles global CDN for snappy serverless delivery\"></p><p dir=\"ltr\">PushTable is an API-driven headless CMS built on top of GCP and Firebase. It leverages Google&rsquo;s fast global CDN and provides fully flexible data structure and serverless workflow &nbsp;support for content management.</p><p dir=\"ltr\"><strong>Availability: Free to download</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"Squidex\"><a href=\"https://squidex.io/\">Squidex</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/c7c4b9c0-f77e-11ea-8f94-e992506f3ab2-squidex.png\" class=\"fr-fic fr-dii\" alt=\"Squidex is one of the only Headless CMS platforms we've listed that's designed to work as well with Linux as it does with Windows\"></p><p dir=\"ltr\">Squidex is an open-source headless CMS and content management platform that provides developers with a rich API ecosystem with OData filter and Swagger definitions where developers can build their UI on top of it using ASP.NET Core and CQRS. Squidex works\r\nfor both Linux and Windows.</p><p dir=\"ltr\"><strong>Availability: Starter, Basic, Professional, Business</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"Superdesk\"><a href=\"https://www.superdesk.org/\">Superdesk</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/eb42b960-f77e-11ea-8f94-e992506f3ab2-Superdesk.png\" class=\"fr-fic fr-dii\" alt=\"Superdesk toutes itself as a digital newsroom, and is designed for publishers, distributors, and archivists of online content\"></p><p data-empty=\"true\"><br></p><p dir=\"ltr\">Superdesk is, first and foremost, a digital newsroom system. The platform combines the API-driven functionalities of a headless CMS with the workflow features news creators and editors need to create and distribute news quickly. However, despite being\r\nready for news creators, Superdesk&rsquo;s open-source functionalities and integrability makes it possible for organizations to add the most-relevant functionality to their business.&nbsp;</p><p dir=\"ltr\"><strong>Availability: Self-starter, Pro, Enterprise</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"TakeShape\"><a href=\"https://www.takeshape.io/\">TakeShape</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/10852550-f77f-11ea-8f94-e992506f3ab2-Take-Shape.png\" class=\"fr-fic fr-dii\" alt=\"Developer's can try TakeShape for free, and utilize a single endpoint for fetching all resources for Jamstack projects\">&nbsp;</p><p dir=\"ltr\">TakeShape is a Jamstack-ready, headless CMS that uses GraphQL to fetch content across systems from a single endpoint. TakeShape offers users a visual interface and a powerful templating engine that can be used to deploy websites quickly. TakeShape also\r\nenables powerful content modelling and localization support.&nbsp;</p><p dir=\"ltr\"><strong>Availability: Developer, Professional, Enterprise</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"Xamoom\"><a href=\"https://xamoom.com/\">Xamoom</a></h3><p data-empty=\"true\"><br></p><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/2a2bc400-f77f-11ea-8f94-e992506f3ab2-Xamoom.png\" class=\"fr-fic fr-dii\" alt=\"Xamoom is the leading mobile-first headless CMS\"></p><p data-empty=\"true\"><br></p><p dir=\"ltr\">Xamoom is a mobile-first CMS that leverages Google&rsquo;s AppEngine to create mobile campaigns, webs, and apps easily. Using xamoon, marketers can create context-based mobile experiences in several different languages as well as embed multimedia and\r\nenable location-based experiences for the website&rsquo;s visitors.&nbsp;</p><p dir=\"ltr\"><strong>Availability: Basic, Pro, Premium</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"Contentful\"><a href=\"https://www.contentful.com/\">Contentful</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/3edd9e00-f77f-11ea-8f94-e992506f3ab2-Contentful.png\" class=\"fr-fic fr-dii\" alt=\"The all-around industry leader, Contentful is the most popular Headless CMS around, with features that serve most teams\"></p><p dir=\"ltr\">Berlin based API-first content platform Contentful was founded in 2013. &nbsp;It acts as a single hub for unifying content and integrates with tools that perform translations, segmentation and more. &nbsp;Business leaders, marketers, developers and product\r\nmanagers are armed with the tools they need for building digital experiences.</p><p dir=\"ltr\">Stateless RESTful APIs offer total control over content and assets. It features microservices architecture, is language and framework agnostic with open source components and includes an editor toolbox that provides custom integrations and content modelling.</p><p dir=\"ltr\"><strong>Availability: Free, Medium and Custom Enterprise Solutions</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"DatoCMS\"><a href=\"https://www.datocms.com/\">DatoCMS</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/7374c080-f77f-11ea-8f94-e992506f3ab2-DatoCMS.png\" class=\"fr-fic fr-dii\" alt=\"DatoCMS is a headless CMS built on a &quot;unified content&quot; philosophy\"></p><p dir=\"ltr\">Founded in Firenze Italy in 2017, DatoCMS is a headless CMS that offers a single centralized content hub, a flexible content model with faster integrations backed by a global delivery network that spans 200 cities and 90+ countries. Content is channel\r\nagnostic, making it reusable across channels and provides fast loading times to hit the 100% standard for Google&rsquo;s PageSpeed Insights.&nbsp;</p><p dir=\"ltr\"><strong>Availability: Developer, Professional, Scale</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"KenticoKontent\"><a href=\"https://kontent.ai/\">Kentico Kontent</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/ae7c4b30-f77f-11ea-8f94-e992506f3ab2-Kentico-Kontent.png\" class=\"fr-fic fr-dii\" alt=\"Kentico Kontent has crept to the front of the pack of Englands' CMS companies since its launch, and caters to marketers and developers\"></p><p data-empty=\"true\"><br></p><p dir=\"ltr\">A headless CMS that provides clean and structured content delivery via API. New England-based Kentico offers a cloud-first CMS known as Kontent that can also be deployed as part of the CI/CD pipeline. It features workflows that connect processes and deliver\r\ncontent to any platform. Also offering SaaS performance with an easy to use authoring experience and editorial calendar for staying organized.</p><p dir=\"ltr\"><strong>Availability: Free Trial, Monthly Business, Premium and Enterprise Plans</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"ButterCMS\"><a href=\"https://buttercms.com/\">Butter CMS</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/defef6e0-f77f-11ea-8f94-e992506f3ab2-Butter-CMS.png\" class=\"fr-fic fr-dii\" alt=\"Butter CMS is famed for its blogging features, but it's a CMS with features that cater to the whole tech stack\"></p><p dir=\"ltr\">Founded in 2014, ButterCMS is an API-first CMS that provides content management for multichannel and multisite options. Its global content-API is made for any tech stack and includes a blogging engine with built-in SEO. Global CDNs improve performance\r\nand scalability, plus flexible content modelling using components.</p><p dir=\"ltr\"><strong>Availability: Individual Blog Plans, Startups, Small Businesses and Enterprise</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"Contentstack\"><a href=\"https://www.contentstack.com/\">Contentstack</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/01d6f280-f780-11ea-8f94-e992506f3ab2-Contentstack.png\" class=\"fr-fic fr-dii\" alt=\"Contentstack is one of the industry-leaders in Headless CMS, and has a fantastic visual editor for the content focused team members\"></p><p dir=\"ltr\">Founded in 2018 and based in the Bay Area, Constenstack is a modern CMS for personalized omnichannel digital experiences. &nbsp;It harmonizes business and technology for better collaboration and quicker delivery from idea to digital content in a matter\r\nof days. It is frontend framework agnostic with a rich visual editor and offers integrations via APIs.</p><p dir=\"ltr\"><strong>Availability: Free Trial, Business and Enterprise</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"AgilityCMS\"><a href=\"https://agilitycms.com/\">Agility CMS</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/aaf10c20-f780-11ea-8f94-e992506f3ab2-Agility-CMS.png\" class=\"fr-fic fr-dii\" alt=\"Agility CMS is a lightning-quick Headless CMS for users various levels of technical ability\"></p><p data-empty=\"true\"><br></p><p dir=\"ltr\">Toronto-based Agility CMS has been around since 2002 and touts itself as the fastest headless CMS. It offers built-in page management and content delivery to any frontend using RESTful APIs, Graph QL and Jamstack.<br><br>Users can easily manage content using content modeling and version control to build multiple content relationships. Non-technical users can make changes without developer help and integrations with the entire MarTech stack are possible.</p><p dir=\"ltr\"><strong>Availability: Free, Standard, Pro</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"Mura\"><a href=\"https://getmura.com/\">Mura</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/9704af90-f781-11ea-8f94-e992506f3ab2-Mura.png\" class=\"fr-fic fr-dii\" alt=\"If you can't decide between headless or decoupled CMS, Mura might be the CMS for you\"></p><p dir=\"ltr\">Founded in California in 2008, Mura is a complete digital experience platform that provides content management, personalization and CaaS. It is a nimble content creation hub that avoids the one-size-fits-all approach. Users can choose to go headless or decoupled with support for Vue.js, Angular, Next.js and more. It is also container-ready and supports the DevOps workflow.<br><br><strong>Availability: Request Demo</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"dotCMS\"><a href=\"https://dotcms.com/\">dotCMS</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/d2666830-f781-11ea-8f94-e992506f3ab2-dotCMS.png\" class=\"fr-fic fr-dii\" alt=\"Dot calls itself a &quot;hybrid&quot; CMS, combining the best of Headless and a traditional CMS, making it great for teams that are hoping to build and manage without too much technical development\"></p><p dir=\"ltr\">dotCMS is a hybrid content management system. Founded in Miami, Florida in 2008, it offers the freedom of headless with the functionality of traditional CMS. Users can rely on multi-cloud deployment on public or private cloud, a scalable Java infrastructure\r\nwith support for low code and no code that includes custom templates, workflows and drag-and-drop capabilities.&nbsp;</p><p dir=\"ltr\"><strong>Availability: Request Quote</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"IngeniuxCMS\"><a href=\"https://www.ingeniux.com/\">Ingeniux CMS</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/19587c60-f782-11ea-8f94-e992506f3ab2-Ingeniux-CMS.png\" class=\"fr-fic fr-dii\" alt=\"Ingeniux CMS is one of the oldest Agile content experiences around, founded in 1999\"></p><p dir=\"ltr\">Founded in Seattle in 1999, Ingeniux is an agile CMS that provides an alternative to the Web Experience Suite. It Supports a modern web experience with secure portals, mobile apps and connections to multiple customer touchpoints and modern SPAs. Ingeniux\r\nworks for technical content and can edit DITA and XML. Cloud hosting is available on Azure or AWS and there are allowances for 3rd party content editing within workflows.</p><p dir=\"ltr\"><strong>Availability: Request a Quote</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"CrafterCMS\"><a href=\"https://craftersoftware.com/\">Crafter CMS</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/50af5b20-f782-11ea-8f94-e992506f3ab2-Crafter-CMS.png\" class=\"fr-fic fr-dii\" alt=\"Crafter CMS offers optimization for video experiences that is hard to match\"></p><p dir=\"ltr\">Virginia-based Crafter Software was founded in 2013 and its products include a Git-based headless CMS for building apps, websites and omnichannel experiences. It features user-friendly content creation and publication tools as well as severless and stateless\r\ndynamic content delivery support for operations. Users are capable of building not only enterprise websites and digital signage with GraphQL APIs but also video experiences using OTT video for live training and VOD.&nbsp;</p><p dir=\"ltr\"><strong>Availability: Free, Cloud Scaling Packages</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"EvoqContent\"><a href=\"https://www.dnnsoftware.com/products/evoq-content\">Evoq Content</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/86c4e040-f782-11ea-8f94-e992506f3ab2-Evoq.png\" class=\"fr-fic fr-dii\" alt=\"Evoq Content is an enterprise software platform focused on .NET applications\"></p><p dir=\"ltr\">Evoq Content is an open source .NET CMS for delivering modern web experiences. The CMS product of DNN software, it offers extensibility built on the back of open APIs and a marketplace of plugin apps. It provides flexible pre-built layouts and templates\r\nwith inline image editing. Digital assets can be handled with a central DAM with Box, Amazon S3 and Dropbox connectors. Also offered are page caching and Evoq on Demand cloud deployment for scalability and version tracking for secure access.</p><p dir=\"ltr\"><strong>Availability: Request a demo</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"Coredna\"><a href=\"https://www.coredna.com/\">Core dna</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/b1c2e350-f782-11ea-8f94-e992506f3ab2-Core-DNA.png\" class=\"fr-fic fr-dii\" alt=\"Core DNA is a content management system that offers a wide variety of production ready applications\"></p><p dir=\"ltr\">Core dna was founded in Melbourne, Australia in 2000. As a DXP it combines content, commerce, intranet and more. PaaS is available for managing infrastructure with enterprise-grade cloud computing. Included are 80+ production-ready apps for out-of-the-box\r\nuse without plugins. A suite of tools for marketing and technical teams to deliver API-driven experiences including a Rich-text and HTML editor as well as 500 integrations to 3rd party systems that can be combined using webhooks or APIs.</p><p dir=\"ltr\"><strong>Availability: Dependent on site volume</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"Magnolia\"><a href=\"https://www.magnolia-cms.com/\">Magnolia</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/f1884430-f782-11ea-8f94-e992506f3ab2-Magnolia.png\" class=\"fr-fic fr-dii\" alt=\"Magnolia is based in Switzerland and modeled on lean infrastructure\"></p><p dir=\"ltr\">Magnolia, founded in 2003 is a modern digital experience platform that provides hyper-personalization and flexible, frontend agnostic architecture. Based in Basel, Switzerland, Magnolia is cloud-ready with scalable deployment infrastructure. The Java\r\nCMS offers several no-code integrations with Multisource. REST APIs and visual SPA editing make connecting to multiple devices simple.</p><p dir=\"ltr\"><strong>Availability: Contact for pricing</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"Hygraph\"><a href=\"https://hygraph.com/\">Hygraph</a></h3><p dir=\"ltr\"><img src=\"https://cdn.cosmicjs.com/5b345c70-39b7-11ed-adfd-ddb1795c6ac6-Screen-Shot-2022-09-21-at-7.11.51-AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\">Germany-based Hygraph (formerly GraphCMS) was founded in 2017 and offers a GraphQL native headless CMS. It provides API-first digital experiences without templates or other restrictions for developers. It also uses webhooks and versioning for content\r\ncontrol. Included are power editors for content schema staging workflows.</p><p dir=\"ltr\"><strong>Availability: Free, Team and Enterprise</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"NavigaWriter\"><a href=\"https://www.navigaglobal.com/content/naviga-writer/\">Naviga Writer</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/63813510-f783-11ea-8f94-e992506f3ab2-Naviga-Writer.png\" class=\"fr-fic fr-dii\" alt=\"Naviga Writer is a CMS created primarily for journalists and writers, integrating some powerful machine learning functions to enhance productivity\"></p><p dir=\"ltr\">NavigaWriter is a CaaS platform for newsrooms and media houses. NavigaGlobal was founded in Minneapolis in 2013 and built a CMS for journalists with an easy-to-use interface and content management system. Naviga Compass&rsquo; machine learning algorithm\r\nmakes content tagging with metadata simple and improves productivity. Adapted for cross channel publication across IoT devices and SPAs. It also features a WYSIWYG interface and headless extensibility for integration with other systems.</p><p dir=\"ltr\"><strong>Availability: Request pricing</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"ACE\"><a href=\"https://www.atex.com/products/ace/\">ACE - ATEX Content Engine</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/84f69370-f783-11ea-8f94-e992506f3ab2-ACE.png\" class=\"fr-fic fr-dii\" alt=\"ACE stands for the Atex Content Engine and is fully scalable for developers and content teams\"></p><p dir=\"ltr\">UK-based Atex&rsquo;s CMS product is a multi-channel API-first CMS that provides flexibility for developers and editors. Headless and fully scalable, ATEX&rsquo;s features a GraphQL Content API and developer friendly SDKs for Java and React. Core delivery\r\nservices are deployed in Docker Containers by Amazon E3S. Integrations and plugins facilitate on-demand and live video as well as content recommendations and semantic tagging.&nbsp;</p><p dir=\"ltr\"><strong>Availability: Request pricing</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"CrownpeakDXM\"><a href=\"https://www.crownpeak.com/products/\">Crownpeak DXM</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/dda22930-f783-11ea-8f94-e992506f3ab2-Crownpeak.png\" class=\"fr-fic fr-dii\" alt=\"Reduce complexity around GDPR, regulations, and other deployment hurdles to managing your digital experiences\"></p><p dir=\"ltr\">Crownpeak was founded in Los Angeles in 2001 and offers a cloud-native DXP with multi-site management and delivery of personalized digital experiences. A/B testing, TagControl for monitoring and controlling 3rd party technologies on site are included.\r\nIt also features a Universal Consent Platform for delivering experiences that comply with GDPR, CCPA and other privacy laws.</p><p dir=\"ltr\"><strong>Availability: Request demo</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"eZ\"><a href=\"https://www.ibexa.co/product\">eZ Platform Enterprise Edition</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/0c1332f0-f784-11ea-8f94-e992506f3ab2-eZ-Platform.png\" class=\"fr-fic fr-dii\" alt=\"eZ Platform includes a native page builder, is designed on full-stack PHP, and built for enterprises.\"></p><p dir=\"ltr\">eZ Platform is Ibexa&rsquo;s modular DXP for B2B companies. A content engine that creates content at scale with decoupled headless CMS, an application engine for designing and developing features in an agile environment using Symfony PHP full-stack and\r\na Website Factory that manages content localization and includes a native Page Builder.</p><p dir=\"ltr\"><strong>Availability: Silver, Gold, Platinum, VIP</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"FirstSpirit\"><a href=\"https://www.e-spirit.com/us/homepage/\">FirstSpirit</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/3558b090-f784-11ea-8f94-e992506f3ab2-FirstSpirit.png\" class=\"fr-fic fr-dii\" alt=\"FirstSpirit uses AI-Powered personalization, a light infrastructure, and is built on a Hybrid CMS model\"></p><p dir=\"ltr\">Manufactured by German company e-Spirit, FirstSpirit is a hybrid CMS and DXP that manages content-driven digital experiences across multiple channels. AI-powered personalization, CaaS with agile content management and integrations built around a light\r\nIT infrastructure and flexible UX are some of its prominent features.</p><p dir=\"ltr\"><strong>Availability: Request demo</strong><br><strong>&nbsp;</strong></p></li><li dir=\"ltr\"><h3 dir=\"ltr\" id=\"Solodev\"><a href=\"https://www.solodev.com/\">Solodev</a></h3><p dir=\"ltr\"><img style=\"width: 100%;\" src=\"https://cdn.cosmicjs.com/6f6d76d0-f784-11ea-8f94-e992506f3ab2-Solodev.png\" class=\"fr-fic fr-dii\" alt=\"Solodev is a cloud-based Headless CMS that enables teams to work together, deploy quickly, and offers 24/7 support.\">Solodev\r\nis a customer experience platform and CMS that enables individuals and companies to work together and leverage the power of the cloud. Solodev enables teams, from individual contributors to C-suite executives to collaborate and build context-driven digital\r\nexperiences. Solodev works on AWS, which gives the platform an extra layer of security, scalability and redundancy.&nbsp;</p><p dir=\"ltr\"><strong>Availability: Free, Team, and Enterprise</strong></p><p data-empty=\"true\"><br></p></li></ol><h2 dir=\"ltr\">Should You Be Going Headless or Decoupled?</h2><p dir=\"ltr\">The world of the CMS has changed over the last few years. Traditional CMS were great for working with simple websites, getting blogs up and running and pushing content to one or two channels.&nbsp;</p><p dir=\"ltr\">Pure headless and decoupled CMS allow you to store content in the backend and then distribute it to any current and emerging channels. Pure headless CMS reduces the strain on development teams that previously needed to build and maintain their own infrastructure.&nbsp;</p><p dir=\"ltr\">Now, headless architecture has made it possible for content and development teams to focus more time on their application instead of non-core CMS infrastructure, enabling greater content and application development velocity.&nbsp;</p><p dir=\"ltr\"><br></p><h2 dir=\"ltr\">What&#39;s Next?</h2><p dir=\"ltr\">We hope you enjoyed this extensive list of Headless CMS options on the market. If you still aren&#39;t sure where to get started, <a href=\"https://www.cosmicjs.com/headless-cms\">check out Cosmic.</a> Our powerful, intuitive Headless CMS is built with a developers-first mindset, combined with a simple UI to make it easy for teams to build and create content faster.</p><p dir=\"ltr\">The digital landscape is always changing and we are constantly improving our product to satisfy the needs of modern content and development teams. We have an engaged <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">community and Slack channel</a>,\r\nand we&#39;re available to help you find out if going headless is right for you and answer any questions you may have.</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"HsPngaQP4P","value":"5f5fac071936450007d8a01c","required":true,"object_type":"authors","object":{"_id":"5f5fac071936450007d8a01c","slug":"kyle-meagher","title":"Kyle Meagher","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"hsMOJCxIAj","value":"kylemeags"},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D2rdKO4lEL","value":"e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2020-09-14T17:44:39.110Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-14T17:45:09.251Z","created":"2020-09-14T17:44:39.110Z","status":"published","published_at":"2020-09-14T17:44:39.110Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"pxFeN764BH","value":"<p>Looking to shortlist some headless content management systems? Our comprehensive list will help you narrow down the growing headless CMS landscape.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"nDy9TZH0sk","value":"a30a1400-f845-11ea-8023-b50824df693d-top-headless-cms.jpg","url":"https://cdn.cosmicjs.com/a30a1400-f845-11ea-8023-b50824df693d-top-headless-cms.jpg","imgix_url":"https://imgix.cosmicjs.com/a30a1400-f845-11ea-8023-b50824df693d-top-headless-cms.jpg"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"YGkhUThSpM","value":"The headless CMS landscape is still growing. Here’s a comprehensive list of all the major players."},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"MNN8qApz3g","value":"2020-09-17"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2020-09-14T17:43:36.867Z","created_by":"5f1352f9d677c00008cf38b0","modified_at":"2022-09-21T14:15:30.138Z","created":"2020-09-14T17:43:36.867Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"thumbnail":"https://imgix.cosmicjs.com/a30a1400-f845-11ea-8023-b50824df693d-top-headless-cms.jpg","published_at":"2022-09-21T14:15:30.138Z","metadata":{"author":{"_id":"5f5fac071936450007d8a01c","slug":"kyle-meagher","title":"Kyle Meagher","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"hsMOJCxIAj","value":"kylemeags"},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D2rdKO4lEL","value":"e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2020-09-14T17:44:39.110Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-14T17:45:09.251Z","created":"2020-09-14T17:44:39.110Z","status":"published","published_at":"2020-09-14T17:44:39.110Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","metadata":{"username":"kylemeags","profile_picture":{"url":"https://cdn.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg","imgix_url":"https://imgix.cosmicjs.com/e6a97150-f6b1-11ea-a7f7-5146f4eea1d5-kyle.jpeg"}}},"teaser":"<p>Looking to shortlist some headless content management systems? Our comprehensive list will help you narrow down the growing headless CMS landscape.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/a30a1400-f845-11ea-8023-b50824df693d-top-headless-cms.jpg","imgix_url":"https://imgix.cosmicjs.com/a30a1400-f845-11ea-8023-b50824df693d-top-headless-cms.jpg"},"seo_meta_description":"The headless CMS landscape is still growing. Here’s a comprehensive list of all the major players.","published_date":"2020-09-17"}},{"_id":"5d4c25bccda366570398f684","slug":"content-management-system-for-emerging-tech","title":"Content Management System for Emerging Tech","content":"<p>Teams using the Cosmic JS Content Management System are able to model and create content for delivery to all of their websites and apps, including emerging tech like VR and AR, wearables, and more. Manage video, rich text and notifications from the comfort of your Cosmic JS Bucket Dashboard for a variety of devices. Content is available for reuse once published in the Cosmic JS Headless Content Management System, saving teams time and money.<br><br></p><h3>What is Headless CMS Software?</h3><p>Headless CMS Software works by providing non-technical editors with a Dashboard UI to model, create and publish content while providing developers with API tools and resources to integrate content with any website or app. By decoupling content from code, teams create a central content repository that can power all of their content-powered applications.&nbsp;</p>","metafields":[{"value":"Content Management System for Emerging Tech","key":"solution_name","title":"Solution Name","type":"text","children":null},{"value":"52263510-9dc3-11e9-a5b4-e5df9f8049d3-f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-109999224655216202658486799915322872806436o.jpg","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/52263510-9dc3-11e9-a5b4-e5df9f8049d3-f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-109999224655216202658486799915322872806436o.jpg","imgix_url":"https://imgix.cosmicjs.com/52263510-9dc3-11e9-a5b4-e5df9f8049d3-f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-109999224655216202658486799915322872806436o.jpg"},{"object_type":"case-studies","value":"59663607a6a3f55962000e40,5ade6e0e2b218820ec24bff1,5a72248572c6845e0d90b5d5","key":"case_studies","title":"Case Studies","type":"objects","children":null,"objects":[{"_id":"59663607a6a3f55962000e40","slug":"big-fish-launches-marketing-and-tutorial-content-for-games","title":"Big Fish Launches Marketing and Tutorial Content for Games","content":"<p>When <a href=\"http://www.bigfishgames.com\" rel=\"noopener noreferrer\" target=\"_blank\">Big Fish</a> launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch. Big Fish wanted their game studios to have the ability to curate and update content on each of their landing pages. Other CMS systems weren&rsquo;t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b671fa80-ba81-11e7-9419-d7ce2df8354d-Screen Shot 2017-10-26 at 2.12.42 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/bf97f050-ba82-11e7-b96e-3b4c8df8fb98-Screen Shot 2017-10-26 at 2.20.03 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><blockquote><p>&quot;We use Cosmic buckets for each of our mobile game landing pages. While our API and storage usage is low, the number of buckets we need is high, which makes the new Clusters Feature a perfect solution for our company use cases. It allows us to\r\nhave a single consolidated invoice, with an overall API and data-limit, but up to 35 buckets for our use.&quot;</p><p><cite>&mdash; Jessica Chappell, Web Developer&nbsp;</cite></p></blockquote><p>Read <a href=\"http://www.bigfishgames.com/blog\" rel=\"noopener noreferrer\" target=\"_blank\">more</a> about Big Fish and their games.</p>","metafields":[{"value":"Big Fish","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T14:45:27.402Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-11-08T23:15:38.911Z"},{"_id":"5ade6e0e2b218820ec24bff1","slug":"medical-realities-delivers-vr-surgical-content","title":"Medical Realities Delivers VR Surgical Content","content":"<p>The <a href=\"https://www.medicalrealities.com\" rel=\"noopener noreferrer\" target=\"_blank\">Medical Realties</a> Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/5dc112a0-5aa8-11e8-a7f7-e17cbb39f395-ice_screenshot_20180518-092612.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Medical Realities team needed a way for educators (non-technical editors) to manage content that could be served to VR headsets for consumption by trainees, so they chose Cosmic to manage and deliver their content from the cloud through an API.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-10999922_465521620265848_6799915322872806436_o.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily spin up content models that would allow our non-technical editors to manage the most sophisticated medical VR content out there. Our developers were equipped with robust Docs and Example Apps to get them started and were able to use the bleeding-edge frameworks necessary to run Virtual Reality.&quot;</p><p><cite>&mdash; Joe Marritt, Lead Web Developer&nbsp;</cite></p></blockquote>","metafields":[{"value":"Medical Realities","key":"company","title":"Company","type":"text","children":null},{"value":"Healthcare and Virtual Reality ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"The Medical Realties Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","imgix_url":"https://imgix.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-04-23T23:36:46.885Z","created_by":"5716b504e9c686d006000073","created":"2018-04-23T23:36:46.885Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-05-18T17:07:50.800Z"},{"_id":"5a72248572c6845e0d90b5d5","slug":"unleashed-xr-augmented-mixed-and-virtual-realities","title":"Unleashed XR: Augmented, Mixed and Virtual Realities","content":"<p><a href=\"http://www.unleashed-xr.com/\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/913ee1b0-06fd-11e8-a43c-e17c6c324439-ezgif-5-2f720a171b.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></a></p><p><br></p><p>The <a href=\"http://www.unleashed-xr.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Unleashed XR</a> team designs and develops augmented reality, mixed reality and virtual reality solutions for a range of clients across industries. XR (extended reality) is the term referring to the full spectrum from reality to complete virtual environments. Through a structured design thinking process, Unleashed XR designs and develops applications that meet the unique needs of their clients. Unleashed XR is driven by ensuring their services have a tangible positive impact on their clients, making activities, processes and experiences superior, more efficient, cheaper and safer. <br><br>Unleashed XR needed a new blog that allowed developers, editors and contributors to collaborate in the cloud, so they chose Cosmic. They plan on re-vamping the website of their sister business, <a href=\"http://www.unleashed-vr.com/\">Unleashed VR</a>, using Cosmic&#39;s powerful tools in the near future.</p><blockquote><p>&quot;We just launched our new website which utilizes the power of Cosmic. Cosmic was a huge help in the setup of our blog, particularly the Media management, which Cosmic proved invaluable for in respect to optimizing videos and images. Additionally we were able to use Cosmic to stream our videos straight to a Unity Mobile application that we are working on as well. This was great in optimizing the speed of the app, and we&#39;re looking forward to integrating Cosmic in as many ways as possible.&quot;</p><p><cite>&mdash; Tyler Smith, Lead Software Developer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Unleashed XR","key":"company","title":"Company","type":"text","children":null},{"value":"Virtual Reality Software","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"The Unleashed XR team designs and develops augmented reality, mixed reality and virtual reality solutions for a range of clients across industries. Unleashed XR needed a new blog that allowed developers, editors and contributors to collaborate in the cloud, so they chose Cosmic.","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"a9fd29f0-0702-11e8-a43c-e17c6c324439-Logo&Name_PurpleUnleashedXR.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/a9fd29f0-0702-11e8-a43c-e17c6c324439-Logo&Name_PurpleUnleashedXR.png","imgix_url":"https://imgix.cosmicjs.com/a9fd29f0-0702-11e8-a43c-e17c6c324439-Logo&Name_PurpleUnleashedXR.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-01-31T20:18:13.948Z","created_by":"5716b504e9c686d006000073","created":"2018-01-31T20:18:13.948Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null}]},{"repeater_fields":"\"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\"\"","value":"vue-rpg-game","key":"app_slugs","title":"App Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"vue-rpg-game","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"cosmic-messenger","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"vue-garage-sale","type":"text","required":false}]}]},{"repeater_fields":"\"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\"\"","value":"wordpress-importer","key":"extension_slugs","title":"Extension Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"wordpress-importer","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"mux-videos","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"imgix-editor","type":"text","required":false}]}]},{"key":"testimonial","title":"Testimonial","type":"html-textarea","children":null,"value":"<p>&quot;Cosmic JS allowed us to easily spin up content models that would allow our non-technical editors to manage the most sophisticated medical VR content out there. Our developers were equipped with robust Docs and Example Apps to get them started and were able to use the bleeding-edge frameworks necessary to run Virtual Reality.&quot;</p>"},{"value":"Joe Marritt, Lead Web Developer at Medical Realities","key":"testimonial_credit","title":"Testimonial Credit","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created":"2019-08-08T13:38:04.590Z","created_at":"2019-07-08T15:08:44.006Z","modified_at":"2019-08-08T13:38:49.129Z","status":"published","locale":null,"published_at":"2019-08-08T13:38:49.129Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"order":24,"metadata":{"solution_name":"Content Management System for Emerging Tech","image":{"url":"https://cdn.cosmicjs.com/52263510-9dc3-11e9-a5b4-e5df9f8049d3-f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-109999224655216202658486799915322872806436o.jpg","imgix_url":"https://imgix.cosmicjs.com/52263510-9dc3-11e9-a5b4-e5df9f8049d3-f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-109999224655216202658486799915322872806436o.jpg"},"case_studies":[{"_id":"59663607a6a3f55962000e40","slug":"big-fish-launches-marketing-and-tutorial-content-for-games","title":"Big Fish Launches Marketing and Tutorial Content for Games","content":"<p>When <a href=\"http://www.bigfishgames.com\" rel=\"noopener noreferrer\" target=\"_blank\">Big Fish</a> launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch. Big Fish wanted their game studios to have the ability to curate and update content on each of their landing pages. Other CMS systems weren&rsquo;t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b671fa80-ba81-11e7-9419-d7ce2df8354d-Screen Shot 2017-10-26 at 2.12.42 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/bf97f050-ba82-11e7-b96e-3b4c8df8fb98-Screen Shot 2017-10-26 at 2.20.03 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><blockquote><p>&quot;We use Cosmic buckets for each of our mobile game landing pages. While our API and storage usage is low, the number of buckets we need is high, which makes the new Clusters Feature a perfect solution for our company use cases. It allows us to\r\nhave a single consolidated invoice, with an overall API and data-limit, but up to 35 buckets for our use.&quot;</p><p><cite>&mdash; Jessica Chappell, Web Developer&nbsp;</cite></p></blockquote><p>Read <a href=\"http://www.bigfishgames.com/blog\" rel=\"noopener noreferrer\" target=\"_blank\">more</a> about Big Fish and their games.</p>","metafields":[{"value":"Big Fish","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T14:45:27.402Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-11-08T23:15:38.911Z","metadata":{"company":"Big Fish","industry_type":"Gaming","teaser":"When Big Fish launches a new game for iOS, Android, or Web, they use a marketing landing page to promote the launch.  Other CMS systems weren’t as flexible enough for their needs. Cosmic provides Big Fish with more creative freedom to build landing pages while allowing game studios to make updates on their own.\n","logo":{"url":"https://cdn.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png","imgix_url":"https://imgix.cosmicjs.com/33939470-e3ac-11e8-9e28-911bc9bb89f7-big-fish-games-logo-png-4.png"}}},{"_id":"5ade6e0e2b218820ec24bff1","slug":"medical-realities-delivers-vr-surgical-content","title":"Medical Realities Delivers VR Surgical Content","content":"<p>The <a href=\"https://www.medicalrealities.com\" rel=\"noopener noreferrer\" target=\"_blank\">Medical Realties</a> Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/5dc112a0-5aa8-11e8-a7f7-e17cbb39f395-ice_screenshot_20180518-092612.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Medical Realities team needed a way for educators (non-technical editors) to manage content that could be served to VR headsets for consumption by trainees, so they chose Cosmic to manage and deliver their content from the cloud through an API.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/f70db6b0-5abd-11e8-a6f7-cb94a52bca9d-10999922_465521620265848_6799915322872806436_o.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily spin up content models that would allow our non-technical editors to manage the most sophisticated medical VR content out there. Our developers were equipped with robust Docs and Example Apps to get them started and were able to use the bleeding-edge frameworks necessary to run Virtual Reality.&quot;</p><p><cite>&mdash; Joe Marritt, Lead Web Developer&nbsp;</cite></p></blockquote>","metafields":[{"value":"Medical Realities","key":"company","title":"Company","type":"text","children":null},{"value":"Healthcare and Virtual Reality ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"The Medical Realties Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","imgix_url":"https://imgix.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-04-23T23:36:46.885Z","created_by":"5716b504e9c686d006000073","created":"2018-04-23T23:36:46.885Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-05-18T17:07:50.800Z","metadata":{"company":"Medical Realities","industry_type":"Healthcare and Virtual Reality ","teaser":"The Medical Realties Platform is a technology powerhouse designed to deliver realism and immersion. Delivering high-quality surgical training using Virtual Reality, Medical Realities lets you become immersed while world-class surgeons teach their interactive modules, which includes 360-degree 4K video and a testing system within the application. \n","logo":{"url":"https://cdn.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png","imgix_url":"https://imgix.cosmicjs.com/0a95ad50-474f-11e8-b969-053c57b3610c-medical-realities-1.png"}}},{"_id":"5a72248572c6845e0d90b5d5","slug":"unleashed-xr-augmented-mixed-and-virtual-realities","title":"Unleashed XR: Augmented, Mixed and Virtual Realities","content":"<p><a href=\"http://www.unleashed-xr.com/\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/913ee1b0-06fd-11e8-a43c-e17c6c324439-ezgif-5-2f720a171b.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></a></p><p><br></p><p>The <a href=\"http://www.unleashed-xr.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Unleashed XR</a> team designs and develops augmented reality, mixed reality and virtual reality solutions for a range of clients across industries. XR (extended reality) is the term referring to the full spectrum from reality to complete virtual environments. Through a structured design thinking process, Unleashed XR designs and develops applications that meet the unique needs of their clients. Unleashed XR is driven by ensuring their services have a tangible positive impact on their clients, making activities, processes and experiences superior, more efficient, cheaper and safer. <br><br>Unleashed XR needed a new blog that allowed developers, editors and contributors to collaborate in the cloud, so they chose Cosmic. They plan on re-vamping the website of their sister business, <a href=\"http://www.unleashed-vr.com/\">Unleashed VR</a>, using Cosmic&#39;s powerful tools in the near future.</p><blockquote><p>&quot;We just launched our new website which utilizes the power of Cosmic. Cosmic was a huge help in the setup of our blog, particularly the Media management, which Cosmic proved invaluable for in respect to optimizing videos and images. Additionally we were able to use Cosmic to stream our videos straight to a Unity Mobile application that we are working on as well. This was great in optimizing the speed of the app, and we&#39;re looking forward to integrating Cosmic in as many ways as possible.&quot;</p><p><cite>&mdash; Tyler Smith, Lead Software Developer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Unleashed XR","key":"company","title":"Company","type":"text","children":null},{"value":"Virtual Reality Software","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"The Unleashed XR team designs and develops augmented reality, mixed reality and virtual reality solutions for a range of clients across industries. Unleashed XR needed a new blog that allowed developers, editors and contributors to collaborate in the cloud, so they chose Cosmic.","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"a9fd29f0-0702-11e8-a43c-e17c6c324439-Logo&Name_PurpleUnleashedXR.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/a9fd29f0-0702-11e8-a43c-e17c6c324439-Logo&Name_PurpleUnleashedXR.png","imgix_url":"https://imgix.cosmicjs.com/a9fd29f0-0702-11e8-a43c-e17c6c324439-Logo&Name_PurpleUnleashedXR.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-01-31T20:18:13.948Z","created_by":"5716b504e9c686d006000073","created":"2018-01-31T20:18:13.948Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"company":"Unleashed XR","industry_type":"Virtual Reality Software","teaser":"The Unleashed XR team designs and develops augmented reality, mixed reality and virtual reality solutions for a range of clients across industries. Unleashed XR needed a new blog that allowed developers, editors and contributors to collaborate in the cloud, so they chose Cosmic.","logo":{"url":"https://cdn.cosmicjs.com/a9fd29f0-0702-11e8-a43c-e17c6c324439-Logo&Name_PurpleUnleashedXR.png","imgix_url":"https://imgix.cosmicjs.com/a9fd29f0-0702-11e8-a43c-e17c6c324439-Logo&Name_PurpleUnleashedXR.png"}}}],"app_slugs":[{"slug":"vue-rpg-game"},{"slug":"cosmic-messenger"},{"slug":"vue-garage-sale"}],"extension_slugs":[{"slug":"wordpress-importer"},{"slug":"mux-videos"},{"slug":"imgix-editor"}],"testimonial":"<p>&quot;Cosmic JS allowed us to easily spin up content models that would allow our non-technical editors to manage the most sophisticated medical VR content out there. Our developers were equipped with robust Docs and Example Apps to get them started and were able to use the bleeding-edge frameworks necessary to run Virtual Reality.&quot;</p>","testimonial_credit":"Joe Marritt, Lead Web Developer at Medical Realities"}},{"_id":"5f35c3e2fcc662000804c562","order":24,"slug":"what-is-graphql","title":"What is GraphQL: A Comprehensive Guide","content":"<p><a href=\"https://www.cosmicjs.com/knowledge-base/graphql-cms\"><img src=\"https://imgix.cosmicjs.com/4b3277b0-e1aa-11ea-88aa-0bae7ba3a376-graphql-cms.jpg?w=1200 &auto=format\" style=\"width: 100%;\" class=\"fr-fic fr-dib fr-rounded\" alt=\"GraphQL CMS\"></a></p><p style=\"text-align: center;\"><em><span style=\"font-size: 14px;\">Cosmic provides a&nbsp;</span></em><span style=\"font-size: 14px;\"><a href=\"https://www.cosmicjs.com/knowledge-base/graphql-cms\"><em>GraphQL Headless CMS API</em></a></span><em><span style=\"font-size: 14px;\">&nbsp;to power content for your websites and apps.</span></em></p><p><span style=\"font-weight: 400;\">The lack of standardization for APIs has been a challenge that software developers have faced for a long time.&nbsp;</span></p><p><span style=\"font-weight: 400;\">A&nbsp;</span><a href=\"https://smartbear.com/resources/ebooks/the-state-of-api-2019-report/\" rel=\"noopener noreferrer\" target=\"_blank\"><span style=\"font-weight: 400;\">study by SmartBear</span></a><span style=\"font-weight: 400;\">&nbsp;found that 35% of API providers feel their documentation is poor or needs improvement. The problem is that inconsistent APIs increase the learning curve for developers and can slow development velocity. But perhaps poor API documentation is not entirely the fault of those doing the writing.&nbsp;</span></p><p><span style=\"font-weight: 400;\">GraphQL aims to solve the difficulties of API standardization and documentation with its straightforward querying language, technology-agnostic backend support, and self-documenting schema system. That&rsquo;s why many development teams are opting for GraphQL over other API technologies that have a lack of widely-used industry standards.</span></p><p><span style=\"font-weight: 400;\"><img src=\"https://cdn.cosmicjs.com/b704d970-e190-11ea-88aa-0bae7ba3a376-graohql-trends.png\" style=\"width: 601px;\" class=\"fr-fic fr-dib\"></span><br><br><span style=\"font-weight: 400;\">While REST and GraphQL are both API paradigms that enable the sharing of data over the internet, there are some key differences developers should be aware of. Let&rsquo;s take a deep-dive into GraphQL and whether it&rsquo;s right for your project.</span></p><h2><br>Getting to Grips with GraphQL? Here&rsquo;s What You&rsquo;ll Find in This Article:</h2><ol><li style=\"font-weight: 400;\"><a href=\"#what-is-graphql\"><span style=\"font-weight: 400;\">What is GraphQL?</span></a></li><li style=\"font-weight: 400;\"><a href=\"#graphql-vs-rest\"><span style=\"font-weight: 400;\">GraphQL vs REST</span></a></li><li style=\"font-weight: 400;\"><a href=\"#exploring-graphql-benefits\"><span style=\"font-weight: 400;\">Exploring Some GraphQL Benefits</span></a></li><li style=\"font-weight: 400;\"><a href=\"#3-graphql-examples\"><span style=\"font-weight: 400;\">3 GraphQL Examples: What is Graphql Used For?</span></a></li><li style=\"font-weight: 400;\"><a href=\"#is-graphql-right-for-your-project\"><span style=\"font-weight: 400;\">Is GraphQL Right For Your Project?</span></a></li></ol><h2 id=\"what-is-graphql\"><br>What is GraphQL?</h2><p><img src=\"https://cdn.cosmicjs.com/a60bc2e0-e1aa-11ea-88aa-0bae7ba3a376-GraphQL.png\" style=\"width: 200px; float: right; margin: 10px 0 10px 20px;\" class=\"fr-fir fr-dii\"></p><p><span style=\"font-weight: 400;\"><a href=\"https://graphql.org/\">GraphQL</a> is an API querying language that is both language and database agnostic. That means developers can make standardized data queries to a GraphQL service without any knowledge of the backend implementation. Developers describe the data they need, and the API handles the task of fetching the appropriate data behind the scenes.</span></p><p><span style=\"font-weight: 400;\">But let&rsquo;s take a step back and examine the origins of GraphQL.&nbsp;</span></p><p><span style=\"font-weight: 400;\">In 2012, GraphQL began as an internal Facebook project led by co-creators Lee Byron, Nick Schrock, and Dan Schafer. Their aim was to</span>\r\n<a href=\"https://nordicapis.com/interview-with-graphql-co-creator-lee-byron/\" rel=\"noopener noreferrer\" target=\"_blank\"><span style=\"font-weight: 400;\">build a better Facebook News Feed API</span></a><span style=\"font-weight: 400;\">:</span></p><blockquote><p><span style=\"font-weight: 400;\">&ldquo;The three of us got to work trying to figure out how to build a better News Feed API and we just got super far down the rabbit hole,&rdquo; Byron told Nordic APIs. &ldquo;I think just a month or two of iterative improvements on what started as a prototype enfolding all of our ideas ended up being the first version of GraphQL.&rdquo;</span></p></blockquote><p><span style=\"font-weight: 400;\">In 2015, Facebook publicly released GraphQL, and in 2018, the GraphQL project was moved from Facebook to the GraphQL Foundation, hosted by the Linux Foundation, a non-profit company.</span></p><p><span style=\"font-weight: 400;\">Beyond the standardized querying language, GraphQL is a server-side runtime and type system. On the backend, a GraphQL service needs to be set up to validate and execute queries. This requires a schema that defines the object types and fields available and resolvers which handle the implementation details for retrieving the data on the backend.</span></p><h2 id=\"graphql-vs-rest\"><br>GraphQL vs REST</h2><p><span style=\"font-weight: 400;\">GraphQL&mdash;similar to REST APIs&mdash;leverages HTTP to send and receive data. The key difference is that different REST requests are created based on HTTP methods and endpoints, while GraphQL queries are shaped within the JSON body of the request.</span><br><br><span style=\"font-weight: 400;\"><img data-action=\"zoom\" src=\"https://cdn.cosmicjs.com/49254280-e26e-11ea-ad85-b3e5c5f45697-cosmic-graphql-cms.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" alt=\"Cosmic GraphQL API\"></span></p><p style=\"text-align: center;\"><span style=\"font-weight: 400;\"><em>Cosmic </em></span><a href=\"https://docs.cosmicjs.com/graphql-api/\" rel=\"noopener noreferrer\" target=\"_blank\"><span style=\"font-weight: 400;\"><em>GraphQL API</em></span></a><span style=\"font-weight: 400;\"><em>. Click to zoom.</em></span></p><p><span style=\"font-weight: 400;\"><strong>GraphQL Request</strong></span><br><span style=\"font-weight: 400;\">For example, take the body of this GraphQL request:</span></p><pre>{\r\n  person {\r\n    firstName\r\n    lastName\r\n  }\r\n}</pre><p><span style=\"font-weight: 400;\">With GraphQL, developers can define which data they want to get returned (first name and last name) by specifying each field within the object (person). The resulting response would look like this:</span></p><pre dir=\"ltr\">{\r\n  &quot;data&quot;: {\r\n    &quot;person&quot;: {\r\n      &quot;firstName&quot;: &quot;John&quot;,\r\n      &quot;lastName&quot;: &quot;Smith&quot;\r\n    }\r\n  }\r\n}</pre><p dir=\"ltr\">This results in another benefit that GraphQL has over REST is the ability to retrieve multiple resources through a single query, whereas REST requires a new query to be made for each resource.</p><p><span style=\"font-weight: 400;\">The GraphQL response generally has the same structure as the request. Queries are interactive, so any changes to fields in the request body will dynamically change the response as well.</span></p><p><span style=\"font-weight: 400;\"><strong>REST Request</strong></span><br><span style=\"font-weight: 400;\">This differs from REST APIs, which are based on resources. For example, here&rsquo;s a similar request to a REST endpoint:</span></p><pre dir=\"ltr\">GET https://sample.com/person/1</pre><p><span style=\"font-weight: 400;\">In the case of REST, developers need to specify the location of the resource on the backend using the correct endpoint (/person) and path parameters (/1). The request body is blank because REST endpoints typically return all the data fields a resource contains.</span></p><p><span style=\"font-weight: 400;\">The resulting JSON body could look something like this:</span></p><pre>{\r\n  &quot;firstName&quot;: &quot;John&quot;,\r\n  &quot;middleName&quot;: &quot;Andrew&quot;,\r\n  &quot;lastName&quot;: &quot;Smith&quot;,\r\n  &quot;email&quot;: &quot;jas1992@gmail.com&quot;,\r\n  &quot;relationshipStatus&quot;: &quot;single&quot;\r\n}</pre><p dir=\"ltr\"><span style=\"font-weight: 400;\">As you can see, REST APIs are much less flexible, and frontend developers have little control over the response they get back. The REST server returns what backend developers have decided the endpoint should give as a response.</span></p><h2 id=\"exploring-graphql-benefits\"><br>Exploring Some GraphQL Benefits</h2><p><span style=\"font-weight: 400;\">If you&rsquo;re still asking,&nbsp;</span><em><span style=\"font-weight: 400;\">&ldquo;why use graphql over REST?&rdquo;</span></em><span style=\"font-weight: 400;\">, read on. <br></span>\r\n<span style=\"font-weight: 400;\"><br>There are a number of areas where GraphQL has the upper hand over most REST services.</span></p><p><span style=\"font-weight: 400;\"><strong>Standardization:</strong> For one, GraphQL is simple to use. There&rsquo;s no industry standard for REST APIs, so developers are forced to sift through documentation to understand any new API they need to use. With GraphQL, however, developers only need to learn the standardized querying language once, and they can work with any application or software that supports the technology.</span></p><p><span style=\"font-weight: 400;\"><strong>Declarative:</strong> In addition, the ability to control the response from an API request enables developers to avoid over fetching or under fetching data. These situations waste bandwidth by providing more information than necessary or requiring multiple API calls to get all the data needed. GraphQL enables developers to pull all the required fields across multiple objects within a single request.</span></p><p><span style=\"font-weight: 400;\"><strong>Self-documenting:</strong> Finally, GraphQL is introspective. That means the API is self-documenting and predictable for developers to use. Since the GraphQL server requires a pre-defined schema, developers can easily explore the data available using manual queries or a tool like&nbsp;</span>\r\n<a href=\"https://github.com/graphql/graphiql\" rel=\"noopener noreferrer\" target=\"_blank\"><span style=\"font-weight: 400;\">GraphiQL</span></a><span style=\"font-weight: 400;\">. With REST endpoints, it&rsquo;s up to the backend developers to document any changes they make or leverage a tool like</span>\r\n<a href=\"https://swagger.io/\" rel=\"noopener noreferrer\" target=\"_blank\"><span style=\"font-weight: 400;\">Swagger</span></a><span style=\"font-weight: 400;\">&nbsp;to generate the API documentation automatically.</span></p><h2 id=\"3-graphql-examples\"><br>3 GraphQL Examples: What is GraphQL Used For?</h2><p><span style=\"font-weight: 400;\">With the benefits of GraphQL clear, let&rsquo;s look at some examples of several types of GraphQL queries.&nbsp;</span></p><h3><span style=\"font-weight: 400;\">Pulling Data</span></h3><p><span style=\"font-weight: 400;\">When developers need to pull data from the backend, it&rsquo;s typically called a GET request in REST terms. With GraphQL, these are queries that look like this:</span></p><pre dir=\"ltr\">query GetTitles {\r\n  allBooks {\r\n    books {\r\n      # retrieves title of all books\r\n      title\r\n    } \r\n  }\r\n}</pre><p><span style=\"font-weight: 400;\">GraphQL queries can be anonymous or named (GetTitles), and comments can be included using the # character. These features, and many others, helps to clarify what the query&rsquo;s expected response should be.&nbsp;</span></p><p><span style=\"font-weight: 400;\">In this case, the response would be similar to this:</span></p><pre dir=\"ltr\">{\r\n  &quot;data&quot;: {\r\n    &quot;allBooks&quot;:  [\r\n      {\r\n        &quot;title&quot;: &quot;The Martian&quot;\r\n      },\r\n      {\r\n        &quot;title&quot;: &quot;The Great Gatsby&quot;\r\n      }\r\n    ]\r\n  }\r\n}</pre><h3><span style=\"font-weight: 400;\">Editing Data</span></h3><p><span style=\"font-weight: 400;\">If developers need to add, modify, or delete data, they&rsquo;ll send a POST, PUT/PATCH, or DELETE request to a REST endpoint. With GraphQL, however, modifying data requires a mutation request. Here&rsquo;s an example of creating a mutation:</span></p><pre dir=\"ltr\">mutation createBook(title: &quot;The Old Man and the Sea&quot;, author: &quot;Ernest Hemingway&quot;) { }</pre><p dir=\"ltr\"><span style=\"font-weight: 400;\">This simple mutation will create a new book object on the backend with the specified title and author. If the mutation was successful, we&rsquo;d get a response that includes a unique identifier for the new data object created on the backend.</span></p><pre dir=\"ltr\">{ &quot;data&quot;: { &quot;createBook&quot;: &quot;sqdYsdf&quot; } }</pre><p dir=\"ltr\"><span style=\"font-weight: 400;\">As with queries, developers can shape the responses they get from mutations. For example, it&rsquo;s possible to request certain fields to be included in the response along with the unique identifier, such as the title, author, or date created.</span></p><h3><span style=\"font-weight: 400;\">Subscriptions</span></h3><p><span style=\"font-weight: 400;\">Along with simple queries and mutations, GraphQL supports&nbsp;</span><a href=\"https://graphql.org/learn/queries/#operation-name\" rel=\"noopener noreferrer\" target=\"_blank\"><span style=\"font-weight: 400;\">subscriptions</span></a>\r\n<span style=\"font-weight: 400;\">, which enable a frontend app to retrieve real-time data updates from the server.&nbsp;</span></p><p><span style=\"font-weight: 400;\">For example, if a frontend app needed to keep a running list of books as they&rsquo;re added to its database, developers could set up a subscription event using the following request:</span></p><pre dir=\"ltr\">subscription {\r\n  new_books {\r\n    id\r\n    title\r\n    author\r\n    date_added\r\n  }\r\n}</pre><p><span style=\"font-weight: 400;\">Once the subscription is set up, the server will automatically push new data to the frontend. The responses will include all the fields in the initial subscription request.&nbsp;</span></p><p><span style=\"font-weight: 400;\">It&rsquo;s important to note that subscriptions are sent to a websocket endpoint because HTTP connections typically close once a response is returned. Instead, the websocket connection, and in turn, subscription remains open until the frontend requests to unsubscribe or an error occurs.&nbsp;</span></p><p><span style=\"font-weight: 400;\">Without subscriptions, it&rsquo;s incredibly difficult to build real-time functionality. It often requires an approach called polling, which involves sending periodic requests to an API. But this approach is inefficient and could risk hitting request limits. Subscriptions, therefore, are a powerful way to ensure frontend applications receive data updates in real-time without requiring polling.</span></p><h2 id=\"is-graphql-right-for-your-project\"><br>Is GraphQL Right For Your Project?</h2><p><span style=\"font-weight: 400;\">While GraphQL adoption is growing, many development teams still opt for REST APIs when integrating new frontends with their CMS because it&rsquo;s an API paradigm they&rsquo;ve been familiar with for a while. GraphQL, however, is ideal for simplifying development, reducing bandwidth usage, and reducing the time-to-market for content-driven apps. In the end, either technology can fuel static site generators, mobile apps, websites, and more.</span></p><p><span style=\"font-weight: 400;\">The good news is that with&nbsp;</span><span style=\"font-weight: 400;\">Cosmic</span><span style=\"font-weight: 400;\">&nbsp;you don&rsquo;t need to choose between&nbsp;</span><a href=\"https://docs.cosmicjs.com/rest-api/\" rel=\"noopener noreferrer\" target=\"_blank\"><span style=\"font-weight: 400;\">REST</span></a><span style=\"font-weight: 400;\">&nbsp;and&nbsp;</span><a href=\"https://docs.cosmicjs.com/graphql-api/\" rel=\"noopener noreferrer\" target=\"_blank\"><span style=\"font-weight: 400;\">GraphQL</span></a>\r\n<span style=\"font-weight: 400;\">. The&nbsp;</span><a href=\"https://www.cosmicjs.com/headless-cms\"><span style=\"font-weight: 400;\">headless CMS</span></a><span style=\"font-weight: 400;\">&nbsp;supports both technologies, so brands can launch content-rich apps faster, without worrying about backend compatibility. And if you&#39;re not quite ready to make the change to GraphQL, Cosmic&rsquo;s REST API also supports a GraphQL-like feature that allows you to declare what properties are returned with the response using&nbsp;</span>\r\n<a href=\"https://www.cosmicjs.com/changelog/customize-rest-api-response-object-metafields-search\"><span style=\"font-weight: 400;\">&quot;props&quot;</span></a><span style=\"font-weight: 400;\">.</span></p><p><span style=\"font-weight: 400;\">Consider Cosmic to fuel your digital experiences, and check out our&nbsp;</span><a href=\"https://www.cosmicjs.com/apps?languages=GraphQL\"><span style=\"font-weight: 400;\">GraphQL-driven demos</span></a><span style=\"font-weight: 400;\">.</span></p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"l1r1T5jAlH","value":"5f31a4a9edba7300080e5a34","required":true,"object_type":"authors","object":{"_id":"5f31a4a9edba7300080e5a34","slug":"kaya-ismail","title":"Kaya Ismail","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"hsMOJCxIAj","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D2rdKO4lEL","value":"8579d4e0-db42-11ea-84a8-4b73110d28e6-kaya-ismail.png","url":"https://cdn.cosmicjs.com/8579d4e0-db42-11ea-84a8-4b73110d28e6-kaya-ismail.png","imgix_url":"https://imgix.cosmicjs.com/8579d4e0-db42-11ea-84a8-4b73110d28e6-kaya-ismail.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2020-08-10T19:48:57.679Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-14T17:45:13.790Z","created":"2020-08-10T19:48:57.679Z","status":"published","published_at":"2020-08-10T19:48:57.679Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/8579d4e0-db42-11ea-84a8-4b73110d28e6-kaya-ismail.png"}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"vLSqFkO4j5","value":"<p>Is it time to give REST a rest? GraphQL is a language and database agnostic querying language that might just leave RESt in its dust.<br><br></p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"4Cew1eYbrE","value":"98f04ff0-e1a9-11ea-88aa-0bae7ba3a376-graphql-cms.jpg","url":"https://cdn.cosmicjs.com/98f04ff0-e1a9-11ea-88aa-0bae7ba3a376-graphql-cms.jpg","imgix_url":"https://imgix.cosmicjs.com/98f04ff0-e1a9-11ea-88aa-0bae7ba3a376-graphql-cms.jpg"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"O5O2301ioq","value":"GraphQL is an API querying language that is both language and database agnostic. In this article, we dive into GraphQL benefits, history, and use cases."},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"kdcP4Ycnxi","value":"2020-08-20"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2020-08-13T22:51:13.952Z","created_by":"5f319d8587024b0008b89343","modified_at":"2020-09-16T18:51:51.965Z","created":"2020-08-13T22:51:13.952Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2020-08-20T13:52:21.694Z","thumbnail":"https://imgix.cosmicjs.com/98f04ff0-e1a9-11ea-88aa-0bae7ba3a376-graphql-cms.jpg","metadata":{"author":{"_id":"5f31a4a9edba7300080e5a34","slug":"kaya-ismail","title":"Kaya Ismail","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"hsMOJCxIAj","value":""},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"D2rdKO4lEL","value":"8579d4e0-db42-11ea-84a8-4b73110d28e6-kaya-ismail.png","url":"https://cdn.cosmicjs.com/8579d4e0-db42-11ea-84a8-4b73110d28e6-kaya-ismail.png","imgix_url":"https://imgix.cosmicjs.com/8579d4e0-db42-11ea-84a8-4b73110d28e6-kaya-ismail.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2020-08-10T19:48:57.679Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-14T17:45:13.790Z","created":"2020-08-10T19:48:57.679Z","status":"published","published_at":"2020-08-10T19:48:57.679Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/8579d4e0-db42-11ea-84a8-4b73110d28e6-kaya-ismail.png","metadata":{"username":"","profile_picture":{"url":"https://cdn.cosmicjs.com/8579d4e0-db42-11ea-84a8-4b73110d28e6-kaya-ismail.png","imgix_url":"https://imgix.cosmicjs.com/8579d4e0-db42-11ea-84a8-4b73110d28e6-kaya-ismail.png"}}},"teaser":"<p>Is it time to give REST a rest? GraphQL is a language and database agnostic querying language that might just leave RESt in its dust.<br><br></p>","featured_image":{"url":"https://cdn.cosmicjs.com/98f04ff0-e1a9-11ea-88aa-0bae7ba3a376-graphql-cms.jpg","imgix_url":"https://imgix.cosmicjs.com/98f04ff0-e1a9-11ea-88aa-0bae7ba3a376-graphql-cms.jpg"},"seo_meta_description":"GraphQL is an API querying language that is both language and database agnostic. In this article, we dive into GraphQL benefits, history, and use cases.","published_date":"2020-08-20"}},{"_id":"5be9ca96cc3f3e2ce66ce511","order":24,"slug":"road-redemption-launches-a-marketing-microsite","title":"Road Redemption Launches a Marketing Microsite","content":"<p dir=\"ltr\"><a href=\"http://www.tripwireinteractive.com\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a>, a leading entertainment software developer and publisher founded in 2005, recently launched its corporate website on Cosmic. The Tripwire Interactive team can now easily manage microsite content for each game with a dedicated studio manager as its content creator. This is important as Tripwire is always debuting new marketing campaigns to accompany game launches.&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/88ed0170-e6ab-11e8-93f0-a94cde6f34a7-22181530_1681202368577875_2605572198226217292_o.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><a href=\"http://roadredemption.tripwireinteractive.com\" rel=\"noopener noreferrer\" target=\"_blank\">Road Redemption</a> is the first of many games to have innovative content creator access provided via a headless CMS API that delivers the best of both worlds for cross-functional teams. <a href=\"https://cosmicjs.com/case-studies/tripwire-interactive-builds-a-react-corporate-website\" rel=\"noopener noreferrer\" target=\"_blank\">Read more</a> about how Tripwire Interactive builds apps faster using Cosmic.</p><p dir=\"ltr\"><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team\r\nhas been enjoying the ease of use with the new system.&quot;</p><p><cite>&mdash; Owen Liversidge, Lead Developer</cite></p></blockquote><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1395df80-e6ad-11e8-93f0-a94cde6f34a7-BIJMnRzCcAAcEDC.png-large.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"Road Redemption ","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Tripwire Interactive, a leading entertainment software developer and publisher founded in 2005, recently launched its corporate website on Cosmic. The Tripwire Interactive team can now easily manage microsite content for each game with a dedicated studio manager as its content creator. This is important as Tripwire is always debuting new marketing campaigns to accompany game launches. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png","imgix_url":"https://imgix.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-11-12T18:46:46.371Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-11-13T21:30:43.964Z","metadata":{"company":"Road Redemption ","industry_type":"Gaming","teaser":"Tripwire Interactive, a leading entertainment software developer and publisher founded in 2005, recently launched its corporate website on Cosmic. The Tripwire Interactive team can now easily manage microsite content for each game with a dedicated studio manager as its content creator. This is important as Tripwire is always debuting new marketing campaigns to accompany game launches. \n","logo":{"url":"https://cdn.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png","imgix_url":"https://imgix.cosmicjs.com/a4f8e050-e6ab-11e8-93f0-a94cde6f34a7-64d11670-dddf-11e8-95d7-dfced904ba0c-RR_Logo_Hires_TrasparenrBack-(1).png"}}},{"_id":"59e820f8e1f7ed7b62000a8f","slug":"web-cms","title":"Web CMS","content":"<p>Cosmic JS offers a powerful CMS for any website or web-based application. &nbsp;Install the <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Official Cosmic JS JavaScript Client</a> to integrate content into your app in minutes. Get a feel for Cosmic JS by taking a spin through <a href=\"https://cosmicjs.com/apps\" rel=\"noopener noreferrer\" target=\"_blank\">our apps</a> and check out the tutorials below.</p><h3>Web CMS Articles</h3><p><a href=\"https://cosmicjs.com/why-cms-api\">Why Go API-first?</a><br><a href=\"https://cosmicjs.com/blog/the-cosmic-stack\" rel=\"noopener noreferrer\" target=\"_blank\">The Cosmic Stack</a><br><a href=\"https://cosmicjs.com/blog/three-reasons-why-agencies-should-be-using-a-cms-api\" rel=\"noopener noreferrer\" target=\"_blank\">Three Reasons Why Agencies Should be Using a CMS API</a><br><a href=\"https://cosmicjs.com/blog/managing-users-who-manage-content\" rel=\"noopener noreferrer\" target=\"_blank\">Managing Users Who Manage Content</a><br><a href=\"https://cosmicjs.com/blog/introducing-the-new-content-editor\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Content Editor</a></p><h3>Web CMS Resources</h3><p><a href=\"https://cosmicjs.com/docs/\">Cosmic JS Docs</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\"></a><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official JavaScript Client</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3>Examples</h3><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><code style=' font-size: inherit; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: 0px 0px; text-align: left;'>npm i cosmicjs</code></pre><p>Then in your JavaScript file, get your content:</p><div class=\"fr-embedly    \" data-original-embed=\"<a href='https://runkit.com/tonyspiro/5ad9109c320cd6001286359c' class='embedly-card'></a>\"><a href=\"https://runkit.com/tonyspiro/5ad9109c320cd6001286359c\" class=\"embedly-card\"></a></div>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"H64haGws3S","value":"e9b89b20-b481-11e7-a8f7-d1677c94aba6-web.svg","url":"https://cdn.cosmicjs.com/e9b89b20-b481-11e7-a8f7-d1677c94aba6-web.svg","imgix_url":"https://imgix.cosmicjs.com/e9b89b20-b481-11e7-a8f7-d1677c94aba6-web.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"8lsnRyn9gS","value":"e9b89b20-b481-11e7-a8f7-d1677c94aba6-web.svg","url":"https://cdn.cosmicjs.com/e9b89b20-b481-11e7-a8f7-d1677c94aba6-web.svg","imgix_url":"https://imgix.cosmicjs.com/e9b89b20-b481-11e7-a8f7-d1677c94aba6-web.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"BlWBc77KsQ","value":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"g5LS3Qpgsy","value":"Web"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"AOZMiDuQpo","value":"Cosmic is the best CMS for websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"lE48ffshgo","value":"d0a2f1d0-b481-11e7-a8f7-d1677c94aba6-web.jpg","url":"https://cdn.cosmicjs.com/d0a2f1d0-b481-11e7-a8f7-d1677c94aba6-web.jpg","imgix_url":"https://imgix.cosmicjs.com/d0a2f1d0-b481-11e7-a8f7-d1677c94aba6-web.jpg"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"eQbS4oAjwQ","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"4iLivrW8jI","value":"Best Headless CMS for Web"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"2ypLu3jpfL","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]},{"children":null,"type":"text","title":"Apps Search Term","key":"apps_search_term","id":"0j2XD9Gog1","value":""},{"children":null,"type":"text","title":"Articles Search Term","key":"articles_search_term","id":"8RgqbG1UTr","value":""},{"children":null,"type":"text","title":"Page Overview Title","key":"page_overview_title","id":"gj036836gx4c73fpdjzb","value":""},{"children":null,"type":"html-textarea","title":"Page Overview","key":"page_overview","id":"iSVFzvAn9h","value":""},{"children":null,"type":"html-textarea","title":"SEO Content","key":"seo_content","id":"lcsUSsZiB9","value":""},{"children":[],"type":"repeater","title":"Apps","key":"apps","id":"dkpxmwigd1z8x4ants9f","value":"","repeater_fields":[{"title":"App Slug","key":"app_slug","value":"","type":"text","required":false}]},{"children":[],"type":"repeater","title":"Articles","key":"articles","id":"dwil4bqojngnkej4v85k","value":"","repeater_fields":[{"title":"Article Slug","key":"article_slug","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created":"2017-10-19T03:50:16.379Z","created_at":"2017-10-19T03:50:16.379Z","modified_at":"2021-03-22T17:33:34.823Z","created_by":"5357ef811693be2118000001","modified_by":"5357ef811693be2118000001","status":"published","publish_at":null,"order":25,"published_at":"2021-03-22T17:33:34.823Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/e9b89b20-b481-11e7-a8f7-d1677c94aba6-web.svg","imgix_url":"https://imgix.cosmicjs.com/e9b89b20-b481-11e7-a8f7-d1677c94aba6-web.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/e9b89b20-b481-11e7-a8f7-d1677c94aba6-web.svg","imgix_url":"https://imgix.cosmicjs.com/e9b89b20-b481-11e7-a8f7-d1677c94aba6-web.svg"},"blurb":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Web","seo_description":"Cosmic is the best CMS for websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/d0a2f1d0-b481-11e7-a8f7-d1677c94aba6-web.jpg","imgix_url":"https://imgix.cosmicjs.com/d0a2f1d0-b481-11e7-a8f7-d1677c94aba6-web.jpg"},"code_example":"","seo_title":"Best Headless CMS for Web","videos":[],"apps_search_term":"","articles_search_term":"","page_overview_title":"","page_overview":"","seo_content":"","apps":[],"articles":[]}},{"_id":"5d49e2e57b300f1becd98168","slug":"headless-cms-react","title":"Headless CMS + React","content":"<p>Manage content for your React apps using the Cosmic JS Headless CMS. Teams use the Cosmic JS Headless CMS to model and create content for their React Websites and apps because of its intuitive Headless CMS Dashboard and easy API integration tools. Get started by installing the <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic JS NPM Module</a>.<br><br></p><h3>What is a Headless CMS?</h3><p>Headless CMS Software works by providing non-technical editors with a Dashboard UI to model, create and publish content while providing developers with API tools and resources to integrate content with any website or app. By decoupling content from code, teams create a central content repository that can power all of their content-powered applications.&nbsp;</p>","metafields":[{"value":"Headless CMS + React","key":"solution_name","title":"Solution Name","type":"text","children":null},{"value":"53b8dd50-b9ee-11e9-b724-edc563ff7e5b-68747470733a2f2f636f736d69632d73332e696d6769782e6e65742f37303038616332302d326364612d313165392d383839392d3633386332373531636363352d72656163742d636f736d69632e6a70673f773d31353030.jpg","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/53b8dd50-b9ee-11e9-b724-edc563ff7e5b-68747470733a2f2f636f736d69632d73332e696d6769782e6e65742f37303038616332302d326364612d313165392d383839392d3633386332373531636363352d72656163742d636f736d69632e6a70673f773d31353030.jpg","imgix_url":"https://imgix.cosmicjs.com/53b8dd50-b9ee-11e9-b724-edc563ff7e5b-68747470733a2f2f636f736d69632d73332e696d6769782e6e65742f37303038616332302d326364612d313165392d383839392d3633386332373531636363352d72656163742d636f736d69632e6a70673f773d31353030.jpg"},{"object_type":"case-studies","value":"59f49a7cee2adb545c0005bc,5bd206599dca8d10e941b69b,5bd88cc2dcf8c4248f3ccc4b","key":"case_studies","title":"Case Studies","type":"objects","children":null,"objects":[{"_id":"59f49a7cee2adb545c0005bc","slug":"life-is-good-shares-gratitude","title":"Life is Good Shares Gratitude","content":"<p>The <a href=\"https://www.lifeisgood.com/?utm_source=cosmicjs.com&utm_medium=referral&utm_campaign=gratitudewall\" rel=\"noopener noreferrer\" target=\"_blank\">Life is Good</a> community shares one simple, unifying mission: to spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add &quot;sticky notes&quot; with their name and what they are grateful for to the gratitude board.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7dbdb6b0-c59a-11e7-a9fd-155dbd0b0a76-Optimism_Tree_default.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Gratitude Wall is adapted from the Cosmic <a href=\"https://cosmicjs.com/apps/sticky-notes\" rel=\"noopener noreferrer\" target=\"_blank\">Sticky Notes App</a>, built on <a href=\"https://cosmicjs.com/knowledge-base/react-cms\" rel=\"noopener noreferrer\" target=\"_blank\">React</a>, Redux and <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a>. The Wall is currently running on Heroku and is i-framed into WordPress on its landing page. The Life is Good team also built a simple moderation application so that their team can easily approve or delete User Generated Content as it flows in. They also built client-side moderation during content entry, which checks against a banned list of words and blocks submission.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen Shot 2017-11-16 at 1.59.39 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a robust scaffolding to accept, store, and moderate User Generated Content and display it in a custom web app in real time. With Cosmic, we were able to develop an MVP in a matter of hours and focus our resources on UX and design versus content management. The Cosmic Support Team was extremely helpful throughout the process. We&rsquo;re excited to leverage these tools again for future projects.&rdquo;</p><p><cite>&mdash; Chris Schwab, Front End Engineer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Life is Good","key":"company","title":"Company","type":"text","children":null},{"value":"Ecommerce | Apparel","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-28T14:55:56.103Z","created_by":"5716b504e9c686d006000073","created":"2017-10-28T14:55:56.103Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-07-25T21:53:35.289Z"},{"_id":"5bd206599dca8d10e941b69b","slug":"derive-systems-runs-on-cosmic-js","title":"Derive Systems runs on Cosmic","content":"<p dir=\"ltr\"><a href=\"https://derivesystems.com\" rel=\"noopener noreferrer\" target=\"_blank\">Derive Systems</a>  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. </p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/3d484f50-d881-11e8-a05d-ade53a62d98b-Derive Systems.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">The team at Derive Systems was in search of a headless CMS that would give their developers flexibility out-of-the-box while enabling their content managers to manage content in a familiar and modern CMS Dashboard. They chose Cosmic due to its easy content modeling tools for their Blog, Press, About and Team Sections. Derive now runs a Next.js, React and Express framework that utilizes the Cosmic GraphQL API to deliver its content.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/ea968040-d882-11e8-8793-13fe540ddec9-Derive Systems GIF.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&ldquo;Leveraging the Cosmic GraphQL API allows for easy updates to our news and blog, while keeping payloads small and fast. Integration with Cosmic could not be easier thanks to their great support. We look forward to developing more features on the platform.&rdquo;</p><br><p><cite>&mdash; Dustin Brink, Front End Developer at Derive Systems&nbsp;</cite></p></blockquote>","metafields":[{"value":"Derive Systems","key":"company","title":"Company","type":"text","children":null},{"value":"Automotive","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Derive Systems  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","imgix_url":"https://imgix.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-25T18:07:21.426Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-11-15T14:51:19.007Z"},{"_id":"5bd88cc2dcf8c4248f3ccc4b","slug":"tripwire-interactive-builds-a-react-corporate-website","title":"Tripwire Interactive Builds a React Corporate Website","content":"<p dir=\"ltr\">Tripwire Interactive is an entertainment software developer and publisher founded in 2005 by the award-winning mod team and winners of the 2004 edition of the &ldquo;$1,000,000 Make Something Unreal&rdquo; competition.</p><p dir=\"ltr\"><br><img src=\"https://cosmic-s3.imgix.net/1e7ac570-e363-11e8-8e9f-c7fa3cdb2209-Tripwire.png?w=1200\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"><br></p><p dir=\"ltr\">Gamers want games that grab their attention and will keep them coming back for more. <a href=\"https://www.tripwireinteractive.com/#/#top\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a> has been producing those types of games since the first Red Orchestra mod that won the &quot;Make Something Unreal&quot; competition in 2004. Since then Tripwire has won numerous Multiplayer and FPS Game of the Year awards from top editorial sites and millions have played a Red Orchestra or Killing Floor game, with an average play time of over 40 hours, per player, per game!&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://cosmic-s3.imgix.net/ec4f9940-dc64-11e8-9094-a112ce16fea9-40953819_2090843480937681_5517411053975109632_o.jpg?w=1200&quot;\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"><br></p><p dir=\"ltr\">Historically using an Umbraco system, The Tripwire Interactive team needed an easy way for their marketers to maintain marketing website content for their games&#39; parent brand. Each new game needed a dedicated landing page with marketing content. Blog,\r\nCareer and Press feeds needed to be managed by the marketing team without bottlenecking the developers. The Tripwire Interactive team chose Cosmic as their dynamic content management solution as they built their new corporate website on a modern React\r\nstack.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team\r\nhas been enjoying the ease of use with the new system.&quot;</p><p><cite>&mdash; Owen Liversidge, Lead Developer</cite></p></blockquote><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/297454e0-e387-11e8-89c3-0b430965f348-ezgif-4-5e5da2b90b13.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"Tripwire Interactive","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Gamers want games that grab their attention and will keep them coming back for more. Tripwire Interactive has been producing those types of games since the first Red Orchestra mod that won the \"Make Something Unreal\" competition in 2004. Since then Tripwire has won numerous Multiplayer and FPS Game of the Year awards from top editorial sites and millions have played a Red Orchestra or Killing Floor game, with an average play time of over 40 hours, per player, per game! \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-30T16:54:26.538Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-11-08T20:12:40.566Z"}]},{"repeater_fields":"\"\"\"\"\"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\"\"\"\"\"\"","value":"simple-react-blog","key":"app_slugs","title":"App Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"simple-react-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"appointment-scheduler","type":"text","required":false}]}]},{"repeater_fields":"\"\"\"\"\"\"\"\"\"[{\"title\":\"Slug\",\"key\":\"slug\",\"value\":\"\",\"type\":\"text\",\"required\":false}]\"\"\"\"\"\"\"\"\"","value":"imgix-editor","key":"extension_slugs","title":"Extension Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"imgix-editor","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"export-to-csv","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"mux-videos","type":"text","required":false}]}]},{"key":"testimonial","title":"Testimonial","type":"html-textarea","children":null,"value":"<p>&quot;Cosmic JS allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team has been enjoying the ease of use with the new system.&quot;</p>"},{"value":"Owen Liversidge, Lead Developer at Tripwire Interactive","key":"testimonial_credit","title":"Testimonial Credit","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created":"2019-08-06T20:28:21.350Z","created_at":"2019-07-08T15:03:43.051Z","modified_at":"2019-08-08T15:09:11.487Z","status":"published","locale":null,"published_at":"2019-08-08T15:09:11.487Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"order":25,"metadata":{"solution_name":"Headless CMS + React","image":{"url":"https://cdn.cosmicjs.com/53b8dd50-b9ee-11e9-b724-edc563ff7e5b-68747470733a2f2f636f736d69632d73332e696d6769782e6e65742f37303038616332302d326364612d313165392d383839392d3633386332373531636363352d72656163742d636f736d69632e6a70673f773d31353030.jpg","imgix_url":"https://imgix.cosmicjs.com/53b8dd50-b9ee-11e9-b724-edc563ff7e5b-68747470733a2f2f636f736d69632d73332e696d6769782e6e65742f37303038616332302d326364612d313165392d383839392d3633386332373531636363352d72656163742d636f736d69632e6a70673f773d31353030.jpg"},"case_studies":[{"_id":"59f49a7cee2adb545c0005bc","slug":"life-is-good-shares-gratitude","title":"Life is Good Shares Gratitude","content":"<p>The <a href=\"https://www.lifeisgood.com/?utm_source=cosmicjs.com&utm_medium=referral&utm_campaign=gratitudewall\" rel=\"noopener noreferrer\" target=\"_blank\">Life is Good</a> community shares one simple, unifying mission: to spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add &quot;sticky notes&quot; with their name and what they are grateful for to the gratitude board.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7dbdb6b0-c59a-11e7-a9fd-155dbd0b0a76-Optimism_Tree_default.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Gratitude Wall is adapted from the Cosmic <a href=\"https://cosmicjs.com/apps/sticky-notes\" rel=\"noopener noreferrer\" target=\"_blank\">Sticky Notes App</a>, built on <a href=\"https://cosmicjs.com/knowledge-base/react-cms\" rel=\"noopener noreferrer\" target=\"_blank\">React</a>, Redux and <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a>. The Wall is currently running on Heroku and is i-framed into WordPress on its landing page. The Life is Good team also built a simple moderation application so that their team can easily approve or delete User Generated Content as it flows in. They also built client-side moderation during content entry, which checks against a banned list of words and blocks submission.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen Shot 2017-11-16 at 1.59.39 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a robust scaffolding to accept, store, and moderate User Generated Content and display it in a custom web app in real time. With Cosmic, we were able to develop an MVP in a matter of hours and focus our resources on UX and design versus content management. The Cosmic Support Team was extremely helpful throughout the process. We&rsquo;re excited to leverage these tools again for future projects.&rdquo;</p><p><cite>&mdash; Chris Schwab, Front End Engineer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Life is Good","key":"company","title":"Company","type":"text","children":null},{"value":"Ecommerce | Apparel","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-28T14:55:56.103Z","created_by":"5716b504e9c686d006000073","created":"2017-10-28T14:55:56.103Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-07-25T21:53:35.289Z","metadata":{"company":"Life is Good","industry_type":"Ecommerce | Apparel","teaser":"Spread the power of optimism. In that spirit, the Life is Good team built a Gratitude Wall for some user-generated-thanksgiving. This widget will allow users to add \"sticky notes\" with their name and what they are grateful for to the gratitude board. \n","logo":{"url":"https://cdn.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg","imgix_url":"https://imgix.cosmicjs.com/f4a49350-cbcd-11e7-a6a6-dd74447b4615-life-is-good.jpg"}}},{"_id":"5bd206599dca8d10e941b69b","slug":"derive-systems-runs-on-cosmic-js","title":"Derive Systems runs on Cosmic","content":"<p dir=\"ltr\"><a href=\"https://derivesystems.com\" rel=\"noopener noreferrer\" target=\"_blank\">Derive Systems</a>  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. </p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/3d484f50-d881-11e8-a05d-ade53a62d98b-Derive Systems.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">The team at Derive Systems was in search of a headless CMS that would give their developers flexibility out-of-the-box while enabling their content managers to manage content in a familiar and modern CMS Dashboard. They chose Cosmic due to its easy content modeling tools for their Blog, Press, About and Team Sections. Derive now runs a Next.js, React and Express framework that utilizes the Cosmic GraphQL API to deliver its content.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/ea968040-d882-11e8-8793-13fe540ddec9-Derive Systems GIF.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&ldquo;Leveraging the Cosmic GraphQL API allows for easy updates to our news and blog, while keeping payloads small and fast. Integration with Cosmic could not be easier thanks to their great support. We look forward to developing more features on the platform.&rdquo;</p><br><p><cite>&mdash; Dustin Brink, Front End Developer at Derive Systems&nbsp;</cite></p></blockquote>","metafields":[{"value":"Derive Systems","key":"company","title":"Company","type":"text","children":null},{"value":"Automotive","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Derive Systems  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","imgix_url":"https://imgix.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-25T18:07:21.426Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-11-15T14:51:19.007Z","metadata":{"company":"Derive Systems","industry_type":"Automotive","teaser":"Derive Systems  is a leading automotive technology company with over 2 million software installations powering upgraded experiences for drivers on the road today. Derive  connects vehicles and their engines to the digital world, enabling individuals and fleets to take control and optimize for performance, fuel efficiency, safety, and more. \n","logo":{"url":"https://cdn.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg","imgix_url":"https://imgix.cosmicjs.com/60aac7a0-ded7-11e8-86d0-2998be663226-derive.jpg"}}},{"_id":"5bd88cc2dcf8c4248f3ccc4b","slug":"tripwire-interactive-builds-a-react-corporate-website","title":"Tripwire Interactive Builds a React Corporate Website","content":"<p dir=\"ltr\">Tripwire Interactive is an entertainment software developer and publisher founded in 2005 by the award-winning mod team and winners of the 2004 edition of the &ldquo;$1,000,000 Make Something Unreal&rdquo; competition.</p><p dir=\"ltr\"><br><img src=\"https://cosmic-s3.imgix.net/1e7ac570-e363-11e8-8e9f-c7fa3cdb2209-Tripwire.png?w=1200\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"><br></p><p dir=\"ltr\">Gamers want games that grab their attention and will keep them coming back for more. <a href=\"https://www.tripwireinteractive.com/#/#top\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a> has been producing those types of games since the first Red Orchestra mod that won the &quot;Make Something Unreal&quot; competition in 2004. Since then Tripwire has won numerous Multiplayer and FPS Game of the Year awards from top editorial sites and millions have played a Red Orchestra or Killing Floor game, with an average play time of over 40 hours, per player, per game!&nbsp;</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://cosmic-s3.imgix.net/ec4f9940-dc64-11e8-9094-a112ce16fea9-40953819_2090843480937681_5517411053975109632_o.jpg?w=1200&quot;\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"><br></p><p dir=\"ltr\">Historically using an Umbraco system, The Tripwire Interactive team needed an easy way for their marketers to maintain marketing website content for their games&#39; parent brand. Each new game needed a dedicated landing page with marketing content. Blog,\r\nCareer and Press feeds needed to be managed by the marketing team without bottlenecking the developers. The Tripwire Interactive team chose Cosmic as their dynamic content management solution as they built their new corporate website on a modern React\r\nstack.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team\r\nhas been enjoying the ease of use with the new system.&quot;</p><p><cite>&mdash; Owen Liversidge, Lead Developer</cite></p></blockquote><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/297454e0-e387-11e8-89c3-0b430965f348-ezgif-4-5e5da2b90b13.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"Tripwire Interactive","key":"company","title":"Company","type":"text","children":null},{"value":"Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Gamers want games that grab their attention and will keep them coming back for more. Tripwire Interactive has been producing those types of games since the first Red Orchestra mod that won the \"Make Something Unreal\" competition in 2004. Since then Tripwire has won numerous Multiplayer and FPS Game of the Year awards from top editorial sites and millions have played a Red Orchestra or Killing Floor game, with an average play time of over 40 hours, per player, per game! \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-30T16:54:26.538Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-11-08T20:12:40.566Z","metadata":{"company":"Tripwire Interactive","industry_type":"Gaming","teaser":"Gamers want games that grab their attention and will keep them coming back for more. Tripwire Interactive has been producing those types of games since the first Red Orchestra mod that won the \"Make Something Unreal\" competition in 2004. Since then Tripwire has won numerous Multiplayer and FPS Game of the Year awards from top editorial sites and millions have played a Red Orchestra or Killing Floor game, with an average play time of over 40 hours, per player, per game! \n","logo":{"url":"https://cdn.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/bcc07550-dc64-11e8-a330-792a8fc6e55e-u7wjhcn6_400x400.jpg"}}}],"app_slugs":[{"slug":"simple-react-blog"},{"slug":"appointment-scheduler"}],"extension_slugs":[{"slug":"imgix-editor"},{"slug":"export-to-csv"},{"slug":"mux-videos"}],"testimonial":"<p>&quot;Cosmic JS allowed us to easily integrate a secure and fast back-end API into our React app. Cosmic fit our needs with its simple web-based dashboard so that members of our marketing team can create, edit, and delete new content on the fly. Our team has been enjoying the ease of use with the new system.&quot;</p>","testimonial_credit":"Owen Liversidge, Lead Developer at Tripwire Interactive"}},{"_id":"5f185ed583b9890008323634","order":25,"slug":"headless-commerce","title":"Headless Commerce: Delivering powerful content-driven commerce experiences","content":"<p dir=\"ltr\"><img src=\"https://imgix.cosmicjs.com/a943ec80-ccfb-11ea-b44f-f5c7da208e23-headless-commerce.jpg?w=1000&auto=format\" style=\"width: 100%;\" class=\"fr-fic fr-dib fr-shadow\" data-name=\"headless-commerce.jpg\" alt=\"headless commerce\"></p><p dir=\"ltr\">Headless commerce &mdash; or headless eCommerce &mdash; is an API-first commerce architecture where <strong>the front end and the back end work as two separate systems connected only with APIs.</strong>&nbsp;</p><p dir=\"ltr\">In other words:&nbsp;</p><p dir=\"ltr\">There&#39;s no single &quot;platform&quot; the architecture runs on that powers both the front end and the back end.&nbsp;</p><p dir=\"ltr\">Instead, a host of different solution providers power each.&nbsp;</p><p dir=\"ltr\">The vendors that serve the front end focus on delivering the best-in-class experiences to consumers no matter what screen, channel, or device they&#39;re engaging with: a website, a mobile app, or an IoT device like an interactive kiosk.&nbsp;</p><p dir=\"ltr\">Likewise, on the back end, another set of vendors work to deliver services like billing, inventory management, customer support, cataloging, fulfillment and others.&nbsp;</p><p dir=\"ltr\">And ALL the data orchestration between the vendors happens via APIs.&nbsp;</p><p dir=\"ltr\">Let&#39;s now see in detail what headless commerce is all about. In this guide:</p><ol><li dir=\"ltr\"><a href=\"#demystifying-the-headless-commerce-architecture\">Demystifying the headless commerce architecture</a></li><li dir=\"ltr\"><a href=\"#the-benefits-of-a-headless-commerce-architecture\">The benefits of a headless commerce architecture</a></li><li dir=\"ltr\"><a href=\"#building-a-headless-commerce-architecture-using-all-in-one-ecommerce-platforms-like-shopify\">Building a headless commerce architecture using all-in-one eCommerce platforms like Shopify</a></li><li dir=\"ltr\"><a href=\"#building-a-headless-commerce-architecture-with-traditional-cmses-like-wordpress\">Building a headless commerce architecture with traditional CMSes like WordPress</a></li><li dir=\"ltr\"><a href=\"#building-a-headless-commerce-architecture-using-a-headless-commerce-solution-and-a-headless-cms\">Building a headless commerce architecture using a headless commerce solution (and a headless CMS)</a></li><li dir=\"ltr\"><a href=\"#choosing-the-right-headless-commerce-architecture-for-your-business\">Choosing the right headless commerce architecture for your business</a></li></ol><p dir=\"ltr\">To really understand headless commerce, contrast how a headless commerce architecture works with the workings of a legacy commerce solution &mdash; SAP Commerce, for instance.&nbsp;</p><p dir=\"ltr\">Below, you can see SAP Commerce&#39;s basic architecture. As you can tell, it&#39;s &quot;very SAP.&quot; Sure, if you use it, you&#39;ll be able to use APIs for a host of things and extend functionalities using SAP modules and extensions and so on&hellip; but your system will still stay &quot;very SAP&quot; and you&#39;ll still stay boxed in the platform&#39;s architecture:<br><br></p><p dir=\"ltr\"><img class=\"fr-dib fr-shadow\" src=\"https://cdn.cosmicjs.com/c3d77550-ccd1-11ea-b44f-f5c7da208e23-1595501186650.jpg\" style=\"width: 650px;\" alt=\"Monolithic architecture\"></p><p dir=\"ltr\" style=\"text-align: center;\">Image <a href=\"https://help.sap.com/viewer/b490bb4e85bc42a7aa09d513d0bcb18e/1905/en-US/8b5588d8866910149d4eb5f99c75b6b4.html\" rel=\"noopener noreferrer\" target=\"_blank\">source</a></p><p dir=\"ltr\"><br>With headless commerce, you can break free of these monolithic architectures and the constraints that come with it.</p><h2 dir=\"ltr\" id=\"demystifying-the-headless-commerce-architecture\"><br>Demystifying the headless commerce architecture</h2><p dir=\"ltr\">If a headless commerce architecture is &quot;100 percent headless&quot; &mdash; yes, there&#39;s a degree of how headless a headless commerce architecture can be &mdash; it will work solely via APIs.</p><p dir=\"ltr\">But as Brandon Shaik, a research associate with Forrester, explains, commerce solution providers can be at different levels of &quot;headlessness.&quot;&nbsp;</p><p dir=\"ltr\">Shaik explains that a lot of commerce tech stack vendors loosely call their solutions headless, but instead of an architecture that runs fully on APIs, they only offer varying degrees of DECOUPLING of the front and back ends.<br><br></p><p data-empty=\"true\"><img src=\"https://cdn.cosmicjs.com/35f0e680-ccd2-11ea-b44f-f5c7da208e23-headlessness.png\" style=\"width: 650px;\" class=\"fr-fic fr-dib fr-shadow\" alt=\"Types of headless commerce architectures\"></p><p dir=\"ltr\" style=\"text-align: center;\">Image <a href=\"https://go.forrester.com/blogs/retail-commerce-never-headless/\" rel=\"noopener noreferrer\" target=\"_blank\">source</a></p><p dir=\"ltr\"><br>A lot of vendors don&#39;t actually even need 100% API-driven architectures to go headless and can reap all the benefits of headless commerce with some degree of decoupling.&nbsp;</p><p dir=\"ltr\">But why would a merchant want to decouple their front and back ends in the first place?</p><h2 dir=\"ltr\" id=\"the-benefits-of-a-headless-commerce-architecture\"><br>The benefits of a headless commerce architecture</h2><p dir=\"ltr\">There are many benefits of going with a headless commerce architecture where the front and back ends are decoupled. Here are a few key ones.</p><p dir=\"ltr\"><strong>First, you get a development tech stack that supports speed and performance.</strong> Most headless commerce architectures let you build storefronts using speed-optimized technologies rather than the standard themes eCommerce solutions come with. This results in experiences that load in a flash. You can also choose different solution providers for your back end ops.</p><p dir=\"ltr\"><strong>You also get to deliver faster, native-like shopping experiences everywhere.</strong> One of the biggest reasons driving merchants to go headless is the need for extending native-like experiences everywhere, i.e., on every touchpoint right from your Facebook shop page to a phablet.&nbsp;</p><p dir=\"ltr\"><strong>And even unparalleled experimentation and agility.</strong> Many A/B tests and conversion rate experiments are simple cosmetic changes to what users see. By decoupling the front and back ends, creating the build for such experiments gets a lot faster. Also, you don&#39;t risk breaking the back end as you never &quot;touch&quot; it in decoupled architectures. Launching new features, too, is easy because of this reason, and also because you can build upon any technology that meets your needs.</p><p dir=\"ltr\">Above all these, a headless architecture also lets you power your content experiences with a content management system of your choice and not the one that comes bundled with your eCommerce solution provider. Producing better content faster&hellip; shipping\r\nit sooner&hellip; and showing it seamlessly across different channels with a simple API-based system are what you get with this!</p><p dir=\"ltr\">So what are your options for building a headless commerce architecture that gets you these benefits?&nbsp;</p><p dir=\"ltr\">Well&hellip; if you&#39;re looking to replatform your business and move toward a headless commerce architecture, you essentially have three options:</p><ol><li dir=\"ltr\"><p dir=\"ltr\">Using an all-in-one platform like Shopify.</p></li><li dir=\"ltr\"><p dir=\"ltr\">Using a traditional CMS like WordPress.</p></li><li dir=\"ltr\"><p dir=\"ltr\">Using a headless commerce solution (and a <a href=\"https://www.cosmicjs.com/headless-cms\" rel=\"noopener noreferrer\" target=\"_blank\">headless CMS solution</a>).</p></li></ol><p dir=\"ltr\">Let&rsquo;s explore the details of each.</p><p><br></p><h2 dir=\"ltr\" id=\"building-a-headless-commerce-architecture-using-all-in-one-ecommerce-platforms-like-shopify\">Building a headless commerce architecture using all-in-one eCommerce platforms like Shopify</h2><p dir=\"ltr\">Seeing the need for headless commerce architectures that help vendors deliver immersive and complex multi-channel and multi-touchpoint experiences, many mainstream eCommerce solution providers like Shopify and BigCommerce launched their own headless solutions.</p><p dir=\"ltr\">Cart solution providers, too, started supporting headless setups.</p><p dir=\"ltr\">These solutions let you decouple the front and back ends and choose the technologies you want to use at each end and facilitate the working via APIs.&nbsp;</p><p dir=\"ltr\">Many merchants go with this option for their building headless commerce architectures as they don&#39;t have to start from scratch putting it together. Instead, they get to build upon a robust framework and get full freedom with the technologies they\r\nwant to use for their different functions.</p><p dir=\"ltr\">Here&#39;s a zoomed-in view of how a merchant &mdash; Koala &mdash; realized a headless commerce architecture with Shopify: (Notice that you&#39;ve two visibly decoupled front and back ends.)<br><br></p><p dir=\"ltr\"><img src=\"https://cdn.cosmicjs.com/6a751d40-ccd2-11ea-b44f-f5c7da208e23-shopify-headless.png\" style=\"width: 650px;\" class=\"fr-fic fr-dib fr-shadow\" alt=\"A Shopify headless commerce implementation\"></p><p dir=\"ltr\" style=\"text-align: center;\">Image <a href=\"https://www.shopify.in/plus/customers/koala\" rel=\"noopener noreferrer\" target=\"_blank\">source</a></p><p dir=\"ltr\"><br>Koala shares that it uses as many as EIGHT different solution providers for its back end ops:&nbsp;</p><ul><li dir=\"ltr\"><p dir=\"ltr\">Customer-facing website</p></li><li dir=\"ltr\"><p dir=\"ltr\">Content management</p></li><li dir=\"ltr\"><p dir=\"ltr\">Discounting and promotions</p></li><li dir=\"ltr\"><p dir=\"ltr\">Payments (both online and offline)</p></li><li dir=\"ltr\"><p dir=\"ltr\">Inventory</p></li><li dir=\"ltr\"><p dir=\"ltr\">Logistics (proprietary solution)</p></li><li dir=\"ltr\"><p dir=\"ltr\">Analytics and reporting</p></li></ul><p dir=\"ltr\">Without a headless commerce architecture, Koala would have had to stick to EVERYTHING Shopify.&nbsp;</p><p dir=\"ltr\">Now, you can imagine how the shopping experiences powered by the best-in-class solutions for eight key functions might be better than the ones offered by a legacy solution (no matter how good the legacy solution might be as a whole!).</p><p dir=\"ltr\">Also, note that while Shopify comes with its own CMS, this merchant chose to go with a third-party CMS.&nbsp;</p><p dir=\"ltr\">In fact, many merchants who take this route for their headless commerce architectures go with third-party headless CMSes instead of the default ones.</p><p dir=\"ltr\">And that&#39;s because headless CMSes shine at driving content-driven eCommerce experiences. (More on this below.)&nbsp;</p><p dir=\"ltr\">Here&#39;s another interesting headless commerce architecture that uses BigCommerce but a traditional CMS (WordPress) with it:<br><br></p><p dir=\"ltr\"><img src=\"https://cdn.cosmicjs.com/95d78770-ccd2-11ea-b44f-f5c7da208e23-bigcommerce-headless.png\" style=\"width: 650px;\" class=\"fr-fic fr-dib fr-shadow\" alt=\"A headless commerce implementation using BigCommerce\"></p><p dir=\"ltr\" style=\"text-align: center;\">Image <a href=\"https://medium.com/bigcommerce-developer-blog/matter-makes-waves-with-a-headless-build-using-bigcommerce-for-wordpress-a572bad4bdf8\" rel=\"noopener noreferrer\" target=\"_blank\">source</a></p><h2 dir=\"ltr\" id=\"building-a-headless-commerce-architecture-with-traditional-cmses-like-wordpress\"><br>Building a headless commerce architecture with traditional CMSes like WordPress</h2><p dir=\"ltr\">Seeing the need for headless commerce, even classic CMSes like WordPress, Drupal, Magento and others introduced means for headless execution.</p><p dir=\"ltr\">WordPress and Drupal did it by launching REST APIs.&nbsp;</p><p dir=\"ltr\">Magento, on the other hand, extended support for headless architectures with APIs facilitating integrations, a progressive web app building studio, and support for delivering optimized experiences along multichannel, multi-touchpoint and complex buying\r\njourneys via integration with Adobe Experiences (also, its parent company).</p><p dir=\"ltr\">Below, you can see how a traditional CMS (Drupal) is positioned in a headless execution setup. You have Drupal sitting at the center of the headless tech stack managing and serving content to support the front end for different devices and channels:<br><br></p><p dir=\"ltr\"><img src=\"https://cdn.cosmicjs.com/b92ec530-ccd2-11ea-b44f-f5c7da208e23-headless-drupal.png\" style=\"width: 650px;\" class=\"fr-fic fr-dib fr-shadow\" alt=\"Drupal - decoupled\"></p><p dir=\"ltr\" style=\"text-align: center;\">Image <a href=\"https://www.qed42.com/services/decoupled-drupal\" rel=\"noopener noreferrer\" target=\"_blank\">source</a></p><p dir=\"ltr\"><br>In a traditional setup, though, the back end and the front end would be tightly coupled:</p><p dir=\"ltr\"><img src=\"https://cdn.cosmicjs.com/deceba70-ccd2-11ea-b44f-f5c7da208e23-drupal-decoupled.png\" style=\"width: 650px;\" class=\"fr-fic fr-dib fr-shadow\" alt=\"Drupal - traditional vs. fully decoupled\"></p><p dir=\"ltr\" style=\"text-align: center;\">Image <a href=\"https://www.elevatedthird.com/article/what-headless-drupal\" rel=\"noopener noreferrer\" target=\"_blank\">source</a></p><p dir=\"ltr\"><br>As you can see, more than headlessness, this is simply decoupling of a traditional CMS&#39;s front end from its back end.&nbsp;</p><p dir=\"ltr\">Decoupling a traditional CMS and trying to make it work in a headless environment can be challenging. The diagram shown below explains how you can achieve different degrees of decoupling for your Drupal traditional CMS if you wanted to go headless with it:<br><br></p><p dir=\"ltr\"><img src=\"https://cdn.cosmicjs.com/0295f810-ccd3-11ea-b44f-f5c7da208e23-decoupling-drupal.png\" style=\"width: 650px;\" class=\"fr-fic fr-dib fr-shadow\" alt=\"Decoupling Drupal\"></p><p dir=\"ltr\" style=\"text-align: center;\">Image <a href=\"https://opensenselabs.com/blog/articles/alternatives-decoupled-drupal\" rel=\"noopener noreferrer\" target=\"_blank\">source</a></p><p dir=\"ltr\"><br>As you can tell, this would involve a lot of re-engineering. And even then, the stack&#39;s future development wouldn&#39;t be purely API-based.</p><p dir=\"ltr\">Because traditional CMSes aren&#39;t headless-first by design, many businesses that go headless don&#39;t go with decoupling CMSes like above.&nbsp;</p><p dir=\"ltr\">Instead, the natural choices for headless commerce architectures are headless CMSes.</p><p dir=\"ltr\">A <a href=\"https://www.cosmicjs.com/headless-cms\" rel=\"noopener noreferrer\" target=\"_blank\">headless CMS</a> is designed for API- or microservices-driven headless commerce architectures and offers the headless commerce stack:</p><ul><li dir=\"ltr\"><p dir=\"ltr\">A database for storing the assets at the back end</p></li><li dir=\"ltr\"><p dir=\"ltr\">Functionalities for creating, managing, manipulating, and delivering the content from the back end with support for complex content modeling. (Think personalizations, localization, blazing-fast content deployment, user- and conversion-friendly checkout\r\npages, faster browsing experiences, and easy in-house and user-generated content creation, at scale.)</p></li><li dir=\"ltr\"><p dir=\"ltr\">And APIs that deliver the content to any device or channel or interface (Think desktops, laptops, mobiles, bots, social commerce storefronts, etc.)</p></li></ul><p dir=\"ltr\"><a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a>, our headless CMS, for instance, sits seamlessly at the heart of a headless commerce tech stack and facilitates the content ops &mdash; right from production to delivery.</p><p dir=\"ltr\">If you wanted, you could use Shopify for the commerce part of your business but Cosmic &mdash; with its powerful content management features &mdash; for delivering the content experiences.&nbsp;</p><p dir=\"ltr\">In such a system, you could also build your own personalization engine (with say, Angular) and bake it right into your content management via the CMS&#39;s support for APIs.</p><p dir=\"ltr\">Or, you could use Vue JS for building a clean UI and override what Shopify comes with.&nbsp;</p><p dir=\"ltr\">Because Cosmic is an API-first headless CMS, you could use it with 100 percent custom front and back ends as well.&nbsp;</p><p dir=\"ltr\">But it&#39;s not just the API-powered design that works for a headless CMS when compared to a decoupled one for a headless commerce architecture. Its content possibilities, do, too.&nbsp;</p><p dir=\"ltr\">In fact, many merchants who switched to our headless CMS solution to power the content experiences in their headless commerce architectures came for our content production and rendering capabilities&hellip; and not only because they wanted to use our\r\nAPI to develop a front end with a certain tech stack.&nbsp;</p><h2 dir=\"ltr\" id=\"building-a-headless-commerce-architecture-using-a-headless-commerce-solution-and-a-headless-cms\"><br>Building a headless commerce architecture using a headless commerce solution (and a headless CMS)</h2><p dir=\"ltr\">Most of the traditional eCommerce platforms like Shopify and BigCommerce and CMSes like WordPress launched their headless offerings as the need emerged.&nbsp;</p><p dir=\"ltr\">Natively, none of these platforms were built for supporting headless commerce architectures.</p><p dir=\"ltr\">But 100% headless first commerce solutions like commercetools are.</p><p dir=\"ltr\">These headless-first commerce tech solutions are designed from scratch to support microservices-based architectures that can support seamless and futureproof headless commerce setups at scale.&nbsp;</p><p dir=\"ltr\">Below, you&#39;ve one such headless commerce solution where the front end is separated from the back end. You can see the headless commerce solution supporting practically endless &quot;heads&quot; (web shops, social commerce, car commerce, apps, etc.)\r\non the front end and powering all the core commerce operations like managing product, order, and customer data, maintaining catalogs, etc. on the back end:</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://cdn.cosmicjs.com/319908a0-ccd3-11ea-b44f-f5c7da208e23-headless-commerce-solutions.png\" style=\"width: 650px;\" class=\"fr-fic fr-dib fr-shadow\" alt=\"A headless commerce solution\"></p><p dir=\"ltr\" style=\"text-align: center;\">Image <a href=\"https://commercetools.com/headless-commerce\" rel=\"noopener noreferrer\" target=\"_blank\">source</a></p><p dir=\"ltr\"><br>One thing to note here is that headless commerce solutions are geared more toward the commerce side of the commerce tech stack&hellip; and not so much into content experiences.&nbsp;</p><p dir=\"ltr\">That&#39;s why they offer integrations (API-based, of course!) with a host of headless CMSes with the headless CMSes taking charge of the content experiences.</p><p dir=\"ltr\">As you can conclude from the approaches to a headless commerce architecture discussed above, you basically get to choose between 1) adopting progressive decoupling or 2) going fully headless.&nbsp;</p><p dir=\"ltr\">Both have their place.</p><h2 dir=\"ltr\" id=\"choosing-the-right-headless-commerce-architecture-for-your-business\"><br>Choosing the right headless commerce architecture for your business</h2><p dir=\"ltr\">Many merchants don&#39;t go with fully headless architectures.</p><p dir=\"ltr\">They don&#39;t even need to.</p><p dir=\"ltr\">Instead, they go with a progressive decoupling approach: one that uses a platform like Shopify (or some of the eCommerce engines traditional CMSes come with) for the commerce part and a headless CMS like Cosmic for the content part.</p><p dir=\"ltr\">They end up building <a href=\"https://www.cosmicjs.com/solutions/headless-cms-for-ecommerce-websites\" rel=\"noopener noreferrer\" target=\"_blank\">a bespoke headless eCommerce website</a> powered by an eCommerce platform and a headless CMS.</p><p dir=\"ltr\">The best part is that it still keeps them ahead of the curve.</p><p dir=\"ltr\">Shopify and similar platforms offer state-of-the-art commerce functionalities.&nbsp;</p><p dir=\"ltr\">And a <a href=\"https://www.cosmicjs.com/headless-cms\" rel=\"noopener noreferrer\" target=\"_blank\">headless CMS</a> like Cosmic offers robust content production and rendering capabilities. Think unparalleled possibilities for creating beautiful product landing pages, general product pages, help centers, sales campaign collaterals, and much, much more.&nbsp;</p><p dir=\"ltr\">The commerce + content functionality you get in such a system is as flexible and powerful as you&#39;d like it to be.</p><p dir=\"ltr\">Also, while a headless commerce architecture &mdash; in whatever capacity &mdash; is a natural upgrade for most businesses, it doesn&#39;t come without its challenges. It isn&#39;t for everyone either.&nbsp;</p><p dir=\"ltr\">The question to move to one (whether it&#39;s a purely headless commerce architecture or simply a decoupled one) really comes down to how good you want to get at offering your users personalized, fast, and consistent commerce (shopping) and content experiences\r\nacross their long and winding omnichannel buying journeys&hellip; and improve your lifetime value.</p><p dir=\"ltr\">P.S <em>If you&#39;re considering building a decoupled or headless commerce architecture, check out <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> to power your content ops.</em></p><p dir=\"ltr\">Photo by <a href=\"https://unsplash.com/@servuspaul?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\" rel=\"noopener noreferrer\" target=\"_blank\">Paul Felberbauer</a> on <a href=\"https://unsplash.com/s/photos/online-shopping?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\" rel=\"noopener noreferrer\" target=\"_blank\">Unsplash</a></p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"WEbiN3twqg","value":"5f185e5ba4ce590007de290b","object_type":"authors","object":{"_id":"5f185e5ba4ce590007de290b","slug":"disha","title":"Disha Sharma","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"IbUug3RuT1","value":"disha"},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"QhOaNP5Nw8","value":"f2c65180-d8cd-11ea-8d02-d3e2c968eb26-disha.png","url":"https://cdn.cosmicjs.com/f2c65180-d8cd-11ea-8d02-d3e2c968eb26-disha.png","imgix_url":"https://imgix.cosmicjs.com/f2c65180-d8cd-11ea-8d02-d3e2c968eb26-disha.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2020-07-22T15:42:19.367Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-14T17:45:18.405Z","created":"2020-07-22T15:42:19.367Z","status":"published","published_at":"2020-08-07T16:49:29.355Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"thumbnail":"https://imgix.cosmicjs.com/f2c65180-d8cd-11ea-8d02-d3e2c968eb26-disha.png"}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"uFq1bEynjq","value":"<p>What is headless commerce? What does a headless commerce architecture look like? And how do you build one? And do you need to in the first place? Get all your headless commerce questions answered right here.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"qTuF1XF0Qs","value":"a943ec80-ccfb-11ea-b44f-f5c7da208e23-headless-commerce.jpg","url":"https://cdn.cosmicjs.com/a943ec80-ccfb-11ea-b44f-f5c7da208e23-headless-commerce.jpg","imgix_url":"https://imgix.cosmicjs.com/a943ec80-ccfb-11ea-b44f-f5c7da208e23-headless-commerce.jpg"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"s7KkVoK5sq","value":"Wondering what the headless commerce architecture is all about? Or looking to transition to one? Find out what it is and three ways you can make the move."},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"JPE9hUyKjK","value":"2020-07-28"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2020-07-22T15:44:21.855Z","created_by":"5f0c7f8c268459000855ccff","modified_at":"2020-09-16T18:52:19.373Z","created":"2020-07-22T15:44:21.855Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2020-08-10T16:59:31.208Z","thumbnail":"https://imgix.cosmicjs.com/a943ec80-ccfb-11ea-b44f-f5c7da208e23-headless-commerce.jpg","metadata":{"author":{"_id":"5f185e5ba4ce590007de290b","slug":"disha","title":"Disha Sharma","content":"","metafields":[{"children":null,"type":"text","title":"Username","key":"username","id":"IbUug3RuT1","value":"disha"},{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"QhOaNP5Nw8","value":"f2c65180-d8cd-11ea-8d02-d3e2c968eb26-disha.png","url":"https://cdn.cosmicjs.com/f2c65180-d8cd-11ea-8d02-d3e2c968eb26-disha.png","imgix_url":"https://imgix.cosmicjs.com/f2c65180-d8cd-11ea-8d02-d3e2c968eb26-disha.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2020-07-22T15:42:19.367Z","created_by":"5357ef811693be2118000001","modified_at":"2020-09-14T17:45:18.405Z","created":"2020-07-22T15:42:19.367Z","status":"published","published_at":"2020-08-07T16:49:29.355Z","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"thumbnail":"https://imgix.cosmicjs.com/f2c65180-d8cd-11ea-8d02-d3e2c968eb26-disha.png","metadata":{"username":"disha","profile_picture":{"url":"https://cdn.cosmicjs.com/f2c65180-d8cd-11ea-8d02-d3e2c968eb26-disha.png","imgix_url":"https://imgix.cosmicjs.com/f2c65180-d8cd-11ea-8d02-d3e2c968eb26-disha.png"}}},"teaser":"<p>What is headless commerce? What does a headless commerce architecture look like? And how do you build one? And do you need to in the first place? Get all your headless commerce questions answered right here.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/a943ec80-ccfb-11ea-b44f-f5c7da208e23-headless-commerce.jpg","imgix_url":"https://imgix.cosmicjs.com/a943ec80-ccfb-11ea-b44f-f5c7da208e23-headless-commerce.jpg"},"seo_meta_description":"Wondering what the headless commerce architecture is all about? Or looking to transition to one? Find out what it is and three ways you can make the move.","published_date":"2020-07-28"}},{"_id":"5e45b1bfed7e1d0007159866","order":25,"slug":"gatsby-image-support-and-unpublish-later","title":"Gatsby Image support and Unpublish later","content":"<p>We&#39;re happy to announce the support of <a href=\"https://www.gatsbyjs.org/packages/gatsby-image/\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby Image</a> in <a href=\"https://www.npmjs.com/package/gatsby-source-cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">the Cosmic source plugin</a>. The update enables you to utilize Gatsby&rsquo;s native image processing capabilities to optimize image loading for your sites. In addition to that, we&#39;ve also released a feature that allows content\r\ncreators to unpublish content automatically at a later date and time.</p><h3><br><strong>1. Gatsby Image Plugin Support</strong></h3><p><strong>What you need to know</strong><br>There are no breaking changes, the Gatsby source plugin now has a <code>next</code> tag which you can use to test the new integration.<br><strong>TL;DR</strong><br><a href=\"https://www.npmjs.com/package/gatsby-source-cosmicjs/v/1.0.7-next.2#how-to-use-gatsby-image\" rel=\"noopener noreferrer\" target=\"_blank\">Get the new code</a><br><a href=\"https://github.com/cosmicjs/gatsby-blog-cosmicjs/tree/next\" rel=\"noopener noreferrer\" target=\"_blank\">Download an example</a></p><p><strong>The updates</strong><br>Before this release, you didn&#39;t have the ability to use the awesome <a href=\"https://www.gatsbyjs.org/packages/gatsby-image/\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby Image</a> plugin along with the Cosmic source plugin. But with this release, you now have the option to download selected media from Cosmic to save and cache locally. It will then use <a href=\"https://image-processing.gatsbyjs.org/\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby&rsquo;s native image processing</a> capabilities with advanced image loading techniques to easily optimize image loading for your sites.&nbsp;</p><p>You can install the plugin using &nbsp;<code>npm i gatsby-source-cosmicjs@next</code>.&nbsp;</p><p>Documentation is available <a href=\"https://www.npmjs.com/package/gatsby-source-cosmicjs/v/1.0.7-next.2#how-to-use-gatsby-image\" rel=\"noopener noreferrer\" target=\"_blank\">here</a>. You can also check our Gatsby Blog example <a href=\"https://github.com/cosmicjs/gatsby-blog-cosmicjs/tree/next\" rel=\"noopener noreferrer\" target=\"_blank\">here</a> to look at the usage.</p><p>You can now do queries like this:</p><p><img src=\"https://cdn.cosmicjs.com/23b39b20-5261-11ea-9bde-8b935236d22a-gatsby-image-query.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><em>Note: It is in beta so your feedback is very important!</em></p><p><br></p><h3><strong>2. Unpublish Later</strong></h3><p><strong>What you need to know</strong><br>We had to simplify the layout of the publishing scheduler. If you were already using the publish later feature, you can see the video below to get an idea of what has changed.</p><p><strong>The updates</strong><br>We now provide the ability to unpublish your Objects at a specific day and time in the future. See the video below for details on how to set both scheduled &quot;Publish&quot; and &quot;Unpublish&quot; times. Minute increments have been changed from 15 minute to 5 minute increments to give you even more control of when your content is published and unpublished. To check this out, <a href=\"https://app.cosmicjs.com/login\" rel=\"noopener noreferrer\" target=\"_blank\">login</a> and go to any Object in your Bucket. Then click the calendar icon connected to the &quot;Publish&quot; button.</p><p><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video class=\"fr-draggable fr-fvc fr-dvi\" controls=\"\" src=\"https://cdn.cosmicjs.com/9ad97290-4f3e-11ea-8d67-d99dbac4bb80-pub-unpub.mp4\" style=\"width: 100%;\">Your browser does not support HTML5 video.</video></span></p><p>We hope you enjoy these new features and updates. Any questions or comments? Reach out to us <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">on Twitter</a> and join the conversation on <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">our Slack channel</a>.</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"h7nzqyxqw9","value":"2020-02-17"},{"children":null,"type":"object","title":"Author","key":"author","id":"GqyfS0EMHl","value":"599b30c44f629e3a5900010f","object_type":"authors","object":{"_id":"599b30c44f629e3a5900010f","slug":"jazib-sawar","title":"Jazib Sawar","content":"","metafields":[{"value":"d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","id":"MoCJXLYqwC","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","imgix_url":"https://imgix.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg"},{"value":"jazibsawar","id":"","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-08-21T19:13:08.011Z","created_by":"5357ef811693be2118000001","created":"2017-08-21T19:13:08.011Z","status":"published","modified_at":"2020-09-15T15:41:11.076Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-12-09T16:06:31.900Z","thumbnail":"https://imgix.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg"}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"qPNYl3LT4H","value":"1e1ff970-da33-11e9-80dd-0d9750a7211b-gatsby-cosmic.jpg","url":"https://cdn.cosmicjs.com/1e1ff970-da33-11e9-80dd-0d9750a7211b-gatsby-cosmic.jpg","imgix_url":"https://imgix.cosmicjs.com/1e1ff970-da33-11e9-80dd-0d9750a7211b-gatsby-cosmic.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2019-10-28T20:03:47.995Z","created_by":"5357ef811693be2118000001","modified_at":"2020-08-10T13:59:43.225Z","created":"2020-02-13T20:29:51.395Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-02-18T15:30:06.195Z","unpublish_at":null,"metadata":{"published_date":"2020-02-17","author":{"_id":"599b30c44f629e3a5900010f","slug":"jazib-sawar","title":"Jazib Sawar","content":"","metafields":[{"value":"d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","id":"MoCJXLYqwC","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","imgix_url":"https://imgix.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg"},{"value":"jazibsawar","id":"","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-08-21T19:13:08.011Z","created_by":"5357ef811693be2118000001","created":"2017-08-21T19:13:08.011Z","status":"published","modified_at":"2020-09-15T15:41:11.076Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-12-09T16:06:31.900Z","thumbnail":"https://imgix.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","imgix_url":"https://imgix.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg"},"username":"jazibsawar"}},"featured_image":{"url":"https://cdn.cosmicjs.com/1e1ff970-da33-11e9-80dd-0d9750a7211b-gatsby-cosmic.jpg","imgix_url":"https://imgix.cosmicjs.com/1e1ff970-da33-11e9-80dd-0d9750a7211b-gatsby-cosmic.jpg"}}},{"_id":"5b7459d0c1bc1201371ca1a3","order":25,"slug":"iron-dog-studio-launches-gaming-updates","title":"Iron Dog Studio Launches Gaming Updates ","content":"<p dir=\"ltr\"><a href=\"http://irondogstudio.com\" rel=\"noopener noreferrer\" target=\"_blank\">Iron Dog Studio</a> is the newest slots brand from the <a href=\"https://1x2network.com/#/\" rel=\"noopener noreferrer\" target=\"_blank\">1X2 Network</a>. Focused on high production quality and unique features, Iron Dog Studio is passionate about creating new concepts that will entertain players, and believe that in doing so they will continue to share the fun with operators and players alike.</p><h4 dir=\"ltr\"><br></h4><h4 dir=\"ltr\"><strong>Iron Dog Studio</strong></h4><p dir=\"ltr\"><strong>Built on</strong>: <a href=\"https://cosmicjs.com/knowledge-base/angularjs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Angular</a> | <a href=\"https://cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/a054c090-a237-11e8-8bed-9d1c5ce694f3-image (1).png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Iron Dog Studio team needed a way to easily manage dynamic content for new integrations, press releases and game releases coupled with product information. Adopting Cosmic as their CMS API, the Iron Dog Studio team built scalable content models that satisfied their uses cases for press releases and other time-sensitive updates, all while maintaining a decoupled architecture that empowers each team member to work more efficiently together.&nbsp;</p><p style=\"text-align: center;\"><br></p><p style=\"text-align: center;\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/260fa2a0-a237-11e8-9ce4-bb621a37ac67-image.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&quot;The ability to easily add new press releases and information to our website means we can always keep our clients and properties up to date without any hassle or bottlenecks. We can add and manage our own images, content and files and integrate them with Cosmic simply and efficiently.&rdquo;</p><p><em>- Mary Penrose &ndash; Marketing and Operations Associate</em></p></blockquote>","metafields":[{"value":"Iron Dog Studio","key":"company","title":"Company","type":"text","children":null},{"value":"Online Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Iron Dog Studio is the newest slots brand from the 1X2 Network. Focused on high production quality and unique features, Iron Dog Studio is passionate about creating new concepts that will entertain players, and believe that in doing so they will continue to share the fun with operators and players alike.\n\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"b9862c30-a0ab-11e8-acd1-c1a0a8802a67-HCAsPmbm_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/b9862c30-a0ab-11e8-acd1-c1a0a8802a67-HCAsPmbm_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/b9862c30-a0ab-11e8-acd1-c1a0a8802a67-HCAsPmbm_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-01T22:26:36.367Z","created_by":"5716b504e9c686d006000073","created":"2018-08-15T16:50:24.126Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-08-20T12:44:23.682Z","metadata":{"company":"Iron Dog Studio","industry_type":"Online Gaming","teaser":"Iron Dog Studio is the newest slots brand from the 1X2 Network. Focused on high production quality and unique features, Iron Dog Studio is passionate about creating new concepts that will entertain players, and believe that in doing so they will continue to share the fun with operators and players alike.\n\n\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/b9862c30-a0ab-11e8-acd1-c1a0a8802a67-HCAsPmbm_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/b9862c30-a0ab-11e8-acd1-c1a0a8802a67-HCAsPmbm_400x400.jpg"}}},{"_id":"5e31c94f58d005000821006b","order":26,"slug":"graphql-api-v2-released","title":"GraphQL API v2 Released 🎉","content":"<p>We&#39;re happy to announce the newest version of our <a href=\"https://docs.cosmicjs.com/graphql-api/\" rel=\"noopener noreferrer\" target=\"_blank\">GraphQL API</a>. The new Cosmic GraphQL API v2 includes some great updates and improvements which you can read\r\nabout below.</p><p><br><strong>What you need to know</strong><br>1. You can stay on v1, but updates and fixes will no longer be made to v1.<br>2. v2 includes mostly additions, but one breaking change to the <code>getObjects</code>&nbsp; and <code>getMedia</code>&nbsp; queries to enable pagination.<br><br><br><strong>Playground</strong><br>Demo for yourself in the playground. You can use the &quot;Schema&quot; and &quot;Docs&quot; right-side tabs to explore the Model and Queries.<br><br></p><p><iframe id=\"graphql-iframe\" src=\"https://cosmic-graphql-playground.netlify.com/?endpoint=https%3A%2F%2Fgraphql.cosmicjs.com%2Fv2&query=%7B%0A%20%20getObjects%28%0A%20%20%20%20bucket_slug%3A%20%22simple-react-blog%22%2C%0A%20%20%20%20input%3A%20%7B%20%0A%20%20%20%20%20%20type%3A%20%22posts%22%0A%20%20%20%20%7D%0A%20%20%29%20%7B%0A%20%20%20%20objects%20%7B%0A%20%20%20%20%20%20title%0A%20%20%20%20%09slug%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D\" frameborder=\"0\" style=\"width: 100%; height: 470px;\"></iframe></p><p style=\"text-align: center;\"><a href=\"https://cosmic-graphql-playground.netlify.com/?endpoint=https%3A%2F%2Fgraphql.cosmicjs.com%2Fv2&query=%7B%0A%20%20getObjects%28%0A%20%20%20%20bucket_slug%3A%20%22simple-react-blog%22%2C%0A%20%20%20%20input%3A%20%7B%20%0A%20%20%20%20%20%20type%3A%20%22posts%22%0A%20%20%20%20%7D%0A%20%20%29%20%7B%0A%20%20%20%20objects%20%7B%0A%20%20%20%20%20%20title%0A%20%20%20%20%09slug%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D\" rel=\"noopener noreferrer\" target=\"_blank\">View full page playground</a></p><h3><br>Included in v2</h3><p><strong>1. Pagination support</strong><br>You can now access the <code>total</code> and <code>limit</code>&nbsp; properties from the API response. This gives you the ability to do pagination with the GraphQL API, which was previously not possible.<br><br><iframe id=\"graphql-iframe\" src=\"https://cosmic-graphql-playground.netlify.com/?endpoint=https%3A%2F%2Fgraphql.cosmicjs.com%2Fv2&query=%7B%0A%20%20getObjects%28%0A%20%20%20%20bucket_slug%3A%20%22simple-react-blog%22%2C%0A%20%20%20%20input%3A%20%7B%20%0A%20%20%20%20%20%20type%3A%20%22posts%22%2C%0A%20%20%20%20%20%20skip%3A%201%0A%20%20%20%20%7D%0A%20%20%29%20%7B%0A%20%20%20%20objects%20%7B%0A%20%20%20%20%20%20title%0A%20%20%20%20%09slug%0A%20%20%20%20%7D%0A%20%20%20%20total%0A%20%20%7D%0A%7D\" frameborder=\"0\" style=\"width: 100%; height: 470px;\"></iframe></p><p style=\"text-align: center;\"><a href=\"https://cosmic-graphql-playground.netlify.com/?endpoint=https%3A%2F%2Fgraphql.cosmicjs.com%2Fv2&query=%7B%0A%20%20getObjects%28%0A%20%20%20%20bucket_slug%3A%20%22simple-react-blog%22%2C%0A%20%20%20%20input%3A%20%7B%20%0A%20%20%20%20%20%20type%3A%20%22posts%22%2C%0A%20%20%20%20%20%20skip%3A%201%0A%20%20%20%20%7D%0A%20%20%29%20%7B%0A%20%20%20%20objects%20%7B%0A%20%20%20%20%20%20title%0A%20%20%20%20%09slug%0A%20%20%20%20%7D%0A%20%20%20%20total%0A%20%20%7D%0A%7D\" rel=\"noopener noreferrer\" target=\"_blank\">View full page playground</a></p><p data-empty=\"true\"><br></p><p><strong>2. New Queries and Mutations</strong><br>You can use the GraphQL API to get revisions from an Object as well as add new revisions without affecting the current published state of your Object.</p><p><code>getObjectRevisions</code><br><code>addObjectRevision</code></p><p><br><iframe id=\"graphql-iframe\" src=\"https://cosmic-graphql-playground.netlify.com/?endpoint=https%3A%2F%2Fgraphql.cosmicjs.com%2Fv2&query=%7B%0A%20%20getObjectRevisions%28%0A%20%20%20%20bucket_slug%3A%20%22simple-react-blog%22%2C%0A%20%20%20%20object_slug%3A%20%22another-wonderful-blog-post-about-earth%22%0A%20%20%29%20%7B%0A%20%20%20%20revisions%20%7B%0A%20%20%20%20%20%20title%0A%20%20%20%20%09slug%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D\" frameborder=\"0\" style=\"width: 100%; height: 470px;\"></iframe></p><p style=\"text-align: center;\"><a href=\"https://cosmic-graphql-playground.netlify.com/?endpoint=https%3A%2F%2Fgraphql.cosmicjs.com%2Fv2&query=%7B%0A%20%20getObjectRevisions%28%0A%20%20%20%20bucket_slug%3A%20%22simple-react-blog%22%2C%0A%20%20%20%20object_slug%3A%20%22another-wonderful-blog-post-about-earth%22%0A%20%20%29%20%7B%0A%20%20%20%20revisions%20%7B%0A%20%20%20%20%20%20title%0A%20%20%20%20%09slug%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D\" rel=\"noopener noreferrer\" target=\"_blank\">View full page playground</a></p><p><br><strong>3. Deprecated Queries Removed</strong><br>The following deprecated queries from v1 have been removed:<br><code>object</code><br><code>objects</code><br><code>objectsByType</code></p><p data-empty=\"true\"><br></p><p><strong>4. Response Format Changes</strong><br>To allow for the total and limit response, one breaking change had to be made. The response format for getObjects now follows the following format with all Objects moved into a second level <code>objects</code>.</p><p><iframe id=\"graphql-iframe\" src=\"https://cosmic-graphql-playground.netlify.com/?endpoint=https%3A%2F%2Fgraphql.cosmicjs.com%2Fv2&query=%7B%0A%20%20getObjects%28%0A%20%20%20%20bucket_slug%3A%20%22simple-react-blog%22%2C%0A%20%20%20%20input%3A%20%7B%20%0A%20%20%20%20%20%20type%3A%20%22posts%22%0A%20%20%20%20%7D%0A%20%20%29%20%7B%0A%20%20%20%20objects%20%7B%0A%20%20%20%20%20%20title%0A%20%20%20%20%09slug%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D\" frameborder=\"0\" style=\"width: 100%; height: 470px;\"></iframe></p><p style=\"text-align: center;\"><a href=\"https://cosmic-graphql-playground.netlify.com/?endpoint=https%3A%2F%2Fgraphql.cosmicjs.com%2Fv2&query=%7B%0A%20%20getObjects%28%0A%20%20%20%20bucket_slug%3A%20%22simple-react-blog%22%2C%0A%20%20%20%20input%3A%20%7B%20%0A%20%20%20%20%20%20type%3A%20%22posts%22%0A%20%20%20%20%7D%0A%20%20%29%20%7B%0A%20%20%20%20objects%20%7B%0A%20%20%20%20%20%20title%0A%20%20%20%20%09slug%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D\" rel=\"noopener noreferrer\" target=\"_blank\">View full page playground</a></p><p><br>And here&#39;s the old way for reference:</p><p><iframe id=\"graphql-iframe\" src=\"https://cosmic-graphql-playground.netlify.com/?endpoint=https%3A%2F%2Fgraphql.cosmicjs.com%2Fv1&query=%7B%0A%20%20getObjects%28%0A%20%20%20%20bucket_slug%3A%20%22simple-react-blog%22%2C%0A%20%20%20%20input%3A%20%7B%20%0A%20%20%20%20%20%20type%3A%20%22posts%22%0A%20%20%20%20%7D%0A%20%20%29%20%7B%0A%20%20%20%20title%0A%20%20%20%20slug%20%20%20%20%0A%20%20%7D%0A%7D\" frameborder=\"0\" style=\"width: 100%; height: 470px;\"></iframe></p><p style=\"text-align: center;\"><a href=\"https://cosmic-graphql-playground.netlify.com/?endpoint=https%3A%2F%2Fgraphql.cosmicjs.com%2Fv1&query=%7B%0A%20%20getObjects%28%0A%20%20%20%20bucket_slug%3A%20%22simple-react-blog%22%2C%0A%20%20%20%20input%3A%20%7B%20%0A%20%20%20%20%20%20type%3A%20%22posts%22%0A%20%20%20%20%7D%0A%20%20%29%20%7B%0A%20%20%20%20title%0A%20%20%20%20slug%20%20%20%20%0A%20%20%7D%0A%7D\" rel=\"noopener noreferrer\" target=\"_blank\">View full page playground</a></p><p><br></p><p><strong>5. Search and Filter Options</strong><br>One of the most loved new features in the REST API is <a href=\"https://www.cosmicjs.com/changelog/filters-and-smart-views\" rel=\"noopener noreferrer\" target=\"_blank\">filtering and searching by metadata</a>. This is now available in the GraphQL API. For\r\nexample, to get Objects that by a certain author. You can do this:</p><p><iframe id=\"graphql-iframe\" src=\"https://cosmic-graphql-playground.netlify.com/?endpoint=https%3A%2F%2Fgraphql.cosmicjs.com%2Fv2&query=%7B%0A%20%20getObjects%28%0A%20%20%20%20bucket_slug%3A%20%22simple-react-blog%22%2C%0A%20%20%20%20input%3A%20%7B%20%0A%20%20%20%20%20%20type%3A%20%22posts%22%2C%0A%20%20%20%20%20%20metadata%3A%20%7B%0A%20%20%20%20%20%20%20%20author%3A%20%2259df6dd5fd8d731b21001190%22%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%29%20%7B%0A%20%20%20%20objects%20%7B%0A%20%20%20%20%09title%0A%20%20%20%20%09slug%0A%20%20%20%20%7D%0A%20%20%20%20total%0A%20%20%7D%0A%7D\" frameborder=\"0\" style=\"width: 100%; height: 470px;\"></iframe></p><p style=\"text-align: center;\"><a href=\"https://cosmic-graphql-playground.netlify.com/?endpoint=https%3A%2F%2Fgraphql.cosmicjs.com%2Fv2&query=%7B%0A%20%20getObjects%28%0A%20%20%20%20bucket_slug%3A%20%22simple-react-blog%22%2C%0A%20%20%20%20input%3A%20%7B%20%0A%20%20%20%20%20%20type%3A%20%22posts%22%2C%0A%20%20%20%20%20%20metadata%3A%20%7B%0A%20%20%20%20%20%20%20%20author%3A%20%2259df6dd5fd8d731b21001190%22%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%29%20%7B%0A%20%20%20%20objects%20%7B%0A%20%20%20%20%09title%0A%20%20%20%20%09slug%0A%20%20%20%20%7D%0A%20%20%20%20total%0A%20%20%7D%0A%7D\" rel=\"noopener noreferrer\" target=\"_blank\">View full page playground</a></p><p><br></p><p>Read more about these updates in the <a href=\"https://docs.cosmicjs.com/graphql-api/\" rel=\"noopener noreferrer\" target=\"_blank\">GraphQL documentation</a>. We hope you enjoy these new features with the latest version of the GraphQL API. Any questions or comments? Reach out to us <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">on Twitter</a> and join the conversation on <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">our Slack channel</a>.</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"BQPosxvX5s","value":"2020-02-04"},{"children":null,"type":"object","title":"Author","key":"author","id":"zdR2ui3bG7","value":"5768b253163172890e00002c","object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"64iVZ3v7FJ","value":"9ef206c0-46e8-11ea-b446-ab47a2e88c3b-cosmic-graphql.jpg","url":"https://cdn.cosmicjs.com/9ef206c0-46e8-11ea-b446-ab47a2e88c3b-cosmic-graphql.jpg","imgix_url":"https://imgix.cosmicjs.com/9ef206c0-46e8-11ea-b446-ab47a2e88c3b-cosmic-graphql.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2020-01-29T18:05:03.683Z","created_by":"5357ef811693be2118000001","modified_at":"2020-08-10T13:59:43.225Z","created":"2020-01-29T18:05:03.683Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-02-04T14:45:54.053Z","metadata":{"published_date":"2020-02-04","author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":"https://cdn.cosmicjs.com/9ef206c0-46e8-11ea-b446-ab47a2e88c3b-cosmic-graphql.jpg","imgix_url":"https://imgix.cosmicjs.com/9ef206c0-46e8-11ea-b446-ab47a2e88c3b-cosmic-graphql.jpg"}}},{"_id":"59f21a4d34dbbd042a000337","order":26,"slug":"architectnow-builds-a-vendor-search-engine","title":"ArchitectNow Builds a Vendor Search Engine","content":"<p><a href=\"http://architectnow.net\" rel=\"noopener noreferrer\" target=\"_blank\">ArchitectNow</a> is a custom software development firm based out of St. Louis, MO. &nbsp;They specialize in helping customers design, build, and launch rich web and mobile applications across a variety of industries. &nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/16fb63d0-008e-11e8-b0b9-f73a7cf3003d-image005.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Recently ArchitectNow partnered with <a href=\"https://www.vendorsurf.com\" rel=\"noopener noreferrer\" target=\"_blank\">VendorSurf</a> to implement a powerful mortgage industry vendor search engine. &nbsp;As with many of ArchitectNow&rsquo;s custom applications, the project team quickly identified the need for the customer to manage specific types of content for use in the application. &nbsp;Rather than custom build a pseudo-content management system (as they have done many times in the past) they quickly leveraged <a href=\"https://cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> to provide VendorSurf with the ability to self-manage their own dynamic content. &nbsp;&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/207d78d0-008e-11e8-af19-0724d1323f1b-logo.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The ArchitectNow development team was able to quickly integrate the Cosmic functionality into their own rich Angular application thanks to the easy-to-use <a href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic JavaScript library</a>. &nbsp;They also tightly integrated the VendorSurf server-side API and back-office infrastructure (written in .NET and hosted within Microsoft&rsquo;s Azure environment) with Cosmic via the Cosmic <a href=\"https://cosmicjs.github.io/rest-api-docs/\" rel=\"noopener noreferrer\" target=\"_blank\">REST API&rsquo;s</a>. &nbsp;By being able to integrate both directly from the browser (via JavaScript) as well as from the server (via REST) the ArchitectNow team was able to provide VendorSurf with a streamline workflow for managing custom content.</p><p><br></p><blockquote><p>&quot;ArchitectNow is already planning on how to leverage Cosmic to help future customers streamline the management of their custom content while still leveraging the benefits of a fully custom-built software application.&quot;</p><p><cite>&mdash; Kevin Grossnicklaus, Principal&nbsp;</cite></p></blockquote>","metafields":[{"value":"ArchitectNow","key":"company","title":"Company","type":"text","children":null},{"value":"Software Development","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"ArchitectNow is a custom software development firm based out of St. Louis, MO.  They specialize in helping customers design, build, and launch rich web and mobile applications across a variety of industries.  \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"1d868fb0-007d-11e8-8590-4764eecfa402-image005.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/1d868fb0-007d-11e8-8590-4764eecfa402-image005.png","imgix_url":"https://imgix.cosmicjs.com/1d868fb0-007d-11e8-8590-4764eecfa402-image005.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-26T17:24:29.774Z","created_by":"5716b504e9c686d006000073","created":"2017-10-26T17:24:29.774Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"metadata":{"company":"ArchitectNow","industry_type":"Software Development","teaser":"ArchitectNow is a custom software development firm based out of St. Louis, MO.  They specialize in helping customers design, build, and launch rich web and mobile applications across a variety of industries.  \n","logo":{"url":"https://cdn.cosmicjs.com/1d868fb0-007d-11e8-8590-4764eecfa402-image005.png","imgix_url":"https://imgix.cosmicjs.com/1d868fb0-007d-11e8-8590-4764eecfa402-image005.png"}}},{"_id":"5d4c4e10bb97e152424aca52","order":26,"slug":"headless-cms-graphql","title":"Headless CMS + GraphQL","content":"<p>Manage content for your GraphQL apps using the Cosmic JS Headless CMS and GraphQL API. Teams use the Cosmic JS Headless CMS to model and create content for their GraphQL websites and apps because of its intuitive Headless CMS Dashboard and easy API integration tools. Get started by installing the <a href=\"https://www.npmjs.com/package/cosmicjs\">Cosmic JS NPM Module</a>.<br><br></p><h3>What is a Headless CMS?</h3><p>Headless CMS Software works by providing non-technical editors with a Dashboard UI to model, create and publish content while providing developers with API tools and resources to integrate content with any website or app. By decoupling content from code, teams create a central content repository that can power all of their content-powered applications.&nbsp;</p>","metafields":[{"value":"Headless CMS + GraphQL","key":"solution_name","title":"Solution Name","type":"text","children":null},{"id":"file-pxfl79hoauanmhzl8llk","value":"ceb0da10-b9fa-11e9-898a-35d13190571c-Artboard-2.png","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/ceb0da10-b9fa-11e9-898a-35d13190571c-Artboard-2.png","imgix_url":"https://imgix.cosmicjs.com/ceb0da10-b9fa-11e9-898a-35d13190571c-Artboard-2.png"},{"object_type":"case-studies","value":"596663e8880d69fb6c000194,5a2455620cb0e3291c00002e,59f102cbd4de657279002f97","key":"case_studies","title":"Case Studies","type":"objects","children":null,"objects":[{"_id":"596663e8880d69fb6c000194","slug":"joblift-elevates-their-stack","title":"Joblift Elevates Their Stack ","content":"<p>In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, <a href=\"https://joblift.co.uk\" rel=\"noopener noreferrer\" target=\"_blank\">Joblift</a> seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/16ac66c0-03d7-11e9-a9c3-c1326db90b81-DrzF-2BX0AA0WTE.jpg-large.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Joblift manages localized content to serve Job, Press and Blog feeds to its various markets, including the UK, Netherlands and Germany. Easy user roles and permissions equip their team with the tools they need to seamlessly run a global organization.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic has completely sped up our ability to upload our content easily and efficiently. With Cosmic we now have a smooth process for uploading press releases which reflects the quality content on our website.&rdquo;</p><p><cite>&mdash; Ashleigh Grady, Content Editor and Marketing Manager</cite></p></blockquote>","metafields":[{"value":"Joblift","key":"company","title":"Company","type":"text","children":null},{"value":"Career Services","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T18:01:12.194Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-12-19T21:44:38.361Z"},{"_id":"5a2455620cb0e3291c00002e","slug":"acculevel-deploys-a-blog","title":"Acculevel Deploys a Blog","content":"<p dir=\"ltr\"><a href=\"https://acculevel.com\" rel=\"noopener noreferrer\" target=\"_blank\">Acculevel</a> is Your Foundation Expert. Serving the Midwest United States for the last 20 years, Acculevel knows what it means to serve and do a job right. Customer retention, reviews and loyalty are the name of their game, so to optimize these efforts and keep customers engaged and informed, Acculevel is scaling up their digital presence through its upcoming website, a new mobile application and more. Led by a new Chief Technology Officer overseeing developers and content editors, here&#39;s how Acculevel is ensuring their own foundation is solid.<br><br>Mired in an installed <a href=\"https://hackernoon.com/cosmic-js-vs-wordpress-668608df4e22\" rel=\"noopener noreferrer\" target=\"_blank\">WordPress</a> system was leaving Acculevel without the flexibility needed to nimbly build and publish content campaigns to engage with customers. Acculevel&#39;s tech team is currently building out a new zippy website built on a <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a> stack, complete with API integrations for ACH Authentication (Plaid) and Payment Gateway (Stripe). Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editors to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/516cb890-daa8-11e7-92aa-b5a1b0875421-21761700_1534030483286380_3096937493413845441_n.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a seamless on-boarding experience for creating a Bucket to manage blog content for our growing organization. We needed a programming-language agnostic API to manage content both within our existing WordPress website as well as within our new Node.js web application. Cosmic fit the bill perfectly with its simple Object schema and powerful Metafields. With Cosmic, content is just data and you can pull it however you&#39;d like, wherever you like, allowing us &nbsp;to build new tools in the future such as survey tools, employee forums and more.&rdquo;</p><p><cite>&mdash; Dylan Marsh, Chief Technology Officer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Acculevel ","key":"company","title":"Company","type":"text","children":null},{"value":"Construction","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editor to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","imgix_url":"https://imgix.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-12-03T19:49:54.515Z","created_by":"5716b504e9c686d006000073","created":"2017-12-03T19:49:54.515Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null},{"_id":"59f102cbd4de657279002f97","slug":"datalyze-solutions-adds-blog-and-job-feeds","title":"Datalyze Solutions Adds a Blog Feed","content":"<p>Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier. That&#39;s why <a href=\"https://www.datalyze-solutions.com\" rel=\"noopener noreferrer\" target=\"_blank\">Datalyze Solutions</a> chooses Cosmic to deliver its content from the cloud for its Blog feeds.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/564c8f40-ca4d-11e7-a5c4-d31978c51f26-Screen Shot 2017-11-15 at 3.38.13 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic has been in use at Datalyze Solutions for more than one and a half years. Cosmic has become a critically important tool for us to publish blog posts quickly and easily. This way, our customers and partners can stay informed about the latest news from our company and other industry-relevant information. Cosmic offers exactly the flexibility and features we really need as content editors!&quot;</p><p>&mdash; Carolin Bauer, Content Editor and Marketing Manager</p></blockquote>","metafields":[{"value":"Datalyze Solutions","key":"company","title":"Company","type":"text","children":null},{"value":"Internet","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier.","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","imgix_url":"https://imgix.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-25T21:31:55.033Z","created_by":"5716b504e9c686d006000073","created":"2017-10-25T21:31:55.033Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null}]},{"repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}],"value":"portfolio-website","key":"app_slugs","title":"App Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"portfolio-website","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"apollo-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"react-graphql-blog","type":"text","required":false}]}]},{"repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}],"value":"wordpress-importer","key":"extension_slugs","title":"Extension SLugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"wordpress-importer","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"export-to-csv","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"unsplash-photos","type":"text","required":false}]}]},{"value":"\"Leveraging the Cosmic JS GraphQL API allows for easy updates to our news and blog, while keeping payloads small and fast. Integration with Cosmic JS could not be easier thanks to their great support. We look forward to developing more features on the platform.”\n","key":"testimonial","title":"Testimonial","type":"textarea","children":null},{"value":"Dustin Brink, Front End Developer at Derive Systems ","key":"testimonial_credit","title":"Testimonial Credit","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created_at":"2019-08-05T20:18:17.006Z","created_by":"5716b504e9c686d006000073","modified_at":"2019-08-08T16:37:29.723Z","created":"2019-08-08T16:30:08.539Z","status":"published","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-08-08T16:37:29.723Z","metadata":{"solution_name":"Headless CMS + GraphQL","image":{"url":"https://cdn.cosmicjs.com/ceb0da10-b9fa-11e9-898a-35d13190571c-Artboard-2.png","imgix_url":"https://imgix.cosmicjs.com/ceb0da10-b9fa-11e9-898a-35d13190571c-Artboard-2.png"},"case_studies":[{"_id":"596663e8880d69fb6c000194","slug":"joblift-elevates-their-stack","title":"Joblift Elevates Their Stack ","content":"<p>In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, <a href=\"https://joblift.co.uk\" rel=\"noopener noreferrer\" target=\"_blank\">Joblift</a> seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/16ac66c0-03d7-11e9-a9c3-c1326db90b81-DrzF-2BX0AA0WTE.jpg-large.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Joblift manages localized content to serve Job, Press and Blog feeds to its various markets, including the UK, Netherlands and Germany. Easy user roles and permissions equip their team with the tools they need to seamlessly run a global organization.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic has completely sped up our ability to upload our content easily and efficiently. With Cosmic we now have a smooth process for uploading press releases which reflects the quality content on our website.&rdquo;</p><p><cite>&mdash; Ashleigh Grady, Content Editor and Marketing Manager</cite></p></blockquote>","metafields":[{"value":"Joblift","key":"company","title":"Company","type":"text","children":null},{"value":"Career Services","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T18:01:12.194Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-12-19T21:44:38.361Z","metadata":{"company":"Joblift","industry_type":"Career Services","teaser":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","logo":{"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}}},{"_id":"5a2455620cb0e3291c00002e","slug":"acculevel-deploys-a-blog","title":"Acculevel Deploys a Blog","content":"<p dir=\"ltr\"><a href=\"https://acculevel.com\" rel=\"noopener noreferrer\" target=\"_blank\">Acculevel</a> is Your Foundation Expert. Serving the Midwest United States for the last 20 years, Acculevel knows what it means to serve and do a job right. Customer retention, reviews and loyalty are the name of their game, so to optimize these efforts and keep customers engaged and informed, Acculevel is scaling up their digital presence through its upcoming website, a new mobile application and more. Led by a new Chief Technology Officer overseeing developers and content editors, here&#39;s how Acculevel is ensuring their own foundation is solid.<br><br>Mired in an installed <a href=\"https://hackernoon.com/cosmic-js-vs-wordpress-668608df4e22\" rel=\"noopener noreferrer\" target=\"_blank\">WordPress</a> system was leaving Acculevel without the flexibility needed to nimbly build and publish content campaigns to engage with customers. Acculevel&#39;s tech team is currently building out a new zippy website built on a <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a> stack, complete with API integrations for ACH Authentication (Plaid) and Payment Gateway (Stripe). Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editors to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/516cb890-daa8-11e7-92aa-b5a1b0875421-21761700_1534030483286380_3096937493413845441_n.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a seamless on-boarding experience for creating a Bucket to manage blog content for our growing organization. We needed a programming-language agnostic API to manage content both within our existing WordPress website as well as within our new Node.js web application. Cosmic fit the bill perfectly with its simple Object schema and powerful Metafields. With Cosmic, content is just data and you can pull it however you&#39;d like, wherever you like, allowing us &nbsp;to build new tools in the future such as survey tools, employee forums and more.&rdquo;</p><p><cite>&mdash; Dylan Marsh, Chief Technology Officer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Acculevel ","key":"company","title":"Company","type":"text","children":null},{"value":"Construction","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editor to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","imgix_url":"https://imgix.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-12-03T19:49:54.515Z","created_by":"5716b504e9c686d006000073","created":"2017-12-03T19:49:54.515Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"company":"Acculevel ","industry_type":"Construction","teaser":"Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editor to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","imgix_url":"https://imgix.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg"}}},{"_id":"59f102cbd4de657279002f97","slug":"datalyze-solutions-adds-blog-and-job-feeds","title":"Datalyze Solutions Adds a Blog Feed","content":"<p>Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier. That&#39;s why <a href=\"https://www.datalyze-solutions.com\" rel=\"noopener noreferrer\" target=\"_blank\">Datalyze Solutions</a> chooses Cosmic to deliver its content from the cloud for its Blog feeds.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/564c8f40-ca4d-11e7-a5c4-d31978c51f26-Screen Shot 2017-11-15 at 3.38.13 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic has been in use at Datalyze Solutions for more than one and a half years. Cosmic has become a critically important tool for us to publish blog posts quickly and easily. This way, our customers and partners can stay informed about the latest news from our company and other industry-relevant information. Cosmic offers exactly the flexibility and features we really need as content editors!&quot;</p><p>&mdash; Carolin Bauer, Content Editor and Marketing Manager</p></blockquote>","metafields":[{"value":"Datalyze Solutions","key":"company","title":"Company","type":"text","children":null},{"value":"Internet","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier.","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","imgix_url":"https://imgix.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-25T21:31:55.033Z","created_by":"5716b504e9c686d006000073","created":"2017-10-25T21:31:55.033Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"metadata":{"company":"Datalyze Solutions","industry_type":"Internet","teaser":"Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier.","logo":{"url":"https://cdn.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","imgix_url":"https://imgix.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png"}}}],"app_slugs":[{"slug":"portfolio-website"},{"slug":"apollo-blog"},{"slug":"react-graphql-blog"}],"extension_slugs":[{"slug":"wordpress-importer"},{"slug":"export-to-csv"},{"slug":"unsplash-photos"}],"testimonial":"\"Leveraging the Cosmic JS GraphQL API allows for easy updates to our news and blog, while keeping payloads small and fast. Integration with Cosmic JS could not be easier thanks to their great support. We look forward to developing more features on the platform.”\n","testimonial_credit":"Dustin Brink, Front End Developer at Derive Systems "}},{"_id":"5eb04772db0ee6000887f10e","order":26,"slug":"brand-and-design-updates","title":"Brand and Design Updates","content":"<p>We&#39;re excited to announce some big updates to our branding and website design.<br><br></p><p><strong>Brand Update</strong><br>We have now changed our name to Cosmic. By dropping the JS from our name, we intend to not only be the best CMS for JavaScript developers, but also for developers using any programming language.</p><p><br><br></p><p style=\"text-align: center;\"><img src=\"https://cdn.cosmicjs.com/3cf62ab0-8e13-11ea-9b8f-cd0254a8c979-cosmic-dark.svg\" style=\"width: 100%; max-width: 400px;\" class=\"fr-fic fr-dib\"></p><p><br><br></p><p>When we first started building Cosmic, we wanted adding a CMS to your JavaScript app to be as easy as <code>npm i cosmicjs</code>. The name was chosen to achieve this goal for JavaScript developers, and <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">we did it</a>. But we never intended it to be exclusively for JavaScript developers as our REST and GraphQL API can deliver content to any website or application regardless of programming language.<br><br>With our new name, and the promise to serve more developers, we are committed to providing more clients and resources for developers using other programming languages such as Java, Go, Ruby, and more. Be on the lookout for more client resources soon.<br><br>As for the logo itself, it has undergone a glow-up with a new bolder typeface to make the logo pop with the new website colors.<br><br>Our home on the web will still be located at <a href=\"https://www.cosmicjs.com\"></a><a href=\"https://www.cosmicjs.com\">cosmicjs.com</a>.<br><br><strong>Website Design Updates</strong><br>You will notice that many of the pages on the website have been rebuilt from the ground up, with a renewed focus on story-telling.</p><p><img src=\"https://cdn.cosmicjs.com/980ac400-8e7d-11ea-bd26-81830172bbcb-browsers.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>When development teams look for a new CMS, it&#39;s important that the solution not only provides powerful developer tools, but also gives their content team an intuitive content creation experience. On the homepage, we chose to lead with a screenshot of the dashboard and the code behind it to tell the story for these two important team members.<br><br>The curved global nav, new heading font, and retro flair playfully added to parts of the site, were specifically chosen to evoke a space age design. Like classic cars of the 60s with their curvy design, a headless CMS is a new frontier for most teams, and we hope the new design instills a similar feeling of limitless adventure and optimism.<br><br>We hope you enjoy the new look and feel, and renewed commitment to be the best CMS for your content and development teams. If you have any questions or comments, please <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">join the community on Slack</a>.<br><br>Thanks,<br>The Cosmic Team</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"HPp2EPIc5W","value":"5768b253163172890e00002c","object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"qV5iMHJDQR","value":"<p>We&#39;re excited to announce some big updates to our branding and website design. We have now changed our name to Cosmic. By dropping the JS from our name, we intend to not only be the best CMS for JavaScript developers, but also for developers using any programming language.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"jzCibxaOxY","value":"980ac400-8e7d-11ea-bd26-81830172bbcb-browsers.png","url":"https://cdn.cosmicjs.com/980ac400-8e7d-11ea-bd26-81830172bbcb-browsers.png","imgix_url":"https://imgix.cosmicjs.com/980ac400-8e7d-11ea-bd26-81830172bbcb-browsers.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2020-05-05T16:48:50.453Z","created_by":"5357ef811693be2118000001","modified_at":"2020-08-10T14:04:22.001Z","created":"2020-05-05T16:48:50.453Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2020-07-22T13:02:50.533Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We&#39;re excited to announce some big updates to our branding and website design. We have now changed our name to Cosmic. By dropping the JS from our name, we intend to not only be the best CMS for JavaScript developers, but also for developers using any programming language.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/980ac400-8e7d-11ea-bd26-81830172bbcb-browsers.png","imgix_url":"https://imgix.cosmicjs.com/980ac400-8e7d-11ea-bd26-81830172bbcb-browsers.png"}}},{"_id":"5d4c4c3df052fe58796fd275","order":26,"slug":"headless-cms-gatsby","title":"Headless CMS + Gatsby","content":"<p>Manage content for your Gatsby apps using the Cosmic JS Headless CMS. Teams use the Cosmic JS Headless CMS to model and create content for their Gatsby websites and apps because of its intuitive Headless CMS Dashboard and easy API integration tools. Get started by installing the <a href=\"https://www.npmjs.com/package/cosmicjs\">Cosmic JS NPM Module</a> and reviewing the <a href=\"https://github.com/cosmicjs/gatsby-source-cosmicjs\">Gatsby Source Plugin</a>.<br><br></p><h3>What is a Headless CMS?</h3><p>Headless CMS Software works by providing non-technical editors with a Dashboard UI to model, create and publish content while providing developers with API tools and resources to integrate content with any website or app. By decoupling content from code, teams create a central content repository that can power all of their content-powered applications.&nbsp;</p>","metafields":[{"value":"Headless CMS + Gatsby","key":"solution_name","title":"Solution Name","type":"text","children":null},{"value":"c17be120-b9f8-11e9-898a-35d13190571c-76568eb0-ddea-11e8-9812-e3be732e632a-gatsby-cosmic.jpg","key":"image","title":"Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/c17be120-b9f8-11e9-898a-35d13190571c-76568eb0-ddea-11e8-9812-e3be732e632a-gatsby-cosmic.jpg","imgix_url":"https://imgix.cosmicjs.com/c17be120-b9f8-11e9-898a-35d13190571c-76568eb0-ddea-11e8-9812-e3be732e632a-gatsby-cosmic.jpg"},{"object_type":"case-studies","value":"596663e8880d69fb6c000194,5a2455620cb0e3291c00002e,59f102cbd4de657279002f97","key":"case_studies","title":"Case Studies","type":"objects","children":null,"objects":[{"_id":"596663e8880d69fb6c000194","slug":"joblift-elevates-their-stack","title":"Joblift Elevates Their Stack ","content":"<p>In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, <a href=\"https://joblift.co.uk\" rel=\"noopener noreferrer\" target=\"_blank\">Joblift</a> seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/16ac66c0-03d7-11e9-a9c3-c1326db90b81-DrzF-2BX0AA0WTE.jpg-large.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Joblift manages localized content to serve Job, Press and Blog feeds to its various markets, including the UK, Netherlands and Germany. Easy user roles and permissions equip their team with the tools they need to seamlessly run a global organization.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic has completely sped up our ability to upload our content easily and efficiently. With Cosmic we now have a smooth process for uploading press releases which reflects the quality content on our website.&rdquo;</p><p><cite>&mdash; Ashleigh Grady, Content Editor and Marketing Manager</cite></p></blockquote>","metafields":[{"value":"Joblift","key":"company","title":"Company","type":"text","children":null},{"value":"Career Services","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T18:01:12.194Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-12-19T21:44:38.361Z"},{"_id":"5a2455620cb0e3291c00002e","slug":"acculevel-deploys-a-blog","title":"Acculevel Deploys a Blog","content":"<p dir=\"ltr\"><a href=\"https://acculevel.com\" rel=\"noopener noreferrer\" target=\"_blank\">Acculevel</a> is Your Foundation Expert. Serving the Midwest United States for the last 20 years, Acculevel knows what it means to serve and do a job right. Customer retention, reviews and loyalty are the name of their game, so to optimize these efforts and keep customers engaged and informed, Acculevel is scaling up their digital presence through its upcoming website, a new mobile application and more. Led by a new Chief Technology Officer overseeing developers and content editors, here&#39;s how Acculevel is ensuring their own foundation is solid.<br><br>Mired in an installed <a href=\"https://hackernoon.com/cosmic-js-vs-wordpress-668608df4e22\" rel=\"noopener noreferrer\" target=\"_blank\">WordPress</a> system was leaving Acculevel without the flexibility needed to nimbly build and publish content campaigns to engage with customers. Acculevel&#39;s tech team is currently building out a new zippy website built on a <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a> stack, complete with API integrations for ACH Authentication (Plaid) and Payment Gateway (Stripe). Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editors to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/516cb890-daa8-11e7-92aa-b5a1b0875421-21761700_1534030483286380_3096937493413845441_n.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a seamless on-boarding experience for creating a Bucket to manage blog content for our growing organization. We needed a programming-language agnostic API to manage content both within our existing WordPress website as well as within our new Node.js web application. Cosmic fit the bill perfectly with its simple Object schema and powerful Metafields. With Cosmic, content is just data and you can pull it however you&#39;d like, wherever you like, allowing us &nbsp;to build new tools in the future such as survey tools, employee forums and more.&rdquo;</p><p><cite>&mdash; Dylan Marsh, Chief Technology Officer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Acculevel ","key":"company","title":"Company","type":"text","children":null},{"value":"Construction","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editor to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","imgix_url":"https://imgix.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-12-03T19:49:54.515Z","created_by":"5716b504e9c686d006000073","created":"2017-12-03T19:49:54.515Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null},{"_id":"59f102cbd4de657279002f97","slug":"datalyze-solutions-adds-blog-and-job-feeds","title":"Datalyze Solutions Adds a Blog Feed","content":"<p>Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier. That&#39;s why <a href=\"https://www.datalyze-solutions.com\" rel=\"noopener noreferrer\" target=\"_blank\">Datalyze Solutions</a> chooses Cosmic to deliver its content from the cloud for its Blog feeds.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/564c8f40-ca4d-11e7-a5c4-d31978c51f26-Screen Shot 2017-11-15 at 3.38.13 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic has been in use at Datalyze Solutions for more than one and a half years. Cosmic has become a critically important tool for us to publish blog posts quickly and easily. This way, our customers and partners can stay informed about the latest news from our company and other industry-relevant information. Cosmic offers exactly the flexibility and features we really need as content editors!&quot;</p><p>&mdash; Carolin Bauer, Content Editor and Marketing Manager</p></blockquote>","metafields":[{"value":"Datalyze Solutions","key":"company","title":"Company","type":"text","children":null},{"value":"Internet","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier.","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","imgix_url":"https://imgix.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-25T21:31:55.033Z","created_by":"5716b504e9c686d006000073","created":"2017-10-25T21:31:55.033Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null}]},{"repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}],"value":"gatsby-blog","key":"app_slugs","title":"App Slugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"gatsby-blog","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"gatsby-agency-portfolio","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"gatsby-localization-app-starter","type":"text","required":false}]}]},{"repeater_fields":[{"title":"Slug","key":"slug","value":"","type":"text","required":false}],"value":"wordpress-importer","key":"extension_slugs","title":"Extension SLugs","type":"repeater","children":[{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"wordpress-importer","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"export-to-csv","type":"text","required":false}]},{"type":"repeating_item","children":[{"title":"Slug","key":"slug","value":"unsplash-photos","type":"text","required":false}]}]},{"value":"\"Using the Cosmic JS Headless CMS to manage dynamic content for our statically-generated Gatsby app is a true workflow game-changer.”","key":"testimonial","title":"Testimonial","type":"textarea","children":null},{"value":"Lead Developer, dailymotion ","key":"testimonial_credit","title":"Testimonial Credit","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"solutions","created_at":"2019-08-05T20:18:17.006Z","created_by":"5716b504e9c686d006000073","modified_at":"2019-08-08T16:26:49.570Z","created":"2019-08-08T16:22:21.025Z","status":"published","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-08-08T16:26:49.571Z","metadata":{"solution_name":"Headless CMS + Gatsby","image":{"url":"https://cdn.cosmicjs.com/c17be120-b9f8-11e9-898a-35d13190571c-76568eb0-ddea-11e8-9812-e3be732e632a-gatsby-cosmic.jpg","imgix_url":"https://imgix.cosmicjs.com/c17be120-b9f8-11e9-898a-35d13190571c-76568eb0-ddea-11e8-9812-e3be732e632a-gatsby-cosmic.jpg"},"case_studies":[{"_id":"596663e8880d69fb6c000194","slug":"joblift-elevates-their-stack","title":"Joblift Elevates Their Stack ","content":"<p>In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, <a href=\"https://joblift.co.uk\" rel=\"noopener noreferrer\" target=\"_blank\">Joblift</a> seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/16ac66c0-03d7-11e9-a9c3-c1326db90b81-DrzF-2BX0AA0WTE.jpg-large.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Joblift manages localized content to serve Job, Press and Blog feeds to its various markets, including the UK, Netherlands and Germany. Easy user roles and permissions equip their team with the tools they need to seamlessly run a global organization.&nbsp;</p><p><br></p><blockquote><p>&quot;Cosmic has completely sped up our ability to upload our content easily and efficiently. With Cosmic we now have a smooth process for uploading press releases which reflects the quality content on our website.&rdquo;</p><p><cite>&mdash; Ashleigh Grady, Content Editor and Marketing Manager</cite></p></blockquote>","metafields":[{"value":"Joblift","key":"company","title":"Company","type":"text","children":null},{"value":"Career Services","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-12T18:01:12.194Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","publish_at":null,"published_at":"2018-12-19T21:44:38.361Z","metadata":{"company":"Joblift","industry_type":"Career Services","teaser":"In any bustling economy, a key piece of capital is human capital. When the most precious portion of capital is required, Joblift seeks to connect positions with people. They choose Cosmic to deliver their content via the cloud. \n","logo":{"url":"https://cdn.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0f90a360-03d7-11e9-a9c3-c1326db90b81-RKJ3oFFY_400x400.jpg"}}},{"_id":"5a2455620cb0e3291c00002e","slug":"acculevel-deploys-a-blog","title":"Acculevel Deploys a Blog","content":"<p dir=\"ltr\"><a href=\"https://acculevel.com\" rel=\"noopener noreferrer\" target=\"_blank\">Acculevel</a> is Your Foundation Expert. Serving the Midwest United States for the last 20 years, Acculevel knows what it means to serve and do a job right. Customer retention, reviews and loyalty are the name of their game, so to optimize these efforts and keep customers engaged and informed, Acculevel is scaling up their digital presence through its upcoming website, a new mobile application and more. Led by a new Chief Technology Officer overseeing developers and content editors, here&#39;s how Acculevel is ensuring their own foundation is solid.<br><br>Mired in an installed <a href=\"https://hackernoon.com/cosmic-js-vs-wordpress-668608df4e22\" rel=\"noopener noreferrer\" target=\"_blank\">WordPress</a> system was leaving Acculevel without the flexibility needed to nimbly build and publish content campaigns to engage with customers. Acculevel&#39;s tech team is currently building out a new zippy website built on a <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a> stack, complete with API integrations for ACH Authentication (Plaid) and Payment Gateway (Stripe). Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editors to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/516cb890-daa8-11e7-92aa-b5a1b0875421-21761700_1534030483286380_3096937493413845441_n.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic provided us with a seamless on-boarding experience for creating a Bucket to manage blog content for our growing organization. We needed a programming-language agnostic API to manage content both within our existing WordPress website as well as within our new Node.js web application. Cosmic fit the bill perfectly with its simple Object schema and powerful Metafields. With Cosmic, content is just data and you can pull it however you&#39;d like, wherever you like, allowing us &nbsp;to build new tools in the future such as survey tools, employee forums and more.&rdquo;</p><p><cite>&mdash; Dylan Marsh, Chief Technology Officer &nbsp;</cite></p></blockquote>","metafields":[{"value":"Acculevel ","key":"company","title":"Company","type":"text","children":null},{"value":"Construction","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editor to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","imgix_url":"https://imgix.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-12-03T19:49:54.515Z","created_by":"5716b504e9c686d006000073","created":"2017-12-03T19:49:54.515Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"company":"Acculevel ","industry_type":"Construction","teaser":"Acculevel needed a blog feed that would allow their new API-first methodology to pull data via the cloud while allowing their content editor to easily build and manage content in a WYSIWYG editor. With Cosmic, they were able to build and deploy a fully functioning blog in under 30 minutes.\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg","imgix_url":"https://imgix.cosmicjs.com/7621bb20-dab4-11e7-82e3-e92aaea009f5-o.jpg"}}},{"_id":"59f102cbd4de657279002f97","slug":"datalyze-solutions-adds-blog-and-job-feeds","title":"Datalyze Solutions Adds a Blog Feed","content":"<p>Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier. That&#39;s why <a href=\"https://www.datalyze-solutions.com\" rel=\"noopener noreferrer\" target=\"_blank\">Datalyze Solutions</a> chooses Cosmic to deliver its content from the cloud for its Blog feeds.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/564c8f40-ca4d-11e7-a5c4-d31978c51f26-Screen Shot 2017-11-15 at 3.38.13 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic has been in use at Datalyze Solutions for more than one and a half years. Cosmic has become a critically important tool for us to publish blog posts quickly and easily. This way, our customers and partners can stay informed about the latest news from our company and other industry-relevant information. Cosmic offers exactly the flexibility and features we really need as content editors!&quot;</p><p>&mdash; Carolin Bauer, Content Editor and Marketing Manager</p></blockquote>","metafields":[{"value":"Datalyze Solutions","key":"company","title":"Company","type":"text","children":null},{"value":"Internet","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier.","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","imgix_url":"https://imgix.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-25T21:31:55.033Z","created_by":"5716b504e9c686d006000073","created":"2017-10-25T21:31:55.033Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"metadata":{"company":"Datalyze Solutions","industry_type":"Internet","teaser":"Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier.","logo":{"url":"https://cdn.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","imgix_url":"https://imgix.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png"}}}],"app_slugs":[{"slug":"gatsby-blog"},{"slug":"gatsby-agency-portfolio"},{"slug":"gatsby-localization-app-starter"}],"extension_slugs":[{"slug":"wordpress-importer"},{"slug":"export-to-csv"},{"slug":"unsplash-photos"}],"testimonial":"\"Using the Cosmic JS Headless CMS to manage dynamic content for our statically-generated Gatsby app is a true workflow game-changer.”","testimonial_credit":"Lead Developer, dailymotion "}},{"_id":"5b02c898de6d6d387eb68991","order":26,"slug":"vr-cms","title":"VR CMS","content":"<p>Virtual reality applications require dynamic content. &nbsp;Cosmic JS makes it easy to manage content for your VR applications.</p><h3>VR CMS Resources</h3><p><a href=\"https://github.com/cosmicjs/react-vr-art-gallery\" rel=\"noopener noreferrer\" target=\"_blank\">React VR Art Gallery Example</a><br><a href=\"https://cosmicjs.com/articles/react-vr-art-gallery-app-jh10xe75\" rel=\"noopener noreferrer\" target=\"_blank\">Video: React VR Art Gallery App</a><br><a href=\"https://cosmicjs.com/case-studies/medical-realities-delivers-vr-surgical-content\" rel=\"noopener noreferrer\" target=\"_blank\">VR Case Study: Medical Realities</a>&nbsp;<br><a href=\"https://cosmicjs.com/case-studies/unleashed-xr-augmented-mixed-and-virtual-realities\" rel=\"noopener noreferrer\" target=\"_blank\">VR Case Study: Unleashed XR</a><br><a href=\"https://cosmicjs.com/docs/\">Cosmic JS Docs</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official JavaScript Client</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3>Using the Cosmic JS NPM Module</h3><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><code style=' font-size: inherit; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: 0px 0px; text-align: left;'>npm i cosmicjs</code></pre><p style=' color: rgb(51, 51, 51); font-family: \"Open Sans\", sans-serif; font-size: 16px; text-align: start; background-color: rgb(255, 255, 255);'>Then in your JavaScript file, get your content:</p><div class=\"fr-embedly         \" data-original-embed=\"<a href='https://runkit.com/tonyspiro/5ad9109c320cd6001286359c' class='embedly-card'></a>\"><a href=\"https://runkit.com/tonyspiro/5ad9109c320cd6001286359c\" class=\"embedly-card\"></a></div><p><br></p>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"QkW6gba9Pk","value":"2bf53630-5cfa-11e8-9276-0b00f900a0a0-vr.png","url":"https://cdn.cosmicjs.com/2bf53630-5cfa-11e8-9276-0b00f900a0a0-vr.png","imgix_url":"https://imgix.cosmicjs.com/2bf53630-5cfa-11e8-9276-0b00f900a0a0-vr.png"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"prdUIgdcqW","value":"2bf53630-5cfa-11e8-9276-0b00f900a0a0-vr.png","url":"https://cdn.cosmicjs.com/2bf53630-5cfa-11e8-9276-0b00f900a0a0-vr.png","imgix_url":"https://imgix.cosmicjs.com/2bf53630-5cfa-11e8-9276-0b00f900a0a0-vr.png"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"pRsavOph2x","value":"<p>Cosmic is the best CMS for VR apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"Zjwr5XiizW","value":"VR CMS"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"lMYPgnny2o","value":"Cosmic is the best CMS for VR apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"Y9TI3tIKqt","value":"2bf53630-5cfa-11e8-9276-0b00f900a0a0-vr.png","url":"https://cdn.cosmicjs.com/2bf53630-5cfa-11e8-9276-0b00f900a0a0-vr.png","imgix_url":"https://imgix.cosmicjs.com/2bf53630-5cfa-11e8-9276-0b00f900a0a0-vr.png"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"nzdO5hg379","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"2D0uhQCczt","value":"Best Headless CMS for VR"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"frgtgqfrpylludl8pnsi","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2018-05-21T13:24:40.741Z","created_by":"5357ef811693be2118000001","created":"2018-05-21T13:24:40.741Z","status":"published","modified_at":"2020-06-27T19:23:03.758Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-27T19:23:03.758Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/2bf53630-5cfa-11e8-9276-0b00f900a0a0-vr.png","imgix_url":"https://imgix.cosmicjs.com/2bf53630-5cfa-11e8-9276-0b00f900a0a0-vr.png"},"thumbnail":{"url":"https://cdn.cosmicjs.com/2bf53630-5cfa-11e8-9276-0b00f900a0a0-vr.png","imgix_url":"https://imgix.cosmicjs.com/2bf53630-5cfa-11e8-9276-0b00f900a0a0-vr.png"},"blurb":"<p>Cosmic is the best CMS for VR apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"VR CMS","seo_description":"Cosmic is the best CMS for VR apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/2bf53630-5cfa-11e8-9276-0b00f900a0a0-vr.png","imgix_url":"https://imgix.cosmicjs.com/2bf53630-5cfa-11e8-9276-0b00f900a0a0-vr.png"},"code_example":"","seo_title":"Best Headless CMS for VR","videos":[]}},{"_id":"5e5d6f772cd9090007caca02","order":27,"slug":"additional-users-add-on-now-available","title":"Additional Users Add-On Now Available","content":"<p><img src=\"https://cosmic-s3.imgix.net/e23218d0-5cc8-11ea-8649-b9c3b12e7d52-SYTO3xs06fU.jpg?w=1000\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>At Cosmic, it&#39;s our mission to help teams of developers and content creators build great content-powered apps together. We&#39;re happy to announce the new <a href=\"https://www.cosmicjs.com/pricing#bucket-add-ons\" rel=\"noopener noreferrer\" target=\"_blank\">Additional Users Add-On</a> product to offer a more flexible pricing option for growing teams.<br><br><strong>What is it?</strong><br>The Additional Users Add-On is a new product that allows you to add team members &quot;a la cart&quot; to your Bucket without having to make larger jumps between plans.<br><br><strong>How to use the Additional Users Add-On</strong><br>1. <a href=\"https://app.cosmicjs.com/login\" rel=\"noopener noreferrer\" target=\"_blank\">Login to your Cosmic account</a> and go to <em>Your Bucket &gt; Settings &gt; Billing</em> and scroll down to the the Bucket Add-Ons area.<br>2. Select the number of additional users you need and click &quot;Add Product&quot;.<br>3. Then go to <em>Your Bucket &gt; Settings &gt; Team</em> area and invite your new team members.</p><p>Video below:</p><p><span class=\"fr-video fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><video class=\"fr-draggable fr-fvc fr-dvi\" controls=\"\" src=\"https://cdn.cosmicjs.com/3c8fa450-5cc9-11ea-b22d-3bfd4630fa00-additional-users.mp4\" style=\"width: 600px;\">Your browser does not support HTML5 video.</video></span></p><p><strong>Scenario:</strong><br>You have a Starter Bucket which includes <strong>5 team members</strong>, <strong>25,000 API requests</strong> per month (non-cached), and <strong>3GB&nbsp;</strong><strong>media storage</strong> space.</p><p>And let&#39;s say you just hired a new content creator to your team that needs access to Cosmic, but you are at the <strong>5 team member</strong> limit within your plan.</p><p>Now instead of upgrading to the next available plan (Pro) which includes <strong>10 users</strong>, <strong>150,000 API requests</strong> per month and <strong>15GB&nbsp;</strong><strong>media storage</strong>, you can simply use the Additional Users Add-on to add the <strong>custom number of team members&nbsp;</strong>you need now while avoiding the other features you may not need (API requests, media storage).</p><p>For an additional $29/user per month (10% off for paying yearly) you can customize the number of team members included in your Bucket, giving you a more gradual growth path.</p><p><br></p><p>We hope you like the flexibility this new product offers as you grow your team collaboration on Cosmic. You can visit <a href=\"https://www.cosmicjs.com/pricing#bucket-add-ons\" rel=\"noopener noreferrer\" target=\"_blank\">the pricing page</a> for more information on our available Add-Ons and if you have any questions, please feel free to reach out to us on <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Slack</a>, or directly on <a href=\"https://www.cosmicjs.com/contact\" rel=\"noopener noreferrer\" target=\"_blank\">our contact page</a>.</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"a6Zq9qJRuQ","value":"5768b253163172890e00002c","object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"YwZ0yThzHK","value":"<p>At Cosmic, it&#39;s our mission to help teams of developers and content creators build great content-powered apps together. We&#39;re happy to announce the new <a href=\"https://www.cosmicjs.com/pricing#bucket-add-ons\" rel=\"noopener noreferrer\" target=\"_blank\">Additional Users Add-On</a> to offer a flexible pricing option for growing teams.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"RNug5uxIa6","value":"e23218d0-5cc8-11ea-8649-b9c3b12e7d52-SYTO3xs06fU.jpg","url":"https://cdn.cosmicjs.com/e23218d0-5cc8-11ea-8649-b9c3b12e7d52-SYTO3xs06fU.jpg","imgix_url":"https://imgix.cosmicjs.com/e23218d0-5cc8-11ea-8649-b9c3b12e7d52-SYTO3xs06fU.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2020-03-02T20:41:27.961Z","created_by":"5357ef811693be2118000001","modified_at":"2020-03-03T16:24:17.609Z","created":"2020-03-02T20:41:27.961Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2020-03-03T16:24:17.609Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>At Cosmic, it&#39;s our mission to help teams of developers and content creators build great content-powered apps together. We&#39;re happy to announce the new <a href=\"https://www.cosmicjs.com/pricing#bucket-add-ons\" rel=\"noopener noreferrer\" target=\"_blank\">Additional Users Add-On</a> to offer a flexible pricing option for growing teams.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/e23218d0-5cc8-11ea-8649-b9c3b12e7d52-SYTO3xs06fU.jpg","imgix_url":"https://imgix.cosmicjs.com/e23218d0-5cc8-11ea-8649-b9c3b12e7d52-SYTO3xs06fU.jpg"}}},{"_id":"5dee711dbd07ee00085b7cb3","order":27,"slug":"auto-save-object-revisions-endpoint-and-metafield-bug-fixes","title":"Auto Save, Object Revisions Endpoint, and Metafield Bug Fixes","content":"<p>We&#39;ve got some exciting updates that should make editing and integrating your Cosmic-powered content faster, easier, and more enjoyable. This release includes two updates: 1) a new Auto Save feature, and 2) fixes and enhancements to the Metafield\r\nediting experience.</p><p><br></p><p><strong>1. Auto Save</strong><br>We have added a new Auto Save feature, which will automatically save your Object content to draft while you are editing. No need to manually save until you are ready to publish. (This is currently only available if you have revision history enabled)</p><p style=\"text-align: center;\"><img class=\"fr-dib\" src=\"https://cdn.cosmicjs.com/ec4c1e50-1d1d-11ea-a594-a170ead8b2cb-1576182493869.jpg\" style=\"width: 300px;\"></p><p style=\"text-align: center;\"><br></p><p>Customers of Gatsby Preview will love this feature as you will see updates to your Gatsby Cloud link instantaneously!</p><p>Auto Save with Gatsby Cloud in action:</p><p><img src=\"https://cdn.cosmicjs.com/2f6f2d80-1acb-11ea-a8c4-6b69c807b1d7-gatsby-auto-preview.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p style=\"text-align: center;\"><em>click to zoom</em></p><p><strong>2. Object Revisions Endpoint</strong><br>You now have revisions available via the API. You can find this endpoint on every Object in the Dashboard when you click the &quot;Revisions&quot; button. <a href=\"https://docs.cosmicjs.com/rest-api/objects.html#get-object-revisions\">View the docs</a> for more info.<img src=\"https://cdn.cosmicjs.com/2b875760-234f-11ea-ba20-532c8ab77732-object-revisions.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p style=\"text-align: center;\"><em>click to zoom</em></p><p><strong>3. Metafields (Bug fixes and enhancements)</strong><br>The Cosmic team is dedicated to offering a first-class content editing experience. &nbsp;With our Metafields content modeling approach, we offer one of the most powerful content management systems available. And we&#39;ve made this much-loved feature\r\neven better.</p><p>We&#39;re happy to report that we fixed some Metafield bugs reported by the Cosmic community as well as added a few enhancements.</p><p><strong>Fixes include:</strong></p><ul><li><strong>Help Text</strong><ul><li>Issues related to repeater &amp; parents have been fixed</li></ul></li><li><strong>Select Dropdown</strong><ul><li>A bug with dropdown `key` &amp; `value` issues has been fixed</li></ul></li><li><strong>Repeater scroll Issue</strong><ul><li>Edit Page no longer jumps up and down when you add and remove repeater items</li></ul></li></ul><p><strong>Enhancements include:</strong></p><ul><li><strong>Duplicate Metafield</strong><ul><li>Now when you duplicate Metafields, it will append a unique `key` identifier</li></ul></li><li><strong>Unique Metafield keys</strong><ul><li>Metafield keys are now required to be unique. This fixes quite a few issues that came up from Metafields clashing or not showing up in the API</li></ul></li></ul><p><br></p><p>Any questions or comments? Reach out to us <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">on Twitter</a> and join the conversation on <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">our Slack channel</a>.</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"jk2TEMqDCU","value":"2020-01-02"},{"children":null,"type":"object","title":"Author","key":"author","id":"5d2kFBsl13","value":"599b30c44f629e3a5900010f","object_type":"authors","object":{"_id":"599b30c44f629e3a5900010f","slug":"jazib-sawar","title":"Jazib Sawar","content":"","metafields":[{"value":"d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","id":"MoCJXLYqwC","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","imgix_url":"https://imgix.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg"},{"value":"jazibsawar","id":"","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-08-21T19:13:08.011Z","created_by":"5357ef811693be2118000001","created":"2017-08-21T19:13:08.011Z","status":"published","modified_at":"2020-09-15T15:41:11.076Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-12-09T16:06:31.900Z","thumbnail":"https://imgix.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg"}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"g2kpc27LlO","value":"","url":null,"imgix_url":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2019-10-28T20:03:47.995Z","created_by":"5357ef811693be2118000001","modified_at":"2020-08-10T14:02:39.393Z","created":"2019-12-09T16:06:53.462Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-01-02T17:55:22.066Z","metadata":{"published_date":"2020-01-02","author":{"_id":"599b30c44f629e3a5900010f","slug":"jazib-sawar","title":"Jazib Sawar","content":"","metafields":[{"value":"d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","id":"MoCJXLYqwC","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","imgix_url":"https://imgix.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg"},{"value":"jazibsawar","id":"","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-08-21T19:13:08.011Z","created_by":"5357ef811693be2118000001","created":"2017-08-21T19:13:08.011Z","status":"published","modified_at":"2020-09-15T15:41:11.076Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-12-09T16:06:31.900Z","thumbnail":"https://imgix.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","imgix_url":"https://imgix.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg"},"username":"jazibsawar"}},"featured_image":{"url":null,"imgix_url":null}}},{"_id":"5dc9df899f83340007a019ab","order":27,"slug":"free-headless-cms","title":"Free Headless CMS","content":"<p>The Cosmic JS Headless CMS makes it easy for your team to add dynamic content to any website or app in minutes. We provide a dashboard to create content and API tools and resources to integrate content into any website or app. We offer a <a href=\"https://www.cosmicjs.com/pricing\" rel=\"noopener noreferrer\" target=\"_blank\">Free Developer plan</a> to host your website content.</p><p>Avoid the pain of building and maintaining your own CMS infrastructure. Use the Cosmic JS Headless CMS infrastructure and focus on what really matters: building great products and user experiences.</p><h3><br>Cosmic JS Videos</h3><h4><br></h4><h4>Using Cosmic JS as a Headless CMS with Gatsby</h4><div class=\"fr-embedly                    \" data-original-embed=\"<a href='https://www.youtube.com/watch?v=Qls5frYlJeI' class='embedly-card'></a>\"><a href=\"https://www.youtube.com/watch?v=Qls5frYlJeI\" class=\"embedly-card\"></a></div><h4>Build a Cosmic JS-powered blog using Gatsby</h4><div class=\"fr-embedly                    \" data-original-embed=\"<a href='https://www.youtube.com/watch?v=mGcAWs1xRnY' class='embedly-card'></a>\"><a href=\"https://www.youtube.com/watch?v=mGcAWs1xRnY\" class=\"embedly-card\"></a></div><h4>Webinar: Localization with Cosmic JS and Gatsby</h4><div class=\"fr-embedly                    \" data-original-embed=\"<a href='https://www.youtube.com/watch?v=16m3wRFPGAY' class='embedly-card'></a>\"><a href=\"https://www.youtube.com/watch?v=16m3wRFPGAY\" class=\"embedly-card\"></a></div><p><br></p><h3>Headless CMS Articles</h3><p><a href=\"https://cosmicjs.com/blog/how-to-build-a-simple-blog-using-nodejs\" rel=\"noopener noreferrer\" target=\"_blank\">How to Build a Simple Blog Using Node.js</a><br><a href=\"https://hackernoon.com/how-to-build-a-node-js-user-management-app-12d900695ef6\" rel=\"noopener noreferrer\" target=\"_blank\">How to Build a Node.js User Management App</a><br><a href=\"https://cosmicjs.com/blog/how-to-build-a-cross-platform-blog-using-react-native-and-nodejs\" rel=\"noopener noreferrer\" target=\"_blank\">How to Build a Cross-Platform Blog Using React Native and Node.js</a></p><h3>Headless CMS Resources</h3><p><a href=\"https://cosmicjs.com/docs/\">Cosmic JS Docs</a><br><a href=\"https://cosmicjs.com/headless-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Headless CMS Features</a><br><a href=\"https://cosmicjs.com/solutions\" rel=\"noopener noreferrer\" target=\"_blank\">Headless CMS Solutions</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\"></a><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official JavaScript Client</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3>Examples</h3><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><code style=' font-size: inherit; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: 0px 0px; text-align: left;'>npm i cosmicjs</code></pre><p>Then in your JavaScript file, get your content:</p><div class=\"fr-embedly         \" data-original-embed=\"<a href='https://runkit.com/tonyspiro/5ad9109c320cd6001286359c' class='embedly-card'></a>\"><a href=\"https://runkit.com/tonyspiro/5ad9109c320cd6001286359c\" class=\"embedly-card\"></a></div>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"LZfrzSUo5x","value":"309fbe40-04d2-11ea-944c-cfd32d7bf8a6-logo-big.jpg","url":"https://cdn.cosmicjs.com/309fbe40-04d2-11ea-944c-cfd32d7bf8a6-logo-big.jpg","imgix_url":"https://imgix.cosmicjs.com/309fbe40-04d2-11ea-944c-cfd32d7bf8a6-logo-big.jpg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"HhhaIdizlr","value":"309fbe40-04d2-11ea-944c-cfd32d7bf8a6-logo-big.jpg","url":"https://cdn.cosmicjs.com/309fbe40-04d2-11ea-944c-cfd32d7bf8a6-logo-big.jpg","imgix_url":"https://imgix.cosmicjs.com/309fbe40-04d2-11ea-944c-cfd32d7bf8a6-logo-big.jpg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"C43E6FAqEj","value":"<p>Cosmic is the best free Headless CMS for your websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"UYcYQQFTQ2","value":"Headless CMS"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"6eqanUjWTe","value":"Cosmic is the best free Headless CMS for your websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"ZFsTAYz11u","value":"309fbe40-04d2-11ea-944c-cfd32d7bf8a6-logo-big.jpg","url":"https://cdn.cosmicjs.com/309fbe40-04d2-11ea-944c-cfd32d7bf8a6-logo-big.jpg","imgix_url":"https://imgix.cosmicjs.com/309fbe40-04d2-11ea-944c-cfd32d7bf8a6-logo-big.jpg"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"l8dYUwtGsQ","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"dwQPeYaOEW","value":"Best Free Headless CMS"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"frgtgqfrpylludl8pnsi","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-22T23:07:51.159Z","created_by":"5357ef811693be2118000001","created":"2019-11-11T22:24:09.673Z","status":"published","modified_at":"2020-06-27T19:18:20.853Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-27T19:18:20.853Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/309fbe40-04d2-11ea-944c-cfd32d7bf8a6-logo-big.jpg","imgix_url":"https://imgix.cosmicjs.com/309fbe40-04d2-11ea-944c-cfd32d7bf8a6-logo-big.jpg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/309fbe40-04d2-11ea-944c-cfd32d7bf8a6-logo-big.jpg","imgix_url":"https://imgix.cosmicjs.com/309fbe40-04d2-11ea-944c-cfd32d7bf8a6-logo-big.jpg"},"blurb":"<p>Cosmic is the best free Headless CMS for your websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Headless CMS","seo_description":"Cosmic is the best free Headless CMS for your websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/309fbe40-04d2-11ea-944c-cfd32d7bf8a6-logo-big.jpg","imgix_url":"https://imgix.cosmicjs.com/309fbe40-04d2-11ea-944c-cfd32d7bf8a6-logo-big.jpg"},"code_example":"","seo_title":"Best Free Headless CMS","videos":[]}},{"_id":"5e8627a91072ad0007f5624d","order":27,"slug":"new-add-ons-available","title":"New Add-Ons Available","content":"<p><img src=\"https://cdn.cosmicjs.com/4f110ef0-7521-11ea-bc96-7d100c64490e-add-on-options.svg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br>We released our Additional Users Add-on <a href=\"https://www.cosmicjs.com/blog/additional-users-add-on-now-available\">last month</a> and it has quickly become one of our most popular products. We think this is because teams like the ability to customize specific portions of their usage plan. We are happy to offer two more add-ons to help you get the most out of Cosmic while allowing more billing flexibility.</p><p><br></p><p><strong>Add-ons Bundle</strong><br>The new Add-ons Bundle combines all of our most popular Add-ons together in one value-added package. It includes Webhooks, Localization, Revision History, and Automatic Backups for <strong>40% off&nbsp;</strong>of the price you would pay for all of the Add-ons individually.</p><p>To add this Add-on to your Bucket, login and go to <em><a href=\"https://app.cosmicjs.com/login\">Your Bucket &gt; Settings &gt; Billing</a>.&nbsp;</em>Then scroll down to find the Add-ons section.</p><p><br></p><p><strong>Additional Files Add-On</strong><br>Storing and delivering media in Cosmic <a href=\"https://www.cosmicjs.com/headless-cms/media-management\" rel=\"noopener noreferrer\" target=\"_blank\">is so easy</a> and we want to make it even easier for you to make the most out of our Global CDN, image processing, and API tools to manage media. We are happy to offer the Additional Files Add-on to allow you to scale up your media usage.</p><p>To add this Add-on to your Bucket, login and go to <em><a href=\"https://app.cosmicjs.com/login\">Your Bucket &gt; Settings &gt; Billing</a>.&nbsp;</em>Then scroll down to find the Add-ons section.<br><br><br>We hope you like these additional products to help your team build great content-powered apps faster. If you have any questions, please <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and join <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">our Slack channel</a>.</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"9PMPa9zDGu","value":"5768b253163172890e00002c","object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"wY1H519s1T","value":"<p>We released our additional users Add-on <a href=\"https://www.cosmicjs.com/blog/additional-users-add-on-now-available\">a few weeks ago</a> and it has become one of the most popular products. We think customers really like the flexibility it gives their team to upgrade just a portion of their usage plan instead of jumping up to the next plan. With that flexibility in mind, we are happy to offer two more add-ons to help you get the most out of Cosmic while allowing more billing flexibility.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"6J3Ty9GVtA","value":"71a34f00-7521-11ea-bc96-7d100c64490e-add-on-options.jpg","url":"https://cdn.cosmicjs.com/71a34f00-7521-11ea-bc96-7d100c64490e-add-on-options.jpg","imgix_url":"https://imgix.cosmicjs.com/71a34f00-7521-11ea-bc96-7d100c64490e-add-on-options.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2020-04-03T17:58:01.493Z","created_by":"5357ef811693be2118000001","modified_at":"2020-04-03T14:22:32.313Z","created":"2020-04-03T17:58:01.494Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"unpublish_at":null,"published_at":"2020-04-03T14:22:32.313Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We released our additional users Add-on <a href=\"https://www.cosmicjs.com/blog/additional-users-add-on-now-available\">a few weeks ago</a> and it has become one of the most popular products. We think customers really like the flexibility it gives their team to upgrade just a portion of their usage plan instead of jumping up to the next plan. With that flexibility in mind, we are happy to offer two more add-ons to help you get the most out of Cosmic while allowing more billing flexibility.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/71a34f00-7521-11ea-bc96-7d100c64490e-add-on-options.jpg","imgix_url":"https://imgix.cosmicjs.com/71a34f00-7521-11ea-bc96-7d100c64490e-add-on-options.jpg"}}},{"_id":"5965373467a5c2304c000f37","slug":"simple-media-ditched-their-cms-for-the-cloud","title":"Simple Media Ditched Their CMS for the Cloud","content":"<p>When <a href=\"http://www.simplemedia.co\" rel=\"noopener noreferrer\" target=\"_blank\">Simple Media</a> has a new client project that needs their content delivered via the cloud quickly and easily, they choose Cosmic. &nbsp;We are proud to serve them in their cause for the reimagining of the modern interactive agency. Check out examples from <a href=\"https://thearnoldcos.com\" rel=\"noopener noreferrer\" target=\"_blank\">The Arnold Companies</a> below.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/0dda2900-e2d6-11e8-b27b-89ff2854f1b5-DmhElxkWwAAOJSy.jpg-large.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Simple Media was mired in legacy installed content management systems like WordPress. They needed a way to build apps faster while still giving clients the keys to manage their own content. They went API-first with Cosmic and are elated with their results.&nbsp;</p><h3><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/405178c0-e2d6-11e8-b66d-9f97d30aeeec-ice_screenshot_20181107-154343.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></h3><p><br></p><blockquote><p>&quot;We&#39;ve now increased overall agency bandwidth by 40% in most cases. Our old projects built in WordPress couldn&#39;t be done in Agile methodology. You can&#39;t build a module and then attach the front end in WordPress. Cosmic has doubled\r\nour productivity by allowing our developers to work in tandem. &nbsp;We now have the flexibility of executing back end development first and then complete front end development once the creative is ready. Because UI and UX are already done, Object Development\r\ncan almost beat the front end Sketch files &nbsp;and Prototyping via Invision App in the project cycle now.&quot;</p><p><cite>&mdash; Nick Bonanno, Principal</cite></p></blockquote>","metafields":[{"value":"Simple Media","key":"company","title":"Company","type":"text","children":null},{"value":"Interactive Agency","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"When Simple Media has a new client project that needs their content delivered via the cloud quickly and easily, they choose Cosmic.  We are proud to serve them in their cause for the reimagining of the modern interactive agency.","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"6460bbe0-e2d6-11e8-bddc-fb70105a463b-spUh8MJc_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/6460bbe0-e2d6-11e8-bddc-fb70105a463b-spUh8MJc_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/6460bbe0-e2d6-11e8-bddc-fb70105a463b-spUh8MJc_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created":"2017-07-11T20:38:12.836Z","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","status":"published","order":28,"publish_at":null,"published_at":"2018-11-07T21:45:08.985Z","metadata":{"company":"Simple Media","industry_type":"Interactive Agency","teaser":"When Simple Media has a new client project that needs their content delivered via the cloud quickly and easily, they choose Cosmic.  We are proud to serve them in their cause for the reimagining of the modern interactive agency.","logo":{"url":"https://cdn.cosmicjs.com/6460bbe0-e2d6-11e8-bddc-fb70105a463b-spUh8MJc_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/6460bbe0-e2d6-11e8-bddc-fb70105a463b-spUh8MJc_400x400.jpg"}}},{"_id":"5db749a3a3117f0007882e4d","order":28,"slug":"infrastructure-upgrade-new-metafields-and-more","title":"Infrastructure Upgrade, New Metafields, and more","content":"<p>This changelog announcement is a big one for us and includes:</p><ol><li>Upgraded infrastructure</li><li>New Metafields and</li><li>Optimizations to our open source clients.</li></ol><p><br></p><p><strong>1. Infrastructure Upgrade</strong></p><p>We&#39;re happy to tell you that all Cosmic components are now powered 100% by <a href=\"https://aws.amazon.com/serverless/\" rel=\"noopener noreferrer\" target=\"_blank\">serverless technologies</a>. By running completely even-driven using AWS Lambda functions, the REST API, GraphQL API, Dashboard application,\r\nand the website are now infinitely scalable through high traffic loads.</p><p>This is huge, because it means you can depend on us to deliver your content through the highest traffic loads with dynamic server capacity on demand. This is also big for the Cosmic team, because we are now able to\r\nmake product improvements at a higher velocity with a more streamlined deployment process.</p><p>We have also added a caching service to our website to serve our website resources at the edge. Your team can now get to any resource on <a href=\"//cosmicjs.com\">cosmicjs.com</a> faster and easier with at least 10x faster page loading from any spot on the globe.</p><p><br><br><strong>2. New Metafields</strong><br><strong><img src=\"https://cdn.cosmicjs.com/33eca190-fa59-11e9-a283-8f31669300b6-bool-number.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib fr-fil\"></strong></p><p>We have added Boolean Switch and Number Metafields to our list of available Metafield types. We recommend that if you are using Text Metafields for either of these value types, that you switch to these new Metafields.<br><br>New Switch Metafield in action:</p><p><img src=\"https://cdn.cosmicjs.com/c5bd02d0-fa5a-11e9-a283-8f31669300b6-new-metafields.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"><br><br><strong>3. Open Source Optimizations</strong></p><p>We&#39;ve added additional optimizations to our popular <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic NPM module</a> and <a href=\"https://www.npmjs.com/package/gatsby-source-cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby source plugin</a>. By adding the <code>Accept-Encoding: gzip</code> header to encode responses, API load times and payload sizes have been cut in half. Install the latest versions of these libraries to get this improvement (3.2.35 and 1.0.4 respectively).</p><p><br></p><p>We&#39;re on a mission to build the best CMS on the planet, and your feedback helps! If you have any questions or feature requests, <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a>, and <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">join our Slack channel</a>. Happy building!</p>","metafields":[{"value":"2019-10-29","key":"published_date","title":"Published Date","type":"date","children":null},{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"9df91f50-fa5e-11e9-a283-8f31669300b6-cosmic-lambda.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/9df91f50-fa5e-11e9-a283-8f31669300b6-cosmic-lambda.jpg","imgix_url":"https://imgix.cosmicjs.com/9df91f50-fa5e-11e9-a283-8f31669300b6-cosmic-lambda.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2019-10-28T20:03:47.995Z","created_by":"5357ef811693be2118000001","modified_at":"2020-08-10T13:59:43.225Z","created":"2019-10-28T20:03:47.995Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-10-29T15:16:58.760Z","metadata":{"published_date":"2019-10-29","author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":"https://cdn.cosmicjs.com/9df91f50-fa5e-11e9-a283-8f31669300b6-cosmic-lambda.jpg","imgix_url":"https://imgix.cosmicjs.com/9df91f50-fa5e-11e9-a283-8f31669300b6-cosmic-lambda.jpg"}}},{"_id":"5e13d0ec700fc30008a68b35","order":28,"slug":"developer-spotlight-lydia-hallie","title":"Developer Spotlight: Lydia Hallie","content":"<p>In this episode of the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Developer Spotlight Series</a>, we chatted with <a href=\"https://twitter.com/lydiahallie\" rel=\"noopener noreferrer\" target=\"_blank\">Lydia Hallie</a>, software developer and active contributor on <a href=\"https://dev.to/lydiahallie\" rel=\"noopener noreferrer\" target=\"_blank\">Dev.to</a>. She has been getting a lot of attention for her easy-to-follow (and <a href=\"https://dev.to/lydiahallie/javascript-visualized-the-javascript-engine-4cdf\" rel=\"noopener noreferrer\" target=\"_blank\">beautifully visual</a>!) educational resources for JavaScript. Follow Lydia on <a href=\"https://twitter.com/lydiahallie\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://github.com/lydiahallie\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, <a href=\"https://www.linkedin.com/in/lydia-hallie/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a>, and enjoy the conversation.</p><p><br></p><p><strong><img src=\"https://cosmic-s3.imgix.net/436a70a0-30e3-11ea-bfe8-5b62c3bdf959-lydia-hallie.jpg?auto=format,enhance\" style=\"width: 300px; margin: 0 20px 20px 0;\" class=\"fr-fic fr-fil fr-dii pull-left\"></strong></p><p><strong>When did you first begin building software?</strong><br>I got introduced to the concept of &ldquo;programming&rdquo; when I was quite young, around 9 years old. I had no idea this was programming though, I just thought it was something fun you could do as a kid (I mainly built basic games in python!).&nbsp;</p><p>When I was around 13 I started blogging on Tumblr and developed my own layouts on there, that&rsquo;s when I got introduced to HTML/CSS/JavaScript etc. I loved it, but I had no idea this could potentially be a future career option! (&hellip;.I also used the inspector tools very often to try and change my grades on my school&rsquo;s website haha. Little did I know that it did not in fact change the grades in the database, but I felt so cool when I found this feature in the browser. True hackerman moment.).<br><br>After graduating high school I got into it more seriously. I started playing around with Ruby on Rails, learned python for real, C#, and of course the love of my life JavaScript.</p><p><br></p><p><strong>What is your preferred development stack?</strong><br>I currently build most of my projects using TypeScript, React, Node, Serverless, GraphQL, and recently started with Golang which has been great so far!&nbsp;</p><p><br></p><p><strong>What past projects are you most proud of and why?</strong><br>Haha I always feel so bad when I&rsquo;m not actively creating open source projects so I&rsquo;m proud of things I created just to make my own life easier. Although I&rsquo;m not &ldquo;proud&rdquo; of it, I always use a simple CLI tool I built to track\r\nmy daily mood, how my motivation was that way, what I learned that day, and what I wish I&rsquo;d done better. For some reason I&rsquo;m always too lazy to write it down in a physical diary, but doing it through the terminal is so much easier. &nbsp;Tracking\r\nmy personal progress this way has positively affected my life so much and it let me make connections between certain events and my mood/motivation that I couldn&rsquo;t make myself through analyzing the data.&nbsp;</p><p><br></p><p><strong>What are some technologies you are excited about or want to learn more about?</strong><br>I really want to start building more with ReasonML. But I usually don&rsquo;t really learn technologies just because it&rsquo;s &ldquo;new&rdquo; and &ldquo;trendy&rdquo;, I learn them when they&rsquo;re useful in a project I&rsquo;m working on. I want\r\nto understand tools better that I&rsquo;m currently taking for granted, like the internals of a browser, computer architecture, networking, cyber security, etc.&nbsp;</p><p><br></p><p><strong>You are very active in the developer community with your educational content. Can you share some thoughts about why you think this is important?</strong><br>&ldquo;A teacher can make you or break you&rdquo;, I&rsquo;ve had so many horrible teachers in my life that totally ruined my interest for a certain subject, even though the subject turned out to be super interesting and fascinating. It&rsquo;s the worst\r\nwhen you have a teacher that isn&rsquo;t actually passionate about the subject and just leaves you confused. I noticed that people liked the way I explain things, and I love showing others how cool and fun programming can actually be. You can be so extremely\r\ncreative in this field, anything is possible. That said, I could never just do this as my main thing, I&rsquo;m still programming way more than creating educational content. But I have no hobbies besides coding so it&rsquo;s the best way to spend my &ldquo;free\r\ntime&rdquo; haha!</p><p><br></p><p><strong>Where are your favorite places (online or offline) to go to learn more about emerging trends in technology and software development?</strong><br>I learn about the latest things through either my network, conferences, or my Twitter feed. Sometimes\r\nI go to course websites like Pluralsight, but courses usually don&rsquo;t really work for me, I can&rsquo;t focus for long enough haha. I just get started with the new tool, build something with it, and if I run into issues I just reach out to the maintainer\r\n:)&nbsp;</p><p><br></p><p>The Cosmic Spotlight Series is dedicated to showcasing developers that are building apps using modern tools and contribute to the developer ecosystem. To contribute to Cosmic go to the <a href=\"https://www.cosmicjs.com/contribute\" rel=\"noopener noreferrer\" target=\"_blank\">contributor page</a>. To stay connected with us <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a> and <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"noopener noreferrer\" target=\"_blank\">join the conversation on Slack</a>.</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"jNqp7Kkyc6","value":"5768b253163172890e00002c","object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"HWlDDLKfE2","value":"<p>In this episode of the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Developer Spotlight Series</a>, we chatted with <a href=\"https://twitter.com/lydiahallie\" rel=\"noopener noreferrer\" target=\"_blank\">Lydia Hallie</a>, remote software developer and active contributor on <a href=\"https://dev.to/lydiahallie\" rel=\"noopener noreferrer\" target=\"_blank\">Dev.to</a>. She has been getting a lot of attention for her easy-to-follow (and <a href=\"https://dev.to/lydiahallie/javascript-visualized-the-javascript-engine-4cdf\" rel=\"noopener noreferrer\" target=\"_blank\">beautifully visual</a>!) educational resources for JavaScript. Follow Lydia on <a href=\"https://twitter.com/lydiahallie\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://github.com/lydiahallie\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, <a href=\"https://www.linkedin.com/in/lydia-hallie/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a>, and enjoy the conversation.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"301btw7vPC","value":"2b19acb0-5a5e-11ea-9572-1731ae9ada3f-lydia-hallie.jpg","url":"https://cdn.cosmicjs.com/2b19acb0-5a5e-11ea-9572-1731ae9ada3f-lydia-hallie.jpg","imgix_url":"https://imgix.cosmicjs.com/2b19acb0-5a5e-11ea-9572-1731ae9ada3f-lydia-hallie.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2020-01-07T00:29:31.978Z","created_by":"5357ef811693be2118000001","modified_at":"2020-10-02T02:07:53.246Z","created":"2020-01-07T00:29:31.978Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-02-28T19:13:33.603Z","unpublish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>In this episode of the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Developer Spotlight Series</a>, we chatted with <a href=\"https://twitter.com/lydiahallie\" rel=\"noopener noreferrer\" target=\"_blank\">Lydia Hallie</a>, remote software developer and active contributor on <a href=\"https://dev.to/lydiahallie\" rel=\"noopener noreferrer\" target=\"_blank\">Dev.to</a>. She has been getting a lot of attention for her easy-to-follow (and <a href=\"https://dev.to/lydiahallie/javascript-visualized-the-javascript-engine-4cdf\" rel=\"noopener noreferrer\" target=\"_blank\">beautifully visual</a>!) educational resources for JavaScript. Follow Lydia on <a href=\"https://twitter.com/lydiahallie\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://github.com/lydiahallie\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, <a href=\"https://www.linkedin.com/in/lydia-hallie/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a>, and enjoy the conversation.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/2b19acb0-5a5e-11ea-9572-1731ae9ada3f-lydia-hallie.jpg","imgix_url":"https://imgix.cosmicjs.com/2b19acb0-5a5e-11ea-9572-1731ae9ada3f-lydia-hallie.jpg"}}},{"_id":"5dd2a17ef01ded0008e10f85","order":28,"slug":"mobile-cms","title":"Mobile Apps CMS","content":"<p>Cosmic JS makes it easy to manage content for your mobile applications. &nbsp;Install the <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Official Cosmic JS JavaScript Client</a> to add dynamic content to your React Native app. &nbsp;Get a feel for mobile app development by taking a spin through <a href=\"https://cosmicjs.com/apps?languages=mobile\" rel=\"noopener noreferrer\" target=\"_blank\">Mobile apps</a> and check out the tutorials below.</p><p>You can connect to the <a href=\"https://www.cosmicjs.com/docs/rest-api/\" rel=\"noopener noreferrer\" target=\"_blank\">REST API</a> or <a href=\"https://www.cosmicjs.com/docs/graphql-api/\" rel=\"noopener noreferrer\" target=\"_blank\">GraphQL API</a> to get your content.</p><h3>Mobile CMS Articles</h3><p><a href=\"https://cosmicjs.com/blog/how-to-make-a-simple-twitter-clone-with-react-native\" rel=\"noopener noreferrer\" target=\"_blank\">How to Make a Simple Twitter Clone with React Native</a><br><a href=\"https://cosmicjs.com/blog/how-to-build-a-cross-platform-blog-using-react-native-and-nodejs\" rel=\"noopener noreferrer\" target=\"_blank\">How to Build a Cross-Platform Blog Using React Native and Node.js</a></p><h3>Mobile CMS Resources</h3><p><a href=\"https://cosmicjs.com/docs/\">Cosmic JS Docs</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\"></a><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official JavaScript Client</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3>Examples</h3><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><code style=' font-size: inherit; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: 0px 0px; text-align: left;'>npm i cosmicjs</code></pre><p>Then in your JavaScript file, get your content:</p><div class=\"fr-embedly     \" data-original-embed=\"<a href='https://runkit.com/tonyspiro/5ad9109c320cd6001286359c' class='embedly-card'></a>\"><a href=\"https://runkit.com/tonyspiro/5ad9109c320cd6001286359c\" class=\"embedly-card\"></a></div>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"nsK5n7tAzt","value":"f4af2090-0a0a-11ea-95fe-01afbd7f5f3b-best-mobile-cms.svg","url":"https://cdn.cosmicjs.com/f4af2090-0a0a-11ea-95fe-01afbd7f5f3b-best-mobile-cms.svg","imgix_url":"https://imgix.cosmicjs.com/f4af2090-0a0a-11ea-95fe-01afbd7f5f3b-best-mobile-cms.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"5Si89uYlzk","value":"f4af2090-0a0a-11ea-95fe-01afbd7f5f3b-best-mobile-cms.svg","url":"https://cdn.cosmicjs.com/f4af2090-0a0a-11ea-95fe-01afbd7f5f3b-best-mobile-cms.svg","imgix_url":"https://imgix.cosmicjs.com/f4af2090-0a0a-11ea-95fe-01afbd7f5f3b-best-mobile-cms.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"HL2jvoCB5J","value":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for your mobile websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"7w9cyeFol3","value":"Mobile Apps"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"ABLbLBIhx3","value":"Cosmic is the best CMS for your mobile websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"bKgxBCGPGM","value":"309fbe40-04d2-11ea-944c-cfd32d7bf8a6-logo-big.jpg","url":"https://cdn.cosmicjs.com/309fbe40-04d2-11ea-944c-cfd32d7bf8a6-logo-big.jpg","imgix_url":"https://imgix.cosmicjs.com/309fbe40-04d2-11ea-944c-cfd32d7bf8a6-logo-big.jpg"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"0nkZe2ltKR","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"NjtyUYAvSU","value":"Best Headless CMS for Mobile Apps"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"OTTAsKOJHs","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]},{"children":null,"type":"html-textarea","title":"Page Overview","key":"page_overview","id":"qgkci7dgbobexabk1bku","value":""},{"children":null,"type":"html-textarea","title":"SEO Content","key":"seo_content","id":"aacezqvouguzizybwdwd","value":"<p>Cosmic is the best CMS for Mobile websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-22T23:07:51.159Z","created_by":"5357ef811693be2118000001","created":"2019-11-18T13:49:50.244Z","status":"published","modified_at":"2020-08-14T21:52:46.574Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-08-14T21:52:46.574Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/f4af2090-0a0a-11ea-95fe-01afbd7f5f3b-best-mobile-cms.svg","imgix_url":"https://imgix.cosmicjs.com/f4af2090-0a0a-11ea-95fe-01afbd7f5f3b-best-mobile-cms.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/f4af2090-0a0a-11ea-95fe-01afbd7f5f3b-best-mobile-cms.svg","imgix_url":"https://imgix.cosmicjs.com/f4af2090-0a0a-11ea-95fe-01afbd7f5f3b-best-mobile-cms.svg"},"blurb":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for your mobile websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Mobile Apps","seo_description":"Cosmic is the best CMS for your mobile websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/309fbe40-04d2-11ea-944c-cfd32d7bf8a6-logo-big.jpg","imgix_url":"https://imgix.cosmicjs.com/309fbe40-04d2-11ea-944c-cfd32d7bf8a6-logo-big.jpg"},"code_example":"","seo_title":"Best Headless CMS for Mobile Apps","videos":[],"page_overview":"","seo_content":"<p>Cosmic is the best CMS for Mobile websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"}},{"_id":"59e823999caa0d8664000574","slug":"modern-cms","title":"Modern CMS","content":"<p>Cosmic JS offers a powerful CMS for any website or web-based application. &nbsp;Install the <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Official Cosmic JS JavaScript Client</a> to integrate content into your app in minutes. &nbsp;Or simply use the <a href=\"https://cosmicjs.com/docs/rest\">REST API</a>. &nbsp;Get a feel for Cosmic JS by taking a spin through <a href=\"https://cosmicjs.com/apps\" rel=\"noopener noreferrer\" target=\"_blank\">our apps</a> and check out the tutorials below.</p><h3>Modern CMS Articles</h3><p><a href=\"https://cosmicjs.com/why-cms-api\">Why Go API-first?</a><br><a href=\"https://cosmicjs.com/blog/the-cosmic-stack\" rel=\"noopener noreferrer\" target=\"_blank\">The Cosmic Stack</a><br><a href=\"https://cosmicjs.com/blog/three-reasons-why-agencies-should-be-using-a-cms-api\" rel=\"noopener noreferrer\" target=\"_blank\">Three Reasons Why Agencies Should be Using a CMS API</a><br><a href=\"https://cosmicjs.com/blog/managing-users-who-manage-content\" rel=\"noopener noreferrer\" target=\"_blank\">Managing Users Who Manage Content</a><br><a href=\"https://cosmicjs.com/blog/introducing-the-new-content-editor\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Content Editor</a></p><h3>Modern CMS Resources</h3><p><a href=\"https://cosmicjs.com/docs/\">Cosmic JS Docs</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\"></a><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official JavaScript Client</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3>Examples</h3><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><code style=' font-size: inherit; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: 0px 0px; text-align: left;'>npm i cosmicjs</code></pre><p>Then in your JavaScript file, get your content:</p><div class=\"fr-embedly    \" data-original-embed=\"<a href='https://runkit.com/tonyspiro/5ad9109c320cd6001286359c' class='embedly-card'></a>\"><a href=\"https://runkit.com/tonyspiro/5ad9109c320cd6001286359c\" class=\"embedly-card\"></a></div>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"6k16awbYFW","value":"e9b89b20-b481-11e7-a8f7-d1677c94aba6-web.svg","url":"https://cdn.cosmicjs.com/e9b89b20-b481-11e7-a8f7-d1677c94aba6-web.svg","imgix_url":"https://imgix.cosmicjs.com/e9b89b20-b481-11e7-a8f7-d1677c94aba6-web.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"VOKKL1NM4c","value":"e9b89b20-b481-11e7-a8f7-d1677c94aba6-web.svg","url":"https://cdn.cosmicjs.com/e9b89b20-b481-11e7-a8f7-d1677c94aba6-web.svg","imgix_url":"https://imgix.cosmicjs.com/e9b89b20-b481-11e7-a8f7-d1677c94aba6-web.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"WAE31SYDSE","value":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best modern CMS for websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"xUjJfhwjk4","value":"CMS"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"ohtaCsPFlg","value":"Cosmic is the best modern CMS for websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"CRkaULwB71","value":"d0a2f1d0-b481-11e7-a8f7-d1677c94aba6-web.jpg","url":"https://cdn.cosmicjs.com/d0a2f1d0-b481-11e7-a8f7-d1677c94aba6-web.jpg","imgix_url":"https://imgix.cosmicjs.com/d0a2f1d0-b481-11e7-a8f7-d1677c94aba6-web.jpg"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"ePB6g14ykS","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"9qe0evDlCe","value":"Best Modern CMS"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"frgtgqfrpylludl8pnsi","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created":"2017-10-19T04:01:29.379Z","created_at":"2017-10-19T03:50:16.379Z","modified_at":"2020-06-27T19:27:52.231Z","created_by":"5357ef811693be2118000001","modified_by":"5357ef811693be2118000001","status":"published","publish_at":null,"order":29,"published_at":"2020-06-27T19:27:52.231Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/e9b89b20-b481-11e7-a8f7-d1677c94aba6-web.svg","imgix_url":"https://imgix.cosmicjs.com/e9b89b20-b481-11e7-a8f7-d1677c94aba6-web.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/e9b89b20-b481-11e7-a8f7-d1677c94aba6-web.svg","imgix_url":"https://imgix.cosmicjs.com/e9b89b20-b481-11e7-a8f7-d1677c94aba6-web.svg"},"blurb":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best modern CMS for websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"CMS","seo_description":"Cosmic is the best modern CMS for websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/d0a2f1d0-b481-11e7-a8f7-d1677c94aba6-web.jpg","imgix_url":"https://imgix.cosmicjs.com/d0a2f1d0-b481-11e7-a8f7-d1677c94aba6-web.jpg"},"code_example":"","seo_title":"Best Modern CMS","videos":[]}},{"_id":"5bd9f2a41f78072de15afdd3","order":29,"slug":"trailercraft-builds-a-website-using-react-nextjs-and-cosmic-js","title":"TrailerCraft Builds a Website using React, Next.js and Cosmic","content":"<p dir=\"ltr\"><a href=\"https://trailercraft.com\" rel=\"noopener noreferrer\" target=\"_blank\">TrailerCraft, Inc</a> has been owned and operated by Alaskans since its inception in 1969. Today it&#39;s one of the leading truck and transportation industry parts and sales facilities in Alaska, providing state of the art solutions for transport, handicap and recreational needs by selective affiliations with proven national franchises.</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/e16a5f10-f28f-11e8-8bac-059f7191e8c6-TrailerCraft.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">TrailerCraft needed a new website to provide information and service to its Alaskan audience, whose internet connectivity can vary wildly due to the landscape. Key needs for the new website were fast / optimized load times and dynamic content management, so TrailerCraft chose interactive agency <a href=\"http://thehighpointagency.com\" rel=\"noopener noreferrer\" target=\"_blank\">High Point</a> to built its zippy new React / Next.js website using Cosmic.</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/ab8199d0-f290-11e8-9797-e1d23cf8c705-TrailerCraft2.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><h4><br></h4><h3>TrailerCraft&#39;s Team Shares Feedback on Cosmic:</h3><blockquote><p><strong>Developer</strong>: &quot;The Imigx integration that Cosmic has out of the box was key to serving a beautiful, image-filled site that was well optimized. We built the site with React and Next.js server side rendering. This way the site loads fast, is SEO-compatible, and when navigating the site, only the resources needed for fallowing pages are requested, keeping load times to a strict minimum.&quot;</p><p><strong>Content Creator</strong>: &quot;From a marketer&#39;s perspective (and having a much less technical background) I really enjoy how easy it is for a novice to be able to edit and make changes on the backend. It&#39;s a very &quot;easy to use&quot; system to keep our website up to date without the struggle of contacting a web development team each time we need an update.&quot;</p><p><strong>Developer</strong>: &quot;The Cosmic API plugin for React made requesting data a breeze and the built-in hosting makes deployments and updating super quick and easy.&quot;</p></blockquote><p dir=\"ltr\"><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/73a27700-dd41-11e8-8adf-6182e31ebfc0-38949061_2071257489591655_4331379466094772224_o.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic allowed us to build a website and deliver content management exactly how we wanted it, specific for our needs. A breath of fresh air compared to the inevitably bloated admin panel that would have resulted if we used WordPress. The support team are total rock stars as well.&quot;</p><p><cite>&mdash; Brandon Reid, Lead Developer &nbsp;&nbsp;</cite></p></blockquote>","metafields":[{"value":"TrailerCraft","key":"company","title":"Company","type":"text","children":null},{"value":"Freightliner","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"TrailerCraft, Inc has been owned and operated by Alaskans since its inception in 1969. Today it's one of the leading truck and transportation industry parts and sales facilities in Alaska, providing state of the art solutions for transport, handicap and recreational needs by selective affiliations with proven national franchises.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"853efab0-dd41-11e8-a404-4bdbcb86a80c-tc-logo-lg.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/853efab0-dd41-11e8-a404-4bdbcb86a80c-tc-logo-lg.png","imgix_url":"https://imgix.cosmicjs.com/853efab0-dd41-11e8-a404-4bdbcb86a80c-tc-logo-lg.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-07-16T20:38:24.222Z","created_by":"5716b504e9c686d006000073","created":"2018-10-31T18:21:24.851Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-12-11T20:05:05.919Z","metadata":{"company":"TrailerCraft","industry_type":"Freightliner","teaser":"TrailerCraft, Inc has been owned and operated by Alaskans since its inception in 1969. Today it's one of the leading truck and transportation industry parts and sales facilities in Alaska, providing state of the art solutions for transport, handicap and recreational needs by selective affiliations with proven national franchises.\n","logo":{"url":"https://cdn.cosmicjs.com/853efab0-dd41-11e8-a404-4bdbcb86a80c-tc-logo-lg.png","imgix_url":"https://imgix.cosmicjs.com/853efab0-dd41-11e8-a404-4bdbcb86a80c-tc-logo-lg.png"}}},{"_id":"5ddd5512cc6ea60007b6c749","order":29,"slug":"introducing-gatsby-preview-for-cosmic-js","title":"Introducing Gatsby Preview for Cosmic","content":"<p><em>This article was originally published on the&nbsp;</em><a href=\"https://www.gatsbyjs.org/blog/2019-11-25-introducing-gatsby-preview-for-cosmic-js/\" rel=\"noopener noreferrer\" target=\"_blank\"><em>Gatsby Blog</em></a><em>.</em></p><p>We&rsquo;re excited to announce the official release of Gatsby Preview for <a href=\"https://www.cosmicjs.com/\" rel=\"nofollow\">Cosmic</a>. This new integration enables you to add powerful content preview functionality to your Cosmic Gatsby website.</p><h3><br>Getting Started</h3><ol><li>First go to the <a href=\"https://www.gatsbyjs.com/get-started/\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby Getting Started Page</a> and follow the links for Cosmic.</li><li>Select the <a href=\"https://www.cosmicjs.com/apps/gatsby-blog\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic-powered Gatsby Blog</a><br><img src=\"https://cdn.cosmicjs.com/d9de5340-106c-11ea-95fe-01afbd7f5f3b-pick-starter.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></li><li>You will then be asked for your GitHub and Cosmic authentication, so make sure you have both accounts set up (<a href=\"https://app.cosmicjs.com/signup\" rel=\"noopener noreferrer\" target=\"_blank\">sign up for Cosmic here</a>).</li><li>After onboarding, go to any Post in your Cosmic Bucket and find the big, beautiful, purple button to preview your content.&nbsp;</li></ol><p><br></p><h4><img data-action=\"zoom\" src=\"https://cdn.cosmicjs.com/72ecfb60-106b-11ea-95fe-01afbd7f5f3b-cosmic-js-gatsby-preview-screenshot.jpg\" alt=\"Cosmic Gatsby Preview Screenshot\" class=\"fr-fic fr-dii\" style=\"width: 100%;\"><br></h4><h4><br></h4><h3>What happens?</h3><p>After clicking the &ldquo;Open Preview&rdquo; button, a new tab will open to instantly show you what the content looks like for this specific version on your Gatsby website. This simple one-click preview will greatly enhance your content team&rsquo;s\r\ncontent-creation workflow.</p><p><img data-action=\"zoom\" src=\"https://cdn.cosmicjs.com/7bca44e0-106b-11ea-95fe-01afbd7f5f3b-gatsby-preview.gif\" alt=\"Cosmic Gatsby Preview Screenshot\" class=\"fr-fic fr-dii\" style=\"width: 100%;\"></p><h3><br>How did this integration happen?</h3><p>The Cosmic / Gatsby Preview integration is the result of close collaboration between both teams to make the integration as easy as possible. Both sides had to refactor a bit of existing functionality to make it seamless. And the feedback that came\r\nfrom the collaboration effort actually helped to improve both products. We&rsquo;re happy to say this powerful feature can be integrated in just a few clicks.</p><h3><br>Why is this a big deal?</h3><p>Both Gatsby and Cosmic believe deeply in providing developers the best development experience possible. But it&rsquo;s not just about developers. Content creation team members are crucial to building great web products. And one of the most requested\r\nfeatures for content creators is preview, but this has been a challenge for developer teams pushing for highly-optimized JAMStack websites built on Gatsby.</p><p>Gatsby Preview solves this problem by providing a simple button for content creators to experience an instant preview of content directly in the CMS dashboard. Gatsby preview with the <a href=\"https://www.cosmicjs.com/headless-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic headless CMS</a>, is a further extension to empower content creators to preview content quickly and easily, giving teams faster content marketing velocity.</p><h3><br>What&rsquo;s next?</h3><p>We&rsquo;re excited to continue to work closely with the Gatsby team to help create more value-added integrations between both services. It&rsquo;s our goal to continue to provide the full spectrum of team members the best tools to be successful.</p><p>Our users have been very helpful with letting us know ways to improve the Cosmic + Gatsby stack combo. So if you have any suggestions on ways we can improve, please let us know in the <a href=\"https://cosmicslack.herokuapp.com/\" rel=\"nofollow\">Cosmic Slack channel</a> or on <a href=\"https://twitter.com/cosmic_js\" rel=\"nofollow\">our Twitter</a>.</p><p><br>Happy building!</p><p>&mdash; Tony and the Cosmic Team</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","id":"Vos3yQSrg9","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"id":"VNXMnh3TG8","key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>We&rsquo;re excited to announce the official release of Gatsby Preview for Cosmic that enables you to add powerful content preview functionality to your Cosmic Gatsby website.</p>"},{"value":"15b01db0-106b-11ea-95fe-01afbd7f5f3b-gatsby-cosmic.jpg","id":"dun58avqID","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/15b01db0-106b-11ea-95fe-01afbd7f5f3b-gatsby-cosmic.jpg","imgix_url":"https://imgix.cosmicjs.com/15b01db0-106b-11ea-95fe-01afbd7f5f3b-gatsby-cosmic.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2019-11-26T16:38:42.877Z","created_by":"5357ef811693be2118000001","modified_at":"2020-10-02T02:07:53.246Z","created":"2019-11-26T16:38:42.877Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-12-02T15:35:19.146Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We&rsquo;re excited to announce the official release of Gatsby Preview for Cosmic that enables you to add powerful content preview functionality to your Cosmic Gatsby website.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/15b01db0-106b-11ea-95fe-01afbd7f5f3b-gatsby-cosmic.jpg","imgix_url":"https://imgix.cosmicjs.com/15b01db0-106b-11ea-95fe-01afbd7f5f3b-gatsby-cosmic.jpg"}}},{"_id":"5d93c087b23065032f5b6348","order":29,"slug":"filters-and-smart-views","title":"Filters and Smart Views","content":"<p>We&#39;re excited to release a new feature that should be a huge time-saver for finding and using your Bucket content: Filters and Smart Views. You can now filter and save smart views in your Objects table view in the Dashboard.<br><br><strong>Filter and Save Smart View</strong><br><img src=\"https://cdn.cosmicjs.com/6b658340-e48c-11e9-abb6-69133faab637-smart-views.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p>Check it out by <a href=\"https://cosmicjs.com/login\" rel=\"noopener noreferrer\" target=\"_blank\">logging in</a> and going to any Object Type in your Bucket.&nbsp;</p><p><br><strong>Filters</strong><br>Click the &quot;Filters&quot; button on any Object Type table view in the Dashboard. Filter Objects by:</p><ul><li>Status</li><li>Created by</li><li>Metadata</li></ul><p><br><strong>Smart views</strong><br>You can then save your filtered content into &quot;Smart Views&quot; that will be added to the sidebar of your Bucket dashboard for easy access. Save for just yourself, or for your whole team.</p><p><br><strong>API Filtering</strong><br>After filtering, click the &quot;Developer Tools&quot; button to then get the API REST request and NPM module code for your filter options. Metadata filters are available in the latest <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">NPM module v3.2.31</a>. Read more about all NPM and API options in <a href=\"https://docs.cosmicjs.com/rest-api/objects.html#get-objects\" rel=\"noopener noreferrer\" target=\"_blank\">the Cosmic docs</a>.</p><p>It looks\r\nlike this:</p><div class=\"fr-embedly                         \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/a2fc17b144f136919c03349c257bbc0b' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/a2fc17b144f136919c03349c257bbc0b\" class=\"embedly-card\"></a></div><p>I hope you enjoy the new capabilities. This feature comes as a direct response to users that needed a better way to find and filter content.</p><p>If you have any questions or update that you would like to see shipped, please <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and <a href=\"https://cosmicslack.now.sh/\" rel=\"noopener noreferrer\" target=\"_blank\">join the conversation on Slack</a>.</p>","metafields":[{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"roVXMlQ8u8","value":"2019-10-02"},{"children":null,"type":"object","title":"Author","key":"author","id":"qW23hQni5o","value":"5768b253163172890e00002c","object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"onE1KWeC7u","value":"","url":null,"imgix_url":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2019-10-01T21:09:27.323Z","created_by":"5357ef811693be2118000001","modified_at":"2020-08-10T14:02:39.393Z","created":"2019-10-01T21:09:27.323Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-08-10T14:00:31.970Z","unpublish_at":null,"metadata":{"published_date":"2019-10-02","author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":null,"imgix_url":null}}},{"_id":"59f102cbd4de657279002f97","order":30,"slug":"datalyze-solutions-adds-blog-and-job-feeds","title":"Datalyze Solutions Adds a Blog Feed","content":"<p>Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier. That&#39;s why <a href=\"https://www.datalyze-solutions.com\" rel=\"noopener noreferrer\" target=\"_blank\">Datalyze Solutions</a> chooses Cosmic to deliver its content from the cloud for its Blog feeds.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/564c8f40-ca4d-11e7-a5c4-d31978c51f26-Screen Shot 2017-11-15 at 3.38.13 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&quot;Cosmic has been in use at Datalyze Solutions for more than one and a half years. Cosmic has become a critically important tool for us to publish blog posts quickly and easily. This way, our customers and partners can stay informed about the latest news from our company and other industry-relevant information. Cosmic offers exactly the flexibility and features we really need as content editors!&quot;</p><p>&mdash; Carolin Bauer, Content Editor and Marketing Manager</p></blockquote>","metafields":[{"value":"Datalyze Solutions","key":"company","title":"Company","type":"text","children":null},{"value":"Internet","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier.","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","imgix_url":"https://imgix.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-25T21:31:55.033Z","created_by":"5716b504e9c686d006000073","created":"2017-10-25T21:31:55.033Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"metadata":{"company":"Datalyze Solutions","industry_type":"Internet","teaser":"Data. Intelligence. Applications. Location Based Analytics. When everything is converging, teams needs collaboration tools to make their lives easier.","logo":{"url":"https://cdn.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png","imgix_url":"https://imgix.cosmicjs.com/b4173bb0-dc2d-11e7-9201-fb5838341592-DS_Logo_Blau.png"}}},{"_id":"5d24ecc0144e051131561889","order":30,"slug":"developer-spotlight-jamie-introcaso","title":"Developer Spotlight: Jamie Introcaso","content":"<p>In this installment of the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Developer Spotlight Series</a>, we sat down with<a href=\"https://www.cosmicjs.com/jintrocaso\" rel=\"noopener noreferrer\" target=\"_blank\">&nbsp;Jamie Introcaso</a>, an experienced Software Developer residing in Charlotte, North Carolina. Jamie is an active member of the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a> and recently shared a <a href=\"https://www.cosmicjs.com/articles/moving-from-wordpress-to-limitless-opportunity-using-cosmic-js-jx2ei3kz\" rel=\"noopener noreferrer\" target=\"_blank\">blog</a> documenting his migration from WordPress to Cosmic using the <a href=\"https://www.cosmicjs.com/extensions/wordpress-importer\" rel=\"noopener noreferrer\" target=\"_blank\">WordPress Importer Extension</a>. With more community projects on the way, we&#39;re excited to interview one of our own for this Spotlight. 😎 Check Jamie out on his <a href=\"https://www.jamieintrocaso.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic-powered website</a>, <a href=\"https://twitter.com/JLIntro\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> and <a href=\"https://www.linkedin.com/in/jamieintrocaso/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a>, and enjoy the conversation.<br><br></p><p><img src=\"https://cdn.cosmicjs.com/52e34da0-a320-11e9-b0d9-35a45c375d76-jamieintrocasoheadshot.jpg\" style=\"width: 300px; margin: 0 20px 20px 0;\" class=\"fr-fic fr-fil fr-dii pull-left\"></p><p><strong>Cosmic</strong><strong>: When did you first begin building software?</strong><br><strong>Jamie:&nbsp;</strong>After graduating high school, I worked as a live sound engineer and bartender for almost 15 years before deciding to go back to school and finish my bachelors degree. During my time working as a sound engineer, I had noticed how much more was being done using technology and software. I have always been drawn to technology from a young age, so that passion paired with the job growth in the industry made getting a degree in computer science an easy choice. I graduated in 2014 and have been working professionally in the field since then. And it has been super rewarding. Everyday I am learning something or even better teaching someone about something to solve a problem.<br><br><strong>What is your preferred development stack?</strong><br>I have mostly worked in the C#/.NET stack in various forms such as WebForms and MVC and that is what I feel most comfortable with. I am starting to try and branch out a little bit more and learning more front end frameworks. It is nice because I can still have the familiarity of .NET using WebAPI and grow my skills using a new front end framework.<br><br><strong>What past projects are you most proud of and why?</strong><br>I would say the project I am most proud of is a MES (Manufacturing Execution System) that was built by myself and two other developers. It was my first time leading and architecting a project from the ground up so that was good and bad and exciting and scary. Luckily I had a great team supporting me. I still would marvel when I would visit the plant and see all these operators using software that I had built. It was definitely a trial by fire experience. I realized that they were not going to shut the plant down during our initial &ldquo;go live&rdquo; so I could fix my software! But I also realized that I was up to the task and was able to execute a project and implement it at a professional level.<br><br><strong>What made you want to get away from WordPress and shift to a headless CMS?</strong><br>I initially went to WordPress out of convenience, maybe more so laziness actually. It was just so easy to get a blog up and running. And it was. I had a nice editor to type my blog posts for the world to read. And I could go in and click and add pretty themes and plugins that supposedly improved my performance and caching, basically treating symptoms caused by WordPress itself! It was just madness!&nbsp;</p><p dir=\"ltr\">I tried to set up a WordPress development environment a couple of times to tweak my site and it was so frustrating! I can make a UI. I just needed the part where I could host my content and have it delivered to me. That is what led me to looking into the idea of a <a href=\"https://www.cosmicjs.com/headless-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Headless CMS</a>. For someone like me who was versed in programming applications, it just made sense. The idea of just having something that would deliver my content to me and allow me to implement it in the way of my choosing was so liberating. And have you ever tried to migrate a WordPress site from one environment to another? It&rsquo;s maddening!!<br><br><strong>What&#39;s your best advice to a developer mired in WordPress right now? <br></strong>Ask yourself how much of your development time is spent creating workarounds in how WordPress handles things. How much time have you spent on updates for WordPress? Fixing broken plugins? Rolling back changes and doing database updates? Think about what you could use that time for. Put more time into your site. Create another site. Spend more time with your friends and family. There is a better way. You have all the tools you need to move away from WordPress. More than likely you know HTML and CSS and JavaScript. That is all you need. <a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> has the <a href=\"https://www.cosmicjs.com/extensions/wordpress-importer\" rel=\"noopener noreferrer\" target=\"_blank\">tools to migrate your posts&nbsp;</a>into their API in a matter of minutes.<br><br><strong>What are some technologies you are excited to learn more about?</strong><br>As I mentioned before I am starting to explore learning some front end frameworks. Primarily Angular is what I have been working on learning. At my current position, we are using it so it is nice to get paid to learn it! I also have a desire to learn more NodeJS. I have used it a little bit, and I just think that deeper learning of Javascript in both the front and back ends will be useful to me in my career. Other than those, I feel like learning other technologies and concepts that help scalability and reliability are the next key things for me to focus on. I think knowledge of things like microservices, containerization, distributed systems and system design are conceptually some of the next things that I will be focusing on learning.<br><br>The Cosmic Spotlight Series is dedicated to showcasing developers that are building apps using modern tools. Learn how to <a href=\"https://www.cosmicjs.com/contribute\" rel=\"noopener noreferrer\" target=\"_blank\">contribute here</a>. To stay connected with us <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">join the conversation on Slack</a>.</p><p dir=\"ltr\">Photo by <a href=\"https://unsplash.com/@cgower?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Christopher Gower</a> on <a href=\"https://unsplash.com/?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Unsplash</a></p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In this installment of the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Developer Spotlight Series</a>, we sat down with<a href=\"https://www.cosmicjs.com/jintrocaso\" rel=\"noopener noreferrer\" target=\"_blank\">&nbsp;Jamie Introcaso</a>, an experienced Software Developer residing in Charlotte, North Carolina. Jamie is an active member of the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a> and recently wrote a <a href=\"https://www.cosmicjs.com/articles/moving-from-wordpress-to-limitless-opportunity-using-cosmic-js-jx2ei3kz\" rel=\"noopener noreferrer\" target=\"_blank\">blog</a> detailing his migration from WordPress to Cosmic. With more community projects on the way, we&#39;re excited to interview one of our own for this Spotlight. 😎 Follow Jamie on his <a href=\"https://www.jamieintrocaso.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic-powered website</a>, <a href=\"https://twitter.com/JLIntro\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> and <a href=\"https://www.linkedin.com/in/jamieintrocaso/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> and enjoy the conversation.<br><br></p>"},{"value":"3e0e3d10-cb55-11e9-834a-5307b4b63f5d-m_HRfLhgABo.jpg?q=&auto=compress,enhance,&w=1200&h=1000&fit=crop&crop=top,left,","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/3e0e3d10-cb55-11e9-834a-5307b4b63f5d-m_HRfLhgABo.jpg?q=&auto=compress,enhance,&w=1200&h=1000&fit=crop&crop=top,left,","imgix_url":"https://imgix.cosmicjs.com/3e0e3d10-cb55-11e9-834a-5307b4b63f5d-m_HRfLhgABo.jpg?q=&auto=compress,enhance,&w=1200&h=1000&fit=crop&crop=top,left,"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2019-07-09T19:36:32.628Z","created_by":"5716b504e9c686d006000073","modified_at":"2020-10-02T02:07:53.246Z","created":"2019-07-09T19:36:32.628Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-08-30T18:41:02.332Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this installment of the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Developer Spotlight Series</a>, we sat down with<a href=\"https://www.cosmicjs.com/jintrocaso\" rel=\"noopener noreferrer\" target=\"_blank\">&nbsp;Jamie Introcaso</a>, an experienced Software Developer residing in Charlotte, North Carolina. Jamie is an active member of the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a> and recently wrote a <a href=\"https://www.cosmicjs.com/articles/moving-from-wordpress-to-limitless-opportunity-using-cosmic-js-jx2ei3kz\" rel=\"noopener noreferrer\" target=\"_blank\">blog</a> detailing his migration from WordPress to Cosmic. With more community projects on the way, we&#39;re excited to interview one of our own for this Spotlight. 😎 Follow Jamie on his <a href=\"https://www.jamieintrocaso.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic-powered website</a>, <a href=\"https://twitter.com/JLIntro\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> and <a href=\"https://www.linkedin.com/in/jamieintrocaso/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> and enjoy the conversation.<br><br></p>","featured_image":{"url":"https://cdn.cosmicjs.com/3e0e3d10-cb55-11e9-834a-5307b4b63f5d-m_HRfLhgABo.jpg?q=&auto=compress,enhance,&w=1200&h=1000&fit=crop&crop=top,left,","imgix_url":"https://imgix.cosmicjs.com/3e0e3d10-cb55-11e9-834a-5307b4b63f5d-m_HRfLhgABo.jpg?q=&auto=compress,enhance,&w=1200&h=1000&fit=crop&crop=top,left,"}}},{"_id":"5b02c9008435cd1b1f0acec5","order":30,"slug":"ar-cms","title":"AR CMS","content":"<p>Augmented reality applications require dynamic content. &nbsp;Cosmic JS makes it easy to manage content for your AR applications.</p><h3>AR CMS Resources</h3><p><a href=\"https://github.com/cosmicjs/react-vr-art-gallery\" rel=\"noopener noreferrer\" target=\"_blank\">React VR Art Gallery Example</a><br><a href=\"https://cosmicjs.com/articles/react-vr-art-gallery-app-jh10xe75\" rel=\"noopener noreferrer\" target=\"_blank\">Video: React VR Art Gallery App</a><br><a href=\"https://cosmicjs.com/case-studies/medical-realities-delivers-vr-surgical-content\" rel=\"noopener noreferrer\" target=\"_blank\">VR Case Study: Medical Realities</a>&nbsp;<br><a href=\"https://cosmicjs.com/case-studies/unleashed-xr-augmented-mixed-and-virtual-realities\" rel=\"noopener noreferrer\" target=\"_blank\">VR Case Study: Unleashed XR</a><br><a href=\"https://cosmicjs.com/docs/\">Cosmic JS Docs</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official JavaScript Client</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3>Using the Cosmic JS NPM Module</h3><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><code style=' font-size: inherit; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: 0px 0px; text-align: left;'>npm i cosmicjs</code></pre><p style=' color: rgb(51, 51, 51); font-family: \"Open Sans\", sans-serif; font-size: 16px; text-align: start; background-color: rgb(255, 255, 255);'>Then in your JavaScript file, get your content:</p><div class=\"fr-embedly          \" data-original-embed=\"<a href='https://runkit.com/tonyspiro/5ad9109c320cd6001286359c' class='embedly-card'></a>\"><a href=\"https://runkit.com/tonyspiro/5ad9109c320cd6001286359c\" class=\"embedly-card\"></a></div><p>Augmented Reality icon by Alessandro Suraci from the Noun Project</p>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"CoIglQVuP8","value":"cbefd7c0-5cfb-11e8-9276-0b00f900a0a0-ar.png","url":"https://cdn.cosmicjs.com/cbefd7c0-5cfb-11e8-9276-0b00f900a0a0-ar.png","imgix_url":"https://imgix.cosmicjs.com/cbefd7c0-5cfb-11e8-9276-0b00f900a0a0-ar.png"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"hMpzIEcCjr","value":"cbefd7c0-5cfb-11e8-9276-0b00f900a0a0-ar.png","url":"https://cdn.cosmicjs.com/cbefd7c0-5cfb-11e8-9276-0b00f900a0a0-ar.png","imgix_url":"https://imgix.cosmicjs.com/cbefd7c0-5cfb-11e8-9276-0b00f900a0a0-ar.png"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"4yW2OJGT1y","value":"<p>Cosmic is the best CMS for AR websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"6FeTQX5pEw","value":"AR CMS"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"OyHpQvO4n9","value":"Cosmic is the best CMS for AR websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"yAwpfqUNUC","value":"cbefd7c0-5cfb-11e8-9276-0b00f900a0a0-ar.png","url":"https://cdn.cosmicjs.com/cbefd7c0-5cfb-11e8-9276-0b00f900a0a0-ar.png","imgix_url":"https://imgix.cosmicjs.com/cbefd7c0-5cfb-11e8-9276-0b00f900a0a0-ar.png"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"FrechtT0lv","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"GsexjEKnwd","value":"Best Headless CMS for AR"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"frgtgqfrpylludl8pnsi","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2018-05-21T13:24:40.741Z","created_by":"5357ef811693be2118000001","created":"2018-05-21T13:26:24.254Z","status":"published","modified_at":"2020-06-27T19:28:27.276Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-27T19:28:27.276Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/cbefd7c0-5cfb-11e8-9276-0b00f900a0a0-ar.png","imgix_url":"https://imgix.cosmicjs.com/cbefd7c0-5cfb-11e8-9276-0b00f900a0a0-ar.png"},"thumbnail":{"url":"https://cdn.cosmicjs.com/cbefd7c0-5cfb-11e8-9276-0b00f900a0a0-ar.png","imgix_url":"https://imgix.cosmicjs.com/cbefd7c0-5cfb-11e8-9276-0b00f900a0a0-ar.png"},"blurb":"<p>Cosmic is the best CMS for AR websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"AR CMS","seo_description":"Cosmic is the best CMS for AR websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/cbefd7c0-5cfb-11e8-9276-0b00f900a0a0-ar.png","imgix_url":"https://imgix.cosmicjs.com/cbefd7c0-5cfb-11e8-9276-0b00f900a0a0-ar.png"},"code_example":"","seo_title":"Best Headless CMS for AR","videos":[]}},{"_id":"5d6e86dca8fabe30a84678ca","order":30,"slug":"customize-rest-api-response-object-metafields-search","title":"Customize REST API Response, Object Metafields Search","content":"<p>We&#39;ve got a couple updates to make editing and integrating your Cosmic-powered content faster and easier.<br><br><strong>1. Customize API Response Data</strong><br>You can now add a query parameter (<code>props</code>) to the <a href=\"https://docs.cosmicjs.com/rest-api/\" rel=\"noopener noreferrer\" target=\"_blank\">REST API</a> (or <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">NPM module</a>)\r\nto limit the response data to only selected properties. Think of this like GraphQL-ifying your REST response to get only the data you need.</p><p>For example here&#39;s the old way to get Objects from the REST API which gives you everything:</p><pre class=\"language-json\"><a href=\"https://api.cosmicjs.com/v1/cosmic-js/objects?pretty=true&hide_metafields=true&type=changelogs&limit=20\"></a><a href=\"https://api.cosmicjs.com/v1/simple-react-blog/objects?pretty=true&hide_metafields=true&type=posts&limit=20&props=slug,title,content\"></a><a href=\"https://api.cosmicjs.com/v1/simple-react-blog/objects?pretty=true&hide_metafields=true&type=posts&limit=20&props=slug,title,content\"></a>https://api.cosmicjs.com/v1/simple-react-blog/objects?pretty=true&amp;hide_metafields=true&amp;type=posts&amp;limit=20</pre><div class=\"fr-embedly                                           \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/a5784c46d7e3063a29b40357740e847d' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/a5784c46d7e3063a29b40357740e847d\" class=\"embedly-card\"></a></div><p>And now the same query with added <code>props</code> query parameter.</p><pre class=\"language-json\"><a href=\"https://api.cosmicjs.com/v1/cosmic-js/objects?pretty=true&hide_metafields=true&type=changelogs&limit=20&props=slug,title,\"></a><a href=\"https://api.cosmicjs.com/v1/simple-react-blog/objects?pretty=true&hide_metafields=true&type=posts&limit=20&props=slug,title,content\"></a><a href=\"https://api.cosmicjs.com/v1/simple-react-blog/objects?pretty=true&hide_metafields=true&type=posts&limit=20&props=slug,title,content\"></a>https://api.cosmicjs.com/v1/simple-react-blog/objects?pretty=true&amp;hide_metafields=true&amp;type=posts&amp;limit=20&amp;props=slug,title,content</pre><div class=\"fr-embedly                                           \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/5b090588aa9f119a472ef8d0e99258b5' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/5b090588aa9f119a472ef8d0e99258b5\" class=\"embedly-card\"></a></div><p>As you can see, adding <code>props</code> to your query makes your response much more concise giving you only the data you need. This should make your API responses faster, giving you and your end users a better experience <span class=\"fr-emoticon fr-deletable\">😎</span></p><p><strong>Note:</strong> You can also add <code>metadata.your_key</code> to get selected metadata values (limited to one level only).</p><p>We&#39;ve also updated the &quot;Developer Tools&quot; modal in the Dashboard to check out what this looks like:</p><p><img src=\"https://cdn.cosmicjs.com/18a16340-cf1a-11e9-865f-e971d00407c2-dev-tools.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><strong>UPDATE: 9/10/2019</strong><br>You can also limit the depth of your response data by adding the query param <code>depth</code>. This will limit the nested depth of Object Metafields.</p><p>Check out <a href=\"https://docs.cosmicjs.com/rest-api/objects.html#get-objects\" rel=\"noopener noreferrer\" target=\"_blank\">the updated REST API docs</a> for more info.</p><p><br></p><p><strong>2. Search Objects in Object Metafields</strong><br>One of our most popular features is the ability to connect Objects to each other to create relationships. For example: Blog Posts may need to connect to Categories and Authors which you can accomplish using Object Relationship Metafields.</p><p>It&#39;s now much easier to find the Object you&#39;re looking for with a new search feature on the Object Select modal. Simply type in a keyword to quickly find the Objects you need. Gif below:</p><p><img src=\"https://cdn.cosmicjs.com/672840d0-ce69-11e9-8280-b9ff66e6005d-search.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"2019-09-10","key":"published_date","title":"Published Date","type":"date","children":null},{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":null,"imgix_url":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2019-09-03T15:29:32.128Z","created_by":"5357ef811693be2118000001","modified_at":"2020-08-10T14:02:39.393Z","created":"2019-09-03T15:29:32.128Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-09-10T16:07:36.595Z","metadata":{"published_date":"2019-09-10","author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":null,"imgix_url":null}}},{"_id":"595e75beb7cb932a71000110","order":31,"slug":"emberjs-cms","title":"Ember.js CMS","content":"<p>Cosmic JS makes it easy to manage content for your Ember.js applications. Install the <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Official Cosmic JS JavaScript Client</a> to add dynamic content to your app. Get a feel for Ember.js by taking a spin through <a href=\"https://cosmicjs.com/apps?languages=Ember.js\" rel=\"noopener noreferrer\" target=\"_blank\">our Ember.js apps</a> and check out the tutorials below.</p><h3>Ember.js CMS Articles</h3><p><a href=\"https://cosmicjs.com/blog/how-to-build-a-real-estate-website-using-emberjs\" rel=\"noopener noreferrer\" target=\"_blank\">How to Build a Real Estate Website Using Ember.js</a></p><h3>Ember.js CMS Resources</h3><p><a href=\"https://cosmicjs.com/docs/\">Cosmic JS Docs</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\"></a><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official JavaScript Client</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3>Examples</h3><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><code style=' font-size: inherit; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: 0px 0px; text-align: left;'>npm i cosmicjs</code></pre><p>Then in your JavaScript file, get your content:</p><div class=\"fr-embedly  \" data-original-embed=\"<a href='https://runkit.com/tonyspiro/5ad9109c320cd6001286359c' class='embedly-card'></a>\"><a href=\"https://runkit.com/tonyspiro/5ad9109c320cd6001286359c\" class=\"embedly-card\"></a></div>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"Fh399127VV","value":"8640b3e0-6281-11e7-a707-9bd50fd3b6b0-Ember.js_Logo_and_Mascot.png","url":"https://cdn.cosmicjs.com/8640b3e0-6281-11e7-a707-9bd50fd3b6b0-Ember.js_Logo_and_Mascot.png","imgix_url":"https://imgix.cosmicjs.com/8640b3e0-6281-11e7-a707-9bd50fd3b6b0-Ember.js_Logo_and_Mascot.png"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"utC5jTBA3S","value":"8d1cd630-6281-11e7-8d46-7b261262b385-Ember.js_Logo_and_Mascot.png","url":"https://cdn.cosmicjs.com/8d1cd630-6281-11e7-8d46-7b261262b385-Ember.js_Logo_and_Mascot.png","imgix_url":"https://imgix.cosmicjs.com/8d1cd630-6281-11e7-8d46-7b261262b385-Ember.js_Logo_and_Mascot.png"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"NUcNsVAdzU","value":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic JS makes it easy to manage content for your Ember.js applications. Install the Official Cosmic JS Javascript Client to integrate content into your app in minutes.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"X10ZWX9Vdq","value":"Ember.js"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"UgIMqHv95u","value":"Best Headless CMS for Ember.js.  Use Cosmic JS to power content for your Ember.js applications."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"UnAq7qVcVt","value":"9769b540-6281-11e7-8d46-7b261262b385-Ember.js_Logo_and_Mascot.png","url":"https://cdn.cosmicjs.com/9769b540-6281-11e7-8d46-7b261262b385-Ember.js_Logo_and_Mascot.png","imgix_url":"https://imgix.cosmicjs.com/9769b540-6281-11e7-8d46-7b261262b385-Ember.js_Logo_and_Mascot.png"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"7Fi2aaclS5","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"1du6lr0buj","value":"Best Headless CMS for Ember.js"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"frgtgqfrpylludl8pnsi","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-22T23:07:51.159Z","created_by":"5357ef811693be2118000001","created":"2017-07-06T17:39:10.101Z","status":"published","modified_at":"2020-07-22T13:12:15.591Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-11-11T22:20:47.155Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/8640b3e0-6281-11e7-a707-9bd50fd3b6b0-Ember.js_Logo_and_Mascot.png","imgix_url":"https://imgix.cosmicjs.com/8640b3e0-6281-11e7-a707-9bd50fd3b6b0-Ember.js_Logo_and_Mascot.png"},"thumbnail":{"url":"https://cdn.cosmicjs.com/8d1cd630-6281-11e7-8d46-7b261262b385-Ember.js_Logo_and_Mascot.png","imgix_url":"https://imgix.cosmicjs.com/8d1cd630-6281-11e7-8d46-7b261262b385-Ember.js_Logo_and_Mascot.png"},"blurb":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic JS makes it easy to manage content for your Ember.js applications. Install the Official Cosmic JS Javascript Client to integrate content into your app in minutes.</p>","headline":"Ember.js","seo_description":"Best Headless CMS for Ember.js.  Use Cosmic JS to power content for your Ember.js applications.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/9769b540-6281-11e7-8d46-7b261262b385-Ember.js_Logo_and_Mascot.png","imgix_url":"https://imgix.cosmicjs.com/9769b540-6281-11e7-8d46-7b261262b385-Ember.js_Logo_and_Mascot.png"},"code_example":"","seo_title":"Best Headless CMS for Ember.js","videos":[]}},{"_id":"5d23649c3ad0334d73a01e3d","order":31,"slug":"introducing-workspaces","title":"Introducing Workspaces","content":"<p><img src=\"https://cosmic-s3.imgix.net/50a851e0-a198-11e9-8e98-936834bd7bf5-workspace.jpg\" data-name=\"workspace.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>We&#39;re excited to announce a new way to collaborate with your team on your digital projects. Introducing <a href=\"https://www.cosmicjs.com/workspaces\">Workspaces</a>.<br><br>Included with every Enterprise plan, your Workspace gives your team all of the powerful features of the Cosmic hosted CMS plus added benefits that make it your own.<br><br>With your company workspace you get:<br><br>✅ A branded company login page<br>✅ White label dashboard experience<br>✅ Custom company subdomain<br>✅ Usage and activity reports<br><br></p><p>See the <a href=\"https://www.cosmicjs.com/workspaces\">Workspaces page</a> for more information.<br><br>It&#39;s our goal to help your team build digital projects faster and easier. With Workspaces, you now have a single location to collaborate more efficiently with your company on your great work.<br><br>If you have any questions, <a href=\"https://www.cosmicjs.com/community\">join the community on Slack</a> and <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a> for more updates.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>We&#39;re excited to announce a new way to collaborate with your team on your digital projects. Introducing <a href=\"https://www.cosmicjs.com/workspaces\">Workspaces</a>.</p>"},{"value":"50a851e0-a198-11e9-8e98-936834bd7bf5-workspace.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/50a851e0-a198-11e9-8e98-936834bd7bf5-workspace.jpg","imgix_url":"https://imgix.cosmicjs.com/50a851e0-a198-11e9-8e98-936834bd7bf5-workspace.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2019-07-09T15:43:24.214Z","created_by":"5357ef811693be2118000001","modified_at":"2020-10-02T02:07:53.246Z","created":"2019-07-09T15:43:24.214Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-07-09T13:44:00.023Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We&#39;re excited to announce a new way to collaborate with your team on your digital projects. Introducing <a href=\"https://www.cosmicjs.com/workspaces\">Workspaces</a>.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/50a851e0-a198-11e9-8e98-936834bd7bf5-workspace.jpg","imgix_url":"https://imgix.cosmicjs.com/50a851e0-a198-11e9-8e98-936834bd7bf5-workspace.jpg"}}},{"_id":"5c6b33f8e6d07b28347133e6","order":31,"slug":"procorp-builds-an-informational-app-with-vuejs-and-cosmic-js","title":"Procorp Builds an Informational App with Vue.js and Cosmic","content":"<p><a href=\"http://procorpweb.com\" rel=\"noopener noreferrer\" target=\"_blank\">Procorp</a> is a 30+ year old integrated design and interactive advertising agency based in Chile. With extensive knowledge of the Chilean political and business environment, Procorp knew that public and private tender processes for bidding on design-oriented projects are complex and tedious.<br><br></p><h4>App Comps</h4><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/4f85ed80-3461-11e9-bc84-ab7fc4ee7da2-IMG_5068.JPG\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>In response to the bureaucratic complexities, Procorp built <a href=\"https://licitaciones.chilediseno.org/\">one of its pro-bono clients an informational app</a> to help agencies navigate the regulatory waters. They built the data structures for the application in less than a day and implemented their Cosmic-powered website using Vue.js.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/d440c4b0-3460-11e9-9073-419bba38258e-Procorp1.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"><br></p><p><br></p><p><a href=\"http://procorpweb.com\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1b4dbdb0-33ce-11e9-9374-67a32b8fd247-ProCorp.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></a></p><p><br></p><blockquote><p>&ldquo;Cosmic was instrumental in providing an interface so easy to use that an intern with no prior knowledge of HTML or Content Management Systems was able to transcribe and execute the entire job in an afternoon. The results are clean, completely separated from the code, and we are able to do updates and corrections without tying up resources.&quot;</p><p><cite>&mdash; Gabriel Naranjo, Director of Digital Experience</cite></p></blockquote><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/4ef1f570-3462-11e9-bc84-ab7fc4ee7da2-ezgif-2-baacf1d4a11a.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"Procorp","key":"company","title":"Company","type":"text","children":null},{"value":"Integrated Design Agency","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Procorp is a 30+ year old integrated design and interactive advertising agency based in Chile. With extensive knowledge of the Chilean political and business environment, Procorp knew that public and private tender processes for bidding on design-oriented projects are complex and tedious. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"ccf974b0-3535-11e9-be5e-d196042f83b6-D-37DZHC_400x400.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/ccf974b0-3535-11e9-be5e-d196042f83b6-D-37DZHC_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/ccf974b0-3535-11e9-be5e-d196042f83b6-D-37DZHC_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-06T22:32:48.334Z","created_by":"5716b504e9c686d006000073","created":"2019-02-18T22:38:48.420Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-02-20T17:34:41.586Z","metadata":{"company":"Procorp","industry_type":"Integrated Design Agency","teaser":"Procorp is a 30+ year old integrated design and interactive advertising agency based in Chile. With extensive knowledge of the Chilean political and business environment, Procorp knew that public and private tender processes for bidding on design-oriented projects are complex and tedious. \n","logo":{"url":"https://cdn.cosmicjs.com/ccf974b0-3535-11e9-be5e-d196042f83b6-D-37DZHC_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/ccf974b0-3535-11e9-be5e-d196042f83b6-D-37DZHC_400x400.jpg"}}},{"_id":"5d6407dda7f5cd0e9ed2088f","order":31,"slug":"updates-to-scheduled-publishing","title":"Updates to Scheduled Publishing","content":"<p>We have a quick update to scheduled publishing that should make things easier for those using this handy feature.</p><p><strong>How scheduled publishing used to work:</strong><br><strong><img src=\"https://cdn.cosmicjs.com/d3286f00-c81d-11e9-afd0-c7b3884fc4b5-Screen-Shot-2019-08-26-at-11.18.41-AM.png\" style=\"width: 300px;\" class=\"fr-fic fr-dib\"></strong><br></p><p>You set your scheduled publish day and time and it sets your content to draft. This was fine for new content, but not ideal for already published content. If you wanted to maintain your published content and save a new draft for later scheduled update\r\nthis didn&#39;t work.</p><p><strong>The new way:</strong><strong><img src=\"https://cdn.cosmicjs.com/f36acba0-c81d-11e9-91cd-0330b9d34b2c-schedule-publish.gif\" data-action=\"zoom\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></strong><br>You can now save a published version AND save a draft version scheduled for later publish. This also makes it possible to keep two versions running: 1) Your published content and 2) your draft content scheduled for publish later.</p><p>I hope you like this update to scheduled publishing. This update was shipped in direct response to a user that needed a better experience with this feature.</p><p>If you have any questions or update that you would like to see shipped, please <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and <a href=\"https://cosmicslack.now.sh/\" rel=\"noopener noreferrer\" target=\"_blank\">join the conversation on Slack</a>.</p>","metafields":[{"value":"2019-08-26","key":"published_date","title":"Published Date","type":"date","children":null},{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":null,"imgix_url":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2019-08-26T16:25:01.689Z","created_by":"5357ef811693be2118000001","modified_at":"2020-08-10T13:59:43.225Z","created":"2019-08-26T16:25:01.689Z","status":"published","published_at":"2019-08-26T16:28:26.580Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"published_date":"2019-08-26","author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":null,"imgix_url":null}}},{"_id":"5d603652be861751a5102d36","order":32,"slug":"edit-object-metafields","title":"Edit Object Metafields","content":"<p>You can now edit specific Metafields on existing Objects via the API. The following API method allows you to edit specific Metafields identified by <code>key</code>, without affecting other Metafields as well as add new Metafields. <a href=\"https://docs.cosmicjs.com/rest-api/metafields.html#edit-metafields\" rel=\"noopener noreferrer\" target=\"_blank\">View in the docs</a>.</p><p>The endpoint is:</p><pre><code>PATCH https://api.cosmicjs.com/v1/:bucket_slug/edit-object-metafields</code></pre><p>Body properties:</p><pre>slug (String)\r\nmetafields (Array)</pre><p><br>The <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic NPM module</a> is also updated (3.2.19) to allow for this capability with the new method:</p><pre><code>bucket.editObjectMetafields()</code></pre><p>Further directions are available in <a href=\"https://docs.cosmicjs.com/rest-api/metafields.html#edit-metafields\" rel=\"noopener noreferrer\" target=\"_blank\">the Metafields section</a> in the <a href=\"https://docs.cosmicjs.com/rest-api/\" rel=\"noopener noreferrer\" target=\"_blank\">REST API documentation</a>.</p><p><br>Let me know if you have any questions. <a href=\"https://cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Join us on Slack</a> and <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">on Twitter</a>.</p>","metafields":[{"value":"2019-08-23","key":"published_date","title":"Published Date","type":"date","children":null},{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":null,"imgix_url":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2019-08-23T18:54:10.949Z","created_by":"5357ef811693be2118000001","modified_at":"2020-08-10T14:02:39.393Z","created":"2019-08-23T18:54:10.950Z","status":"published","published_at":"2019-08-23T19:02:01.453Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"published_date":"2019-08-23","author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":null,"imgix_url":null}}},{"_id":"595e8eb2924137fa700001a5","order":32,"slug":"headless-cms-kb-page","title":"Headless CMS","content":"<p>The Cosmic JS Headless CMS makes it easy for your team to add dynamic content to any website or app in minutes. We provide a dashboard to create content and API tools and resources to integrate content into any website or app.&nbsp;</p><p>Avoid the pain of building and maintaining your own CMS infrastructure. Use the Cosmic JS Headless CMS infrastructure and focus on what really matters: building great products and user experiences.</p><p>Looking to learn more about the benefits and tradeoffs of a Headless CMS? Read <a href=\"https://www.cosmicjs.com/what-is-a-headless-cms\" rel=\"noopener noreferrer\" target=\"_blank\">What is a Headless CMS</a>.</p><h3>Cosmic JS Videos</h3><h4><br></h4><h4>Using Cosmic JS as a Headless CMS with Gatsby</h4><div class=\"fr-embedly                    \" data-original-embed=\"<a href='https://www.youtube.com/watch?v=Qls5frYlJeI' class='embedly-card'></a>\"><a href=\"https://www.youtube.com/watch?v=Qls5frYlJeI\" class=\"embedly-card\"></a></div><h4>Build a Cosmic JS-powered blog using Gatsby</h4><div class=\"fr-embedly                    \" data-original-embed=\"<a href='https://www.youtube.com/watch?v=mGcAWs1xRnY' class='embedly-card'></a>\"><a href=\"https://www.youtube.com/watch?v=mGcAWs1xRnY\" class=\"embedly-card\"></a></div><h4>Webinar: Localization with Cosmic JS and Gatsby</h4><div class=\"fr-embedly                    \" data-original-embed=\"<a href='https://www.youtube.com/watch?v=16m3wRFPGAY' class='embedly-card'></a>\"><a href=\"https://www.youtube.com/watch?v=16m3wRFPGAY\" class=\"embedly-card\"></a></div><p><br></p><h3>Headless CMS Articles</h3><p><a href=\"https://cosmicjs.com/blog/how-to-build-a-simple-blog-using-nodejs\" rel=\"noopener noreferrer\" target=\"_blank\">How to Build a Simple Blog Using Node.js</a><br><a href=\"https://hackernoon.com/how-to-build-a-node-js-user-management-app-12d900695ef6\" rel=\"noopener noreferrer\" target=\"_blank\">How to Build a Node.js User Management App</a><br><a href=\"https://cosmicjs.com/blog/how-to-build-a-cross-platform-blog-using-react-native-and-nodejs\" rel=\"noopener noreferrer\" target=\"_blank\">How to Build a Cross-Platform Blog Using React Native and Node.js</a></p><h3>Headless CMS Resources</h3><p><a href=\"https://cosmicjs.com/docs/\">Cosmic JS Docs</a><br><a href=\"https://cosmicjs.com/headless-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Headless CMS Features</a><br><a href=\"https://cosmicjs.com/solutions\" rel=\"noopener noreferrer\" target=\"_blank\">Headless CMS Solutions</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\"></a><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official JavaScript Client</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3>Examples</h3><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><code style=' font-size: inherit; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: 0px 0px; text-align: left;'>npm i cosmicjs</code></pre><p>Then in your JavaScript file, get your content:</p><div class=\"fr-embedly         \" data-original-embed=\"<a href='https://runkit.com/tonyspiro/5ad9109c320cd6001286359c' class='embedly-card'></a>\"><a href=\"https://runkit.com/tonyspiro/5ad9109c320cd6001286359c\" class=\"embedly-card\"></a></div>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"VWluSNk8Vk","value":"1b3aaf60-6286-11e7-a707-9bd50fd3b6b0-cloud.svg","url":"https://cdn.cosmicjs.com/1b3aaf60-6286-11e7-a707-9bd50fd3b6b0-cloud.svg","imgix_url":"https://imgix.cosmicjs.com/1b3aaf60-6286-11e7-a707-9bd50fd3b6b0-cloud.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"Ti0qpxezLk","value":"1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg","url":"https://cdn.cosmicjs.com/1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg","imgix_url":"https://imgix.cosmicjs.com/1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"o9rGwl7Iib","value":"<p>Cosmic is the best Headless CMS for modern websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"vfgY7TbHf4","value":"Headless CMS"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"UGLHhl5Czv","value":"Cosmic is the best Headless CMS for modern websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"6UwFyyxPVi","value":"2d5bcc60-6286-11e7-8d46-7b261262b385-Screen Shot 2017-07-06 at 3.03.09 PM.png","url":"https://cdn.cosmicjs.com/2d5bcc60-6286-11e7-8d46-7b261262b385-Screen Shot 2017-07-06 at 3.03.09 PM.png","imgix_url":"https://imgix.cosmicjs.com/2d5bcc60-6286-11e7-8d46-7b261262b385-Screen Shot 2017-07-06 at 3.03.09 PM.png"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"VeK7777oSa","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"vsQhezcnur","value":"Best Headless CMS"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"aSt9LunUxL","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]},{"children":null,"type":"text","title":"Apps Search Term","key":"apps_search_term","id":"0j2XD9Gog1","value":""},{"children":null,"type":"text","title":"Articles Search Term","key":"articles_search_term","id":"8RgqbG1UTr","value":""},{"children":null,"type":"text","title":"Page Overview Title","key":"page_overview_title","id":"gj036836gx4c73fpdjzb","value":""},{"children":null,"type":"html-textarea","title":"Page Overview","key":"page_overview","id":"iSVFzvAn9h","value":""},{"children":null,"type":"html-textarea","title":"SEO Content","key":"seo_content","id":"lcsUSsZiB9","value":""},{"children":[],"type":"repeater","title":"Apps","key":"apps","id":"dkpxmwigd1z8x4ants9f","value":"","repeater_fields":[{"title":"App Slug","key":"app_slug","value":"","type":"text","required":false}]},{"children":[],"type":"repeater","title":"Articles","key":"articles","id":"dwil4bqojngnkej4v85k","value":"","repeater_fields":[{"title":"Article Slug","key":"article_slug","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-22T23:07:51.159Z","created_by":"5357ef811693be2118000001","created":"2017-07-06T19:25:38.751Z","status":"published","modified_at":"2020-12-18T15:11:12.929Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-12-18T15:11:12.929Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/1b3aaf60-6286-11e7-a707-9bd50fd3b6b0-cloud.svg","imgix_url":"https://imgix.cosmicjs.com/1b3aaf60-6286-11e7-a707-9bd50fd3b6b0-cloud.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg","imgix_url":"https://imgix.cosmicjs.com/1f17e990-6286-11e7-a707-9bd50fd3b6b0-cloud.svg"},"blurb":"<p>Cosmic is the best Headless CMS for modern websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Headless CMS","seo_description":"Cosmic is the best Headless CMS for modern websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/2d5bcc60-6286-11e7-8d46-7b261262b385-Screen Shot 2017-07-06 at 3.03.09 PM.png","imgix_url":"https://imgix.cosmicjs.com/2d5bcc60-6286-11e7-8d46-7b261262b385-Screen Shot 2017-07-06 at 3.03.09 PM.png"},"code_example":"","seo_title":"Best Headless CMS","videos":[],"apps_search_term":"","articles_search_term":"","page_overview_title":"","page_overview":"","seo_content":"","apps":[],"articles":[]}},{"_id":"5d1a579b163abc45f7d22507","order":32,"slug":"developer-spotlight-sumit-kharche","title":"Developer Spotlight: Sumit Kharche","content":"<p>In this installment of the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Developer Spotlight Series</a>, we sat down with <a href=\"https://www.cosmicjs.com/sumitkharche\" rel=\"noopener noreferrer\" target=\"_blank\">Sumit Kharche</a>, a Full Stack Software Developer residing in Pune, India. Sumit is an active member of the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a>, having recently built the new <a href=\"https://www.cosmicjs.com/articles/how-to-build-a-blog-using-react-static-and-cosmic-js-jxdgtjnk\" rel=\"noopener noreferrer\" target=\"_blank\">React Static Blog</a>, which is available in the <a href=\"https://www.cosmicjs.com/apps\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Apps Marketplace</a>. With more community projects on the way, we&#39;re excited to interview one of our own for this Spotlight. 😎 Follow Sumit on <a href=\"https://twitter.com/sumitkharche01\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://www.linkedin.com/in/sumit-kharche-890426a9/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> and <a href=\"https://github.com/sumitkharche\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, and enjoy the conversation.<br><br></p><p><img src=\"https://cdn.cosmicjs.com/f0878bf0-a188-11e9-b819-13be5b4b2625-aKT0Saua400x400.jpg\" style=\"width: 300px; margin: 0 20px 20px 0;\" class=\"fr-fic fr-fil fr-dii pull-left\"></p><p><strong>Cosmic: When did you first begin building software?</strong><br><strong>Sumit:&nbsp;</strong>I started building software when I was pursuing my Bachelor&#39;s degree in Computer Science back in 2011.<br><br><strong>What is your preferred development stack?</strong><br>I have really enjoyed building projects using the Microsoft .Net technologies stack. I&rsquo;m currently working on a team that uses React, Redux, and Material-UI on the front end and .Net core as backend. Recently though, I&#39;ve found myself really enjoying working in a JAMStack. On the client side, I build static markup with React using React-Static, Gatsby and then provide APIs with <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a>.<br><br><strong>What past projects are you most proud of and why?</strong><br>I built a JAMStack website by myself in couple of days. I chose React-Static, which is completely new for me, as was <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a>. It was very challenging but I learned so many incredible skills as a result. Take a look at the <a href=\"https://www.cosmicjs.com/apps/react-static-blog\" rel=\"noopener noreferrer\" target=\"_blank\">demo</a>.<br><br><strong>You&#39;ve submitted apps built in React Static, Svelte and more. How are you finding these new frameworks and technologies?</strong><br>I love exploring new development stacks and expanding my knowledge. I always love to read about the new frameworks and technologies. Dev.to, Medium, Twitter, etc will always help me in finding the new technologies and also keep me updated. Now, because of the way <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> simplifies my work, I love to integrate it with different frameworks.<br><br><strong>What are some technologies you are excited to learn more about?</strong><br>That&rsquo;s a big list. There is so much cool stuff out there I&rsquo;ve been wanting to get into. Currently, I am excited to explore more about <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a>. Also, I have been eager to get some time to spin up on .Net Core. I am excited about serverless stacks.<br><br>The Cosmic Spotlight Series is dedicated to showcasing developers that are building apps using modern tools. Learn how to <a href=\"https://www.cosmicjs.com/contribute\" rel=\"noopener noreferrer\" target=\"_blank\">contribute here</a>. To stay connected with us <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">join the conversation on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In this installment of the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Developer Spotlight Series</a>, we sat down with <a href=\"https://www.cosmicjs.com/sumitkharche\" rel=\"noopener noreferrer\" target=\"_blank\">Sumit Kharche</a>, a Full Stack Software Developer residing in Pune, India. Submit is an active member of the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a>, having recently built the new <a href=\"https://www.cosmicjs.com/articles/how-to-build-a-blog-using-react-static-and-cosmic-js-jxdgtjnk\" rel=\"noopener noreferrer\" target=\"_blank\">React Static Blog</a>, which is available in the <a href=\"https://www.cosmicjs.com/apps\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Apps Marketplace</a>. With more community projects on the way, we&#39;re excited to interview one of our own for this Spotlight. 😎 Follow Sumit on <a href=\"https://twitter.com/sumitkharche01\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://www.linkedin.com/in/sumit-kharche-890426a9/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> and <a href=\"https://github.com/sumitkharche\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, and enjoy the conversation.<br><br></p>"},{"value":"e957d1c0-a190-11e9-aedf-bf249f2cc2eb-Sumit.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e957d1c0-a190-11e9-aedf-bf249f2cc2eb-Sumit.png","imgix_url":"https://imgix.cosmicjs.com/e957d1c0-a190-11e9-aedf-bf249f2cc2eb-Sumit.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2019-07-01T18:57:31.936Z","created_by":"5716b504e9c686d006000073","modified_at":"2020-10-02T02:07:53.246Z","created":"2019-07-01T18:57:31.936Z","status":"published","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-07-08T17:11:57.202Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this installment of the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Developer Spotlight Series</a>, we sat down with <a href=\"https://www.cosmicjs.com/sumitkharche\" rel=\"noopener noreferrer\" target=\"_blank\">Sumit Kharche</a>, a Full Stack Software Developer residing in Pune, India. Submit is an active member of the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a>, having recently built the new <a href=\"https://www.cosmicjs.com/articles/how-to-build-a-blog-using-react-static-and-cosmic-js-jxdgtjnk\" rel=\"noopener noreferrer\" target=\"_blank\">React Static Blog</a>, which is available in the <a href=\"https://www.cosmicjs.com/apps\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Apps Marketplace</a>. With more community projects on the way, we&#39;re excited to interview one of our own for this Spotlight. 😎 Follow Sumit on <a href=\"https://twitter.com/sumitkharche01\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://www.linkedin.com/in/sumit-kharche-890426a9/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> and <a href=\"https://github.com/sumitkharche\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, and enjoy the conversation.<br><br></p>","featured_image":{"url":"https://cdn.cosmicjs.com/e957d1c0-a190-11e9-aedf-bf249f2cc2eb-Sumit.png","imgix_url":"https://imgix.cosmicjs.com/e957d1c0-a190-11e9-aedf-bf249f2cc2eb-Sumit.png"}}},{"_id":"59f750667b9ce74e11000ab5","order":32,"slug":"healthplanseniororg-keeps-seniors-informed","title":"HealthPlanSenior.org Keeps Seniors Informed","content":"<p><a href=\"https://healthplansenior.org\" rel=\"noopener noreferrer\" target=\"_blank\">HealthPlanSenior.org</a> is a website dedicated to providing clear, concise insight into Medicare. Their contributors are some of the most knowledgeable minds in the industry and as an organization it&rsquo;s their mission to constantly raise the bar of excellence when it comes to serving seniors with content on their website. With knowledge experts spread all over the country, contributors need an easy way to preview, edit, schedule and publish content. That&#39;s why <a href=\"https://healthplansenior.org\" rel=\"noopener noreferrer\" target=\"_blank\">HealthPlanSenior.org</a> uses Cosmic as its <a href=\"https://cosmicjs.com/knowledge-base/web-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Content Management System</a>.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/ae5c1cf0-cb1a-11e7-a85f-d3bbc4442a58-Screen Shot 2017-11-16 at 4.08.00 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&ldquo;Cosmic allowed us to quickly build and deploy our content-driven application, freed from installed system constraints. Our content contributors can easily manage and publish their content via the Cosmic Dashboard and are given the precise tools they need to complete their job. &nbsp;Cosmic is intuitive and unopinionated, perfect for this team&rsquo;s needs.&rdquo; &nbsp;</p><p><cite>&mdash; Erick Bett, Lead Developer&nbsp;</cite></p></blockquote>","metafields":[{"value":"HealthPlanSenior.org","key":"company","title":"Company","type":"text","children":null},{"value":"Healthcare ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"With knowledge experts spread all over the country, contributors need an easy way to preview, edit, schedule and publish content. That's why HealthPlanSenior.org uses Cosmic as its Content Management System. ","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"a23fc220-dc3e-11e7-9201-fb5838341592-hps-logo.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/a23fc220-dc3e-11e7-9201-fb5838341592-hps-logo.png","imgix_url":"https://imgix.cosmicjs.com/a23fc220-dc3e-11e7-9201-fb5838341592-hps-logo.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-30T16:16:37.900Z","created_by":"5716b504e9c686d006000073","created":"2017-10-30T16:16:37.900Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"metadata":{"company":"HealthPlanSenior.org","industry_type":"Healthcare ","teaser":"With knowledge experts spread all over the country, contributors need an easy way to preview, edit, schedule and publish content. That's why HealthPlanSenior.org uses Cosmic as its Content Management System. ","logo":{"url":"https://cdn.cosmicjs.com/a23fc220-dc3e-11e7-9201-fb5838341592-hps-logo.png","imgix_url":"https://imgix.cosmicjs.com/a23fc220-dc3e-11e7-9201-fb5838341592-hps-logo.png"}}},{"_id":"5d5c24574fa7a563428f4e15","order":33,"slug":"updates-new-webhook-event-delete-all-objects-in-type-export-options","title":"Updates: New Webhook Event, Delete all Objects in Type, Export Options","content":"<p><strong>New Webhook Event</strong><br>We have added a new webhook event:</p><pre>object.edited.unpublished</pre><p>If you relied on &quot;object.edited.draft&quot; for this event, you will need to edit your webhook to this event. Find your webhooks in <em>Bucket Settings &gt; Webhooks.</em> Be sure to check this out in the <a href=\"https://docs.cosmicjs.com/webhooks/#events\">Webhooks documentation</a>.<em><a href=\"https://docs.cosmicjs.com/webhooks/#events\"><img src=\"https://cosmic-s3.imgix.net/15e4b2d0-c36a-11e9-a82b-ad22f83b19c9-webhook-event.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></a></em><br></p><p><br><strong>Delete all Objects in your Object Type</strong><br>This experience has been improved: now when you delete an Object Type it will remove all Objects in this type.</p><p><br><strong>Export Options</strong><br>You can now export specific Object Types and omit others in your Bucket Export area located in <em>Bucket Settings &gt; Import / Export</em>.<img src=\"https://cosmic-s3.imgix.net/049edaa0-c36a-11e9-a82b-ad22f83b19c9-export-options.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"2019-08-20","key":"published_date","title":"Published Date","type":"date","children":null},{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"e8cdf700-c36b-11e9-a488-7925a97cd338--udZnjsCzsE.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e8cdf700-c36b-11e9-a488-7925a97cd338--udZnjsCzsE.jpg","imgix_url":"https://imgix.cosmicjs.com/e8cdf700-c36b-11e9-a488-7925a97cd338--udZnjsCzsE.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2019-08-20T16:48:23.899Z","created_by":"5357ef811693be2118000001","modified_at":"2020-08-10T14:02:39.393Z","created":"2019-08-20T16:48:23.899Z","status":"published","published_at":"2019-08-20T16:59:54.739Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"published_date":"2019-08-20","author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":"https://cdn.cosmicjs.com/e8cdf700-c36b-11e9-a488-7925a97cd338--udZnjsCzsE.jpg","imgix_url":"https://imgix.cosmicjs.com/e8cdf700-c36b-11e9-a488-7925a97cd338--udZnjsCzsE.jpg"}}},{"_id":"5b76d2b99880eb271bc28c8b","order":33,"slug":"red-queen-casino-delivers-gaming-promotions","title":"Red Queen Casino Delivers Gaming Promotions","content":"<p><a href=\"https://www.redqueencasino.com/home\" rel=\"noopener noreferrer\" target=\"_blank\">Red Queen Casino</a> is an online casino that also offers bingo, games, live-dealer games, lottery, mobile casinos, and an assortment of various mobile games powered by the <a href=\"https://1x2network.com/#/\" rel=\"noopener noreferrer\" target=\"_blank\">1X2 Network</a>. The Red Queen Casino team serves weekly promotional content to notify players of upcoming game releases, prizes and updates to logistical information like Rules and Regulations and FAQ&#39;s.&nbsp;</p><p><br></p><h4><strong>Red Queen Casino</strong></h4><p><strong>Built on</strong>: <a href=\"https://cosmicjs.com/knowledge-base/angularjs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Angular</a> | <a href=\"https://cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/4eb3b120-a22c-11e8-8bed-9d1c5ce694f3-redqueencasinob.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Red Queen Casino needed a way for members of their cross-functional team to update the promotional content without having access to either the application codebase or the rest of the website&#39;s content, so they set up a content-editing workflow using Cosmic as their decoupled content management API. Red Queen Casino&#39;s developers have access to powerful APIs and content modeling tools, while the team members tasked with updating promotional content can do so from a familiar cloud-based editor.</p><p><br></p><p style=\"text-align: center;\"><br></p><p style=\"text-align: center;\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/6d078430-a22c-11e8-89c8-ff61f884caa3-Red-Queen-Casino-Review.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><blockquote><p>&quot;Using Cosmic means my team is now able to swiftly and efficiently update our promotions and adapt to our project needs using the system without any issues. Cosmic has made everything so much more accessible for us.&rdquo;</p><p><em>- Christopher Reid &ndash; Casino Manager</em></p></blockquote>","metafields":[{"value":"Red Queen Casino","key":"company","title":"Company","type":"text","children":null},{"value":"Online Gaming","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Red Queen Casino is an online casino that also offers bingo, games, live-dealer games, lottery, mobile casinos, and an assortment of various mobile games powered by the 1X2 Network. The Red Queen Casino team serves weekly promotional content to notify players of upcoming game releases, prizes and updates to logistical information like Rules and Regulations and FAQ's. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"bc23df30-a224-11e8-b671-4969be7a2b02-vyTIMqXN_400x400.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/bc23df30-a224-11e8-b671-4969be7a2b02-vyTIMqXN_400x400.png","imgix_url":"https://imgix.cosmicjs.com/bc23df30-a224-11e8-b671-4969be7a2b02-vyTIMqXN_400x400.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-01T22:26:36.367Z","created_by":"5716b504e9c686d006000073","created":"2018-08-17T13:50:49.376Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-08-17T18:43:20.889Z","metadata":{"company":"Red Queen Casino","industry_type":"Online Gaming","teaser":"Red Queen Casino is an online casino that also offers bingo, games, live-dealer games, lottery, mobile casinos, and an assortment of various mobile games powered by the 1X2 Network. The Red Queen Casino team serves weekly promotional content to notify players of upcoming game releases, prizes and updates to logistical information like Rules and Regulations and FAQ's. \n","logo":{"url":"https://cdn.cosmicjs.com/bc23df30-a224-11e8-b671-4969be7a2b02-vyTIMqXN_400x400.png","imgix_url":"https://imgix.cosmicjs.com/bc23df30-a224-11e8-b671-4969be7a2b02-vyTIMqXN_400x400.png"}}},{"_id":"5ad67c4e23895634795b4019","slug":"laravel-cms","title":"Laravel CMS  ","content":"<p>Cosmic JS offers a powerful API-first CMS that integrates with Laravel and PHP. <a href=\"https://laravel.com\" rel=\"noopener noreferrer\" target=\"_blank\">Laravel</a> is a powerful PHP framework, designed for developers who need a simple and elegant toolkit to create full-featured web applications. &nbsp;</p><p>Install the Official <a href=\"https://github.com/cosmicjs/cosmicjs-php\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic JS PHP Client</a> to start managing content for your Laravel application. Use Cosmic JS to quickly build content-powered blogs, dynamic pages, and more. &nbsp;Get a feel for Cosmic JS by taking a spin through <a href=\"https://cosmicjs.com/apps\" rel=\"noopener noreferrer\" target=\"_blank\">our apps</a> and check out the tutorials below.</p><p><br></p><h3>Laravel CMS Articles</h3><p><a href=\"https://cosmicjs.com/blog/the-cosmic-stack\" rel=\"noopener noreferrer\" target=\"_blank\">The Cosmic Stack</a><br><a href=\"https://cosmicjs.com/apps/inventory-app\" rel=\"noopener noreferrer\" target=\"_blank\">Laravel Inventory Management App</a><br><a href=\"https://cosmicjs.com/blog/building-an-inventory-management-app-using-vuejs-and-laravel\" rel=\"noopener noreferrer\" target=\"_blank\">Building an Inventory Management App Using Vue.js and Laravel</a><br><a href=\"https://cosmicjs.com/case-studies/alicomm-builds-a-website-using-laravel-and-cosmic-js\" rel=\"noopener noreferrer\" target=\"_blank\">Alicomm Builds a Website Using Laravel, PHP and Cosmic JS</a></p><h3>Laravel CMS Resources</h3><p><a href=\"https://cosmicjs.com/docs/\">Cosmic JS Docs</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-php\" href=\"https://github.com/cosmicjs/cosmicjs-php\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official&nbsp;</a><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-php\" href=\"https://github.com/cosmicjs/cosmicjs-php\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">PHP</a><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-php\" href=\"https://github.com/cosmicjs/cosmicjs-php\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">&nbsp;Client</a><br><a data-target-href=\"https://cosmicjs.com/apps?languages=PHP\" href=\"https://cosmicjs.com/apps?languages=PHP\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">PHP Apps</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3>Examples</h3><p>Clone the PHP client:</p><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'>git clone <a href=\"https://github.com/cosmicjs/cosmicjs-php\"></a><a href=\"https://github.com/cosmicjs/cosmicjs-php\">https://github.com/cosmicjs/cosmicjs-php</a></pre><p>Then in your PHP file:</p><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><code style=' font-size: inherit; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: 0px 0px; text-align: left;'><span style=\" color: rgb(248, 248, 242);\">$config</span> <span style=\" color: rgb(248, 248, 242);\">=</span> <span style=\" color: rgb(102, 217, 239);\">new</span> stdClass<span style=\" color: rgb(248, 248, 242);\">(</span><span style=\" color: rgb(248, 248, 242);\">)</span><span style=\" color: rgb(248, 248, 242);\">;</span>\r\n<span style=\" color: rgb(248, 248, 242);\">$config</span><span style=\" color: rgb(248, 248, 242);\">-</span><span style=\" color: rgb(248, 248, 242);\">&gt;</span><span style=\" color: rgb(249, 38, 114);\">bucket_slug</span> <span style=\" color: rgb(248, 248, 242);\">=</span> <span style=\" color: rgb(166, 226, 46);\">&quot;astral&quot;</span><span style=\" color: rgb(248, 248, 242);\">;</span>\r\n<span style=\" color: rgb(102, 217, 239);\">include</span><span style=\" color: rgb(248, 248, 242);\">(</span><span style=\" color: rgb(166, 226, 46);\">&quot;cosmicjs.php&quot;</span><span style=\" color: rgb(248, 248, 242);\">)</span><span style=\" color: rgb(248, 248, 242);\">;</span>\r\n<span style=\" color: rgb(248, 248, 242);\">$objects</span> <span style=\" color: rgb(248, 248, 242);\">=</span> <span style=\" color: rgb(248, 248, 242);\">$cosmicjs</span><span style=\" color: rgb(248, 248, 242);\">-</span><span style=\" color: rgb(248, 248, 242);\">&gt;</span><span style=\" color: rgb(230, 219, 116);\">getObjects</span><span style=\" color: rgb(248, 248, 242);\">(</span><span style=\" color: rgb(248, 248, 242);\">)</span><span style=\" color: rgb(248, 248, 242);\">;</span>\r\n<span style=\" color: rgb(230, 219, 116);\">var_dump</span><span style=\" color: rgb(248, 248, 242);\">(</span><span style=\" color: rgb(248, 248, 242);\">$objects</span><span style=\" color: rgb(248, 248, 242);\">)</span><span style=\" color: rgb(248, 248, 242);\">;</span></code></pre>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"7Gp59E6W0o","value":"18f957e0-4293-11e8-be46-91b69c5ea416-laravel-framework-logo-C10176EC8C-seeklogo.com.png","url":"https://cdn.cosmicjs.com/18f957e0-4293-11e8-be46-91b69c5ea416-laravel-framework-logo-C10176EC8C-seeklogo.com.png","imgix_url":"https://imgix.cosmicjs.com/18f957e0-4293-11e8-be46-91b69c5ea416-laravel-framework-logo-C10176EC8C-seeklogo.com.png"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"bGVNwulV42","value":"1fe3ab00-4293-11e8-adf7-13ecf87e853c-laravel-framework-logo-C10176EC8C-seeklogo.com.png","url":"https://cdn.cosmicjs.com/1fe3ab00-4293-11e8-adf7-13ecf87e853c-laravel-framework-logo-C10176EC8C-seeklogo.com.png","imgix_url":"https://imgix.cosmicjs.com/1fe3ab00-4293-11e8-adf7-13ecf87e853c-laravel-framework-logo-C10176EC8C-seeklogo.com.png"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"qhLc41AqB1","value":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for Laravel websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"M9GaWUvISP","value":"Laravel"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"GVJadQIIGG","value":"Cosmic is the best CMS for Laravel websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"5EXx3jjyNh","value":"291fdd60-4293-11e8-ab30-279769ef94af-laravel-framework-logo-C10176EC8C-seeklogo.com.png","url":"https://cdn.cosmicjs.com/291fdd60-4293-11e8-ab30-279769ef94af-laravel-framework-logo-C10176EC8C-seeklogo.com.png","imgix_url":"https://imgix.cosmicjs.com/291fdd60-4293-11e8-ab30-279769ef94af-laravel-framework-logo-C10176EC8C-seeklogo.com.png"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"hdX3OSLd8w","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"xwwJeSksVh","value":""},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"ubflSl5EGp","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]},{"children":null,"type":"text","title":"Apps Search Term","key":"apps_search_term","id":"v95tq5i2enaf3oreecdk","value":""},{"children":null,"type":"text","title":"Articles Search Term","key":"articles_search_term","id":"apps_search_term_kef9yhcej8gy","value":""},{"children":null,"type":"html-textarea","title":"Page Overview","key":"page_overview","id":"zYuPyDtTWY","value":""},{"children":null,"type":"html-textarea","title":"SEO Content","key":"seo_content","id":"6dT4bcaDeW","value":""}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created":"2018-04-17T22:59:26.329Z","created_at":"2017-10-19T03:50:16.379Z","modified_at":"2020-08-15T19:41:08.853Z","created_by":"5357ef811693be2118000001","modified_by":"5357ef811693be2118000001","status":"published","publish_at":null,"order":33,"published_at":"2020-08-15T19:41:08.853Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/18f957e0-4293-11e8-be46-91b69c5ea416-laravel-framework-logo-C10176EC8C-seeklogo.com.png","imgix_url":"https://imgix.cosmicjs.com/18f957e0-4293-11e8-be46-91b69c5ea416-laravel-framework-logo-C10176EC8C-seeklogo.com.png"},"thumbnail":{"url":"https://cdn.cosmicjs.com/1fe3ab00-4293-11e8-adf7-13ecf87e853c-laravel-framework-logo-C10176EC8C-seeklogo.com.png","imgix_url":"https://imgix.cosmicjs.com/1fe3ab00-4293-11e8-adf7-13ecf87e853c-laravel-framework-logo-C10176EC8C-seeklogo.com.png"},"blurb":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for Laravel websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Laravel","seo_description":"Cosmic is the best CMS for Laravel websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/291fdd60-4293-11e8-ab30-279769ef94af-laravel-framework-logo-C10176EC8C-seeklogo.com.png","imgix_url":"https://imgix.cosmicjs.com/291fdd60-4293-11e8-ab30-279769ef94af-laravel-framework-logo-C10176EC8C-seeklogo.com.png"},"code_example":"","seo_title":"","videos":[],"apps_search_term":"","articles_search_term":"","page_overview":"","seo_content":""}},{"_id":"5ce2e4d983695c0b6e7a2cc2","order":33,"slug":"developer-spotlight-ben-hong","title":"Developer Spotlight: Ben Hong","content":"<p>In this installment of the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Developer Spotlight Series</a>, we sat down with <a href=\"https://www.bencodezen.io\" rel=\"noopener noreferrer\" target=\"_blank\">Ben Hong</a>, a Senior Front End Engineer residing in Washington, D.C. Ben wears several hats, first as a Front End Engineer at <a href=\"https://about.gitlab.com\" rel=\"noopener noreferrer\" target=\"_blank\">GitLab</a>, as well as being an active Google Developer Expert and <a href=\"https://vuejs.org\" rel=\"noopener noreferrer\" target=\"_blank\">Vue.js</a> community partner. He&#39;s also a contributor to <a href=\"https://vuepress.vuejs.org\" rel=\"noopener noreferrer\" target=\"_blank\">VuePress</a>, one of the most popular static site generators for Vue.js projects.<br><br>Ben recently helped re-build the new <a href=\"https://www.cosmicjs.com/docs/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Documentation</a> using VuePress, so we&#39;re very familiar and grateful for his frontend chops. 😎<br><br></p><p><img src=\"https://cosmic-s3.imgix.net/63d2e680-8637-11e9-a33b-2bfd4360e9a2-ben-hong.jpg?w=1000&compress=auto&auto=format\" style=\"float:left; margin: 10px 10px 20px 0;\" class=\"fr-fic fr-fil fr-dii col-sm-6\"></p><p><strong>Cosmic: When did you first begin building software?</strong><br><strong>Ben</strong>: I started writing code when I was 10 years old. My dad had purchased an HTML and CSS book and I took to it quite quickly since the only thing required to get started was a plain text editor. I would then attempt to learn JavaScript only to be unfortunately misinformed by the fact that I needed to learn Java first. With the resources at the time, I wasn&#39;t successful and it wouldn&#39;t be until post-graduate school when I would take a look back into the tech field.<br><br><strong>What is your preferred development stack?</strong><br>My preferred development stack is:</p><ul><li>Frontend Framework: Vue.js</li><li>Backend Languages: Node.js / Python</li><li>API: REST or GraphQL</li></ul><p><br><strong>What past projects are you most proud of and why?</strong><br><a href=\"https://github.com/bencodezen/vuepress-blog-boilerplate\" rel=\"noopener noreferrer\" target=\"_blank\">VuePress Blog Boilerplate</a> is one of my past projects that I am rather proud of because of the impact it had even though it was a rather niche problem to solve. It&#39;s always a positive reminder of how important it is to document problems that you solve and share it with the rest of the world because odds are pretty good that someone else is trying to solve a similar problem.<br><br><strong>Tell us more about being a Vue.js community partner and your area of responsibility.</strong><br>As a Vue.js community partner, I work with the core team to help grow the community and improve the ecosystem for everyone. The project I am currently helping to lead is <a href=\"https://events.vuejs.org\" rel=\"noopener noreferrer\" target=\"_blank\">Vue.js Events</a>, which is an initiative to centralize Vue.js community events (i.e., meetups, conferences, workshops, etc.) in a single area so it is easier for people to find fellow Vue.js enthusiasts like themselves.<br><br><strong>You have some fascinating job posts on your resume. How was your time at Politico?</strong><br>When I was a UI Developer at <a href=\"https://www.politico.com\" rel=\"noopener noreferrer\" target=\"_blank\">Politico</a>, I had the honor and priviliege to work with a great team that would update the technology stack to utilize Vue.js and experiment with technologies like React-Native. Working at a news organization was a unique experience in the way content was curated since deadlines could change depending on what was happening in the world.<br><br><strong>What are some technologies you are excited to learn more about?</strong><br>As someone who tinkers with a lot of side projects, two projects that I&#39;ve been spending more time on lately is Gridsome and TailwindCSS. Gridsome is an up and coming framework that allows users to build JAM stack websites and PWAs using Vue.js. Tailwind CSS on the other hand, is a low-level CSS Framework that utilizes many CSS architecture principles I believe in and it&#39;s been great to see it get so much attention.<br><br><strong>What are the latest updates from VuePress?</strong><br>VuePress is currently in alpha and the team is working hard to get it to a stable v1.0 release. That said, it is already being used in many production sites (such as Cosmic) due to the fact that the current features cover most of what users currently need to build incredible documentation sites. Definitely worth checking out for every team building a product that requires documentation!<br><br>The Cosmic Spotlight Series is dedicated to showcasing developers that are building apps using modern tools. Learn how to <a href=\"https://www.cosmicjs.com/contribute\" rel=\"noopener noreferrer\" target=\"_blank\">contribute here</a>. To stay connected with us <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">join the conversation on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In this installment of the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Developer Spotlight Series</a>, we sat down with <a href=\"https://www.bencodezen.io\" rel=\"noopener noreferrer\" target=\"_blank\">Ben Hong</a>, a Senior Front End Engineer residing in Washington, D.C. Ben wears several hats, first as a Front End Engineer at <a href=\"https://about.gitlab.com\" rel=\"noopener noreferrer\" target=\"_blank\">GitLab</a>, as well as being an active Google Developer Expert and <a href=\"https://vuejs.org\" rel=\"noopener noreferrer\" target=\"_blank\">Vue.js</a> community partner. He&#39;s also put some work into <a href=\"https://vuepress.vuejs.org\" rel=\"noopener noreferrer\" target=\"_blank\">VuePress</a>, one of the newest static site generator for Vue.js projects.<br><br></p>"},{"value":"63d2e680-8637-11e9-a33b-2bfd4360e9a2-ben-hong.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/63d2e680-8637-11e9-a33b-2bfd4360e9a2-ben-hong.jpg","imgix_url":"https://imgix.cosmicjs.com/63d2e680-8637-11e9-a33b-2bfd4360e9a2-ben-hong.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2019-05-20T17:33:13.784Z","created_by":"5716b504e9c686d006000073","modified_at":"2020-10-02T02:07:53.246Z","created":"2019-05-20T17:33:13.784Z","status":"published","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-06-04T13:38:09.064Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this installment of the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Developer Spotlight Series</a>, we sat down with <a href=\"https://www.bencodezen.io\" rel=\"noopener noreferrer\" target=\"_blank\">Ben Hong</a>, a Senior Front End Engineer residing in Washington, D.C. Ben wears several hats, first as a Front End Engineer at <a href=\"https://about.gitlab.com\" rel=\"noopener noreferrer\" target=\"_blank\">GitLab</a>, as well as being an active Google Developer Expert and <a href=\"https://vuejs.org\" rel=\"noopener noreferrer\" target=\"_blank\">Vue.js</a> community partner. He&#39;s also put some work into <a href=\"https://vuepress.vuejs.org\" rel=\"noopener noreferrer\" target=\"_blank\">VuePress</a>, one of the newest static site generator for Vue.js projects.<br><br></p>","featured_image":{"url":"https://cdn.cosmicjs.com/63d2e680-8637-11e9-a33b-2bfd4360e9a2-ben-hong.jpg","imgix_url":"https://imgix.cosmicjs.com/63d2e680-8637-11e9-a33b-2bfd4360e9a2-ben-hong.jpg"}}},{"_id":"5d543cc2696d9f3445b7e305","order":34,"slug":"cosmic-js-api-now-powered-by-fastly","title":"Cosmic API now powered by Fastly","content":"<p>We&#39;re excited to announce that all Cosmic API endpoints (<a href=\"https://docs.cosmicjs.com/rest-api/\" rel=\"noopener noreferrer\" target=\"_blank\">REST</a> and <a href=\"https://docs.cosmicjs.com/graphql-api/\" rel=\"noopener noreferrer\" target=\"_blank\">GraphQL</a>) are now powered by the <a href=\"https://www.fastly.com\" rel=\"noopener noreferrer\" target=\"_blank\">Fastly</a> global CDN. You should now notice huge performance gains on your Bucket API endpoints. For example, if a large endpoint used to take 400ms it is now clocking in under 20ms!<br><br><strong>What is Fastly?</strong><br>Fastly is the leading global CDN cache layer provider that powers some of the most highly-trafficked websites on the internet. The New York Times, Airbnb, and more choose Fastly because of their global CDN of over 60 high-powered point of presence servers\r\n(POPs). These POPs are distributed closest to your users so they can get your content as fast as possible. This also shields your cached content from any issues caused by the origin infrastructure.</p><p>From the Fastly <a href=\"https://www.fastly.com/network-map\" rel=\"noopener noreferrer\" target=\"_blank\">Network Map page</a>, &quot;we&rsquo;ve focused our efforts on placing fewer, more powerful POPs at strategic locations around the world.&quot;</p><p><img src=\"https://cdn.cosmicjs.com/5a49a4f0-beb3-11e9-8850-35289903207a-fastly-map-cosmicjs.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br><br><strong>What does this mean for you?</strong><br>We&#39;re happy to roll this out to all Cosmic users. Your Cosmic content is now automatically powered by the Fastly global CDN and available to your users world-wide. No extra work needs to be done on your part. Just sit back and notice huge performance gains for you and your users <span class=\"fr-emoticon fr-deletable\">😎</span>&nbsp;<br><br><strong>And more great news:</strong> requests to the cache-served content from the Cosmic API will not count towards your API request limits on your billing plan. API requests are counted only on initial requests to any resource after you clear your cache either manually in Bucket &gt; Settings or by adding, editing, or deleting content in your Bucket.<br><br>It&#39;s our mission to make sure your team has the best experience collaborating on content using Cosmic. With the Cosmic Fastly update, you can deliver great content and experiences to your world-wide customers even faster.</p><p>If you have any questions, <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and <a href=\"https://cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">join the Slack community</a>.</p>","metafields":[{"value":"2019-08-15","key":"published_date","title":"Published Date","type":"date","children":null},{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"b68677c0-beb3-11e9-9df8-f347c5233ec0-cosmic-fastly.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/b68677c0-beb3-11e9-9df8-f347c5233ec0-cosmic-fastly.jpg","imgix_url":"https://imgix.cosmicjs.com/b68677c0-beb3-11e9-9df8-f347c5233ec0-cosmic-fastly.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2019-08-14T16:54:26.460Z","created_by":"5357ef811693be2118000001","modified_at":"2020-08-10T14:02:39.393Z","created":"2019-08-14T16:54:26.460Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-08-15T14:45:08.259Z","metadata":{"published_date":"2019-08-15","author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":"https://cdn.cosmicjs.com/b68677c0-beb3-11e9-9df8-f347c5233ec0-cosmic-fastly.jpg","imgix_url":"https://imgix.cosmicjs.com/b68677c0-beb3-11e9-9df8-f347c5233ec0-cosmic-fastly.jpg"}}},{"_id":"58fc09bf5161d903690003d5","order":34,"slug":"github-cms","title":"GitHub CMS","content":"<p>Cosmic JS is an API-first CMS that integrates well with GitHub. Use Cosmic JS to quickly build content-powered blogs, dynamic pages, and more. &nbsp;Cosmic JS makes it easy to integrate with GitHub and manage content.\r\nCosmic JS offers various Client Libraries on GitHub.&nbsp;</p><h3>GitHub CMS Articles</h3><p><a data-target-href=\"https://cosmicjs.com/blog/the-cosmic-stack\" href=\"https://cosmicjs.com/blog/the-cosmic-stack\" rel=\"noopener noreferrer\" target=\"_blank\">The Cosmic Stack</a><br><a href=\"https://cosmicjs.com/blog/app-deployment-monitoring-now-available\" rel=\"noopener noreferrer\" target=\"_blank\">App Deployment Monitoring Now Available</a><br><a href=\"https://cosmicjs.com/blog/how-to-deploy-a-website-with-a-custom-domain-using-cosmic-js\" rel=\"noopener noreferrer\" target=\"_blank\">How to Deploy a Website with a Custom Domain</a></p><h3>GitHub CMS Resources</h3><p><a href=\"https://cosmicjs.com/docs/\">Cosmic JS Docs</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official JavaScript Client</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"xhB4tSLyob","value":"e7ce1f70-27c7-11e7-9631-b17e7278f329-github.svg","url":"https://cdn.cosmicjs.com/e7ce1f70-27c7-11e7-9631-b17e7278f329-github.svg","imgix_url":"https://imgix.cosmicjs.com/e7ce1f70-27c7-11e7-9631-b17e7278f329-github.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"TUwV2FM6vs","value":"eb2adf00-27c7-11e7-9631-b17e7278f329-github.svg","url":"https://cdn.cosmicjs.com/eb2adf00-27c7-11e7-9631-b17e7278f329-github.svg","imgix_url":"https://imgix.cosmicjs.com/eb2adf00-27c7-11e7-9631-b17e7278f329-github.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"IE2yJGaEgL","value":"<p>Cosmic JS is an API-first CMS that integrates with GitHub. Use Cosmic JS to quickly build content-powered blogs, dynamic pages, and more.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"2Lq96QX2y4","value":"GitHub"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"OOhqRlH8k5","value":"Cosmic is the best CMS for your GitHub development workflow. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"UhMnadtQ3p","value":"0389ce20-2acb-11e7-ae54-e9a1fc58ec22-github.jpg","url":"https://cdn.cosmicjs.com/0389ce20-2acb-11e7-ae54-e9a1fc58ec22-github.jpg","imgix_url":"https://imgix.cosmicjs.com/0389ce20-2acb-11e7-ae54-e9a1fc58ec22-github.jpg"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"rbcuUbTnMt","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"h5Xl9H7qtg","value":"Best GitHub CMS"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"ZrrWfwgxvW","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-23T01:56:15.626Z","created_by":"5357ef811693be2118000001","created":"2017-04-23T01:56:15.626Z","status":"published","modified_at":"2020-06-27T19:34:15.179Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-27T19:34:15.179Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/e7ce1f70-27c7-11e7-9631-b17e7278f329-github.svg","imgix_url":"https://imgix.cosmicjs.com/e7ce1f70-27c7-11e7-9631-b17e7278f329-github.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/eb2adf00-27c7-11e7-9631-b17e7278f329-github.svg","imgix_url":"https://imgix.cosmicjs.com/eb2adf00-27c7-11e7-9631-b17e7278f329-github.svg"},"blurb":"<p>Cosmic JS is an API-first CMS that integrates with GitHub. Use Cosmic JS to quickly build content-powered blogs, dynamic pages, and more.</p>","headline":"GitHub","seo_description":"Cosmic is the best CMS for your GitHub development workflow. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/0389ce20-2acb-11e7-ae54-e9a1fc58ec22-github.jpg","imgix_url":"https://imgix.cosmicjs.com/0389ce20-2acb-11e7-ae54-e9a1fc58ec22-github.jpg"},"code_example":"","seo_title":"Best GitHub CMS","videos":[]}},{"_id":"5cc89b0e932dbd12e41696ad","order":34,"slug":"developer-spotlight-jacob-knaack","title":"Developer Spotlight: Jacob Knaack","content":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with<a href=\"https://www.cosmicjs.com/jknaack\" rel=\"noopener noreferrer\" target=\"_blank\">&nbsp;Jacob Knaack</a>, a Web Developer and Technical Communicator residing in Seattle, Washington. Jacob is a Front End Developer at restack, a development studio that finely crafts websites and apps. Jacob is also a frequent contributor to the Cosmic Community, having recently built both the <a href=\"https://www.cosmicjs.com/apps/apollo-blog\" rel=\"noopener noreferrer\" target=\"_blank\">Progressive Apollo Blog</a> as well as the <a href=\"https://www.cosmicjs.com/apps/gatsby-docs\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby Documentation Website</a>. Follow Jacob on <a href=\"http://linkedin.com/in/https://linkedin/in/jacobknaack\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> and <a href=\"https://github.com/JacobKnaack\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a> and enjoy the conversation.<br><br></p><p><strong><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/8de55c90-6c16-11e9-bc04-4f70a0b6b78e-profile-pic.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dii\"></strong></p><p><br><strong>Cosmic: When did you first begin building software?</strong><br><strong>Jacob</strong>: There&rsquo;s really 2 answers here. &nbsp;The first time I started to build something via a programming language was in the first grade when I built a website for a science fair. &nbsp;This was in the early 90s so HTML, CSS, and JS weren&rsquo;t super hot stuff and the site itself looked pretty crazy, as you can imagine a 1st grader would want a website to look.<br><br>I first started to build formal software for a living about 3 years ago when I started a programming bootcamp at Code Fellows in Seattle. &nbsp;At the time I was working as a technical writer and wanted to level up my technical skills. &nbsp;I began working on projects that revolved around full stack JavaScript and Python and from there I developed a nasty habit for designing and building web applications.<br><br><strong>What is your preferred development stack?</strong><br>I work almost entirely in the MERN / MEAN stack. &nbsp;So the Node environment is really my bread and butter. &nbsp;Using cloud storage and interfacing the internet of things all using JavaScript is very nice when working in primarily a JS environment, so I&rsquo;ve really enjoyed working with Node all these years.<br><br>I do confess that if I&rsquo;m working on a personal project, or just something that I&rsquo;m working solo on, I do love just building things with simple vanilla JS (and nixing the fancy MVC workflows of React / Angular / Vue etc.)<br><br><strong>What past projects are you most proud of and why?</strong><br>A project that I really loved sinking time into was a a piece of software used for performing user market research for a tech company here is Seattle. &nbsp;I built a Python server and a small front end client that would essentially scrape the internet and perform sentiment analysis on social media posts. &nbsp;As a student at the University of Washington, most of my focus was on Psycholinguistics research (think of the intersection of linguistic behavior and psychological processing) so this was something that I very much wanted to grind away at. The project involved a lot of cloud computing services and ended up providing some extremely interesting results, dealing mostly with tweets and posts from Reddit. &nbsp;Fun stuff.<br><br><strong>You&#39;ve contributed several Gatsby projects to the Cosmic Community. Talk more about the benefits you see in using a Gatsby + Cosmic stack.&nbsp;</strong><br>Gatsby is a great little static site generator and really works well for providing a performant experience for users. &nbsp;Basically Gatsby takes all the data from our source code and API fetching and builds a bunch of HTML, CSS, and JS. &nbsp; This allows content to be searched efficiently and faster with no long load times from enormous JS files trying to dynamically render things. &nbsp;For the developer, Gatsby offers a ridiculous amount of flexibility. &nbsp;For one, built in things like React, Graphql, hot-reloading, routing, and code splitting make the experience just like developing a dynamically rendered SPA (single page application). &nbsp;Performance plus flexibility.<br><br>Combine this with a service like Cosmic and we can have even more flexibility for the end user. &nbsp;A content management service that lets us define our own schemas and add whatever data we want while letting Gatsby fetch and build that data means we can build fast and performant applications that are able to respond quickly. &nbsp;Now we have performance and flexibility for both the developer and the user as they can control their content through Cosmic while also getting a great interface from static files built with Gatsby.<br><br><strong>What are some technologies you are excited about or want to learn more about</strong><br>Honestly I&rsquo;ve been excited about the VR space for a while now, and I think developing User Interfaces for VR platforms has a lot of opportunity. &nbsp;I&rsquo;ve played around with a couple web browser based frameworks for VR and they are getting quite sophisticated now that the hardware is becoming a little more affordable and prevalent. &nbsp;As a React developer I am always burying my head in React workflows. &nbsp;But the possibility using React to create VR components in the average web browser is pretty exciting. &nbsp;It seems like Facebook is trying to make that a reality with React 360, I think formerly React VR. &nbsp;As a psychologist and developer, I&rsquo;m very interested in learning more about how we can create usable and exciting interfaces for web applications for VR devices.<br><br>The Cosmic Spotlight Series is dedicated to showcasing developers that are building apps using modern tools. Learn how to <a href=\"https://www.cosmicjs.com/contribute\" rel=\"noopener noreferrer\" target=\"_blank\">Contribute here</a>. To stay connected with us <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">join the conversation on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with<a href=\"https://www.cosmicjs.com/jknaack\" rel=\"noopener noreferrer\" target=\"_blank\">&nbsp;Jacob Knaack</a>, a Web Developer and Technical Communicator residing in Seattle, Washington. Jacob is a Front End Developer at restack, a development studio that finely crafts websites and apps. Jacob is also a frequent contributor to the Cosmic Community, having recently built both the <a href=\"https://www.cosmicjs.com/apps/apollo-blog\" rel=\"noopener noreferrer\" target=\"_blank\">Progressive Apollo Blog</a> as well as the <a href=\"https://www.cosmicjs.com/apps/gatsby-docs\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby Documentation Website</a>. Follow Jacob on <a href=\"http://linkedin.com/in/https://linkedin/in/jacobknaack\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> and <a href=\"https://github.com/JacobKnaack\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a> and enjoy the conversation.<br><br></p>"},{"value":"1d2113c0-6c19-11e9-a246-abd80f26250a-Jacob.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/1d2113c0-6c19-11e9-a246-abd80f26250a-Jacob.png","imgix_url":"https://imgix.cosmicjs.com/1d2113c0-6c19-11e9-a246-abd80f26250a-Jacob.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2019-04-30T18:59:26.638Z","created_by":"5716b504e9c686d006000073","created":"2019-04-30T18:59:26.638Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-05-01T13:57:55.767Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with<a href=\"https://www.cosmicjs.com/jknaack\" rel=\"noopener noreferrer\" target=\"_blank\">&nbsp;Jacob Knaack</a>, a Web Developer and Technical Communicator residing in Seattle, Washington. Jacob is a Front End Developer at restack, a development studio that finely crafts websites and apps. Jacob is also a frequent contributor to the Cosmic Community, having recently built both the <a href=\"https://www.cosmicjs.com/apps/apollo-blog\" rel=\"noopener noreferrer\" target=\"_blank\">Progressive Apollo Blog</a> as well as the <a href=\"https://www.cosmicjs.com/apps/gatsby-docs\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby Documentation Website</a>. Follow Jacob on <a href=\"http://linkedin.com/in/https://linkedin/in/jacobknaack\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> and <a href=\"https://github.com/JacobKnaack\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a> and enjoy the conversation.<br><br></p>","featured_image":{"url":"https://cdn.cosmicjs.com/1d2113c0-6c19-11e9-a246-abd80f26250a-Jacob.png","imgix_url":"https://imgix.cosmicjs.com/1d2113c0-6c19-11e9-a246-abd80f26250a-Jacob.png"}}},{"_id":"5a0377fdb28973b91d000009","order":34,"slug":"smartconnect-launches-a-marketing-website","title":"SmartConnect Launches a Marketing Website","content":"<p><a href=\"http://smartconnect.me\" rel=\"noopener noreferrer\" target=\"_blank\">SmartConnect</a> is a one-stop shop that helps ease the stress of moving into a new home. They help connect customer&#39;s water, gas, electricity, TV, phone, internet, satellite and security services in their new home. To do this SmartConnect partners with real estate companies to offer their services. They needed a way to manage content for their marketing website, as well as acquire realtor partners that can create their own branded pages within the website. &nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/780af940-c4d6-11e7-893d-2b46821f5b28-f2ca4000-b02c-11e7-ad94-cd2adf5d0d81-blank logo_full_landscape.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/583d81b0-c4da-11e7-893d-2b46821f5b28-Screen Shot 2017-11-08 at 5.11.42 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><blockquote><p>&ldquo;We were pitched Cosmic by our Interactive Agency Partner Simple Media. Simple was able to quickly build a content-driven marketing website that produces leads and allows us to convert them. Our website directly accepts Partner information and\r\ngenerates a new partner-branded landing page for our SmartConnect reps. Cosmic lets us make content edits, write new blogs and track leads while also automatically building new partner pages that helps us build our business faster.&quot;</p></blockquote><p><cite>&mdash; Michael Zobeck, Founder, SmartConnect</cite></p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/8ac217e0-c4da-11e7-854c-47fc4672358d-sm_new_color_full.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><cite>SmartConnect is an example of a Cosmic-powered application built by Community Member&nbsp;</cite><a href=\"http://simplemedia.co/\" rel=\"noopener noreferrer\" target=\"_blank\"><cite>Simple Media</cite></a><cite>. Read more about Simple Media in their&nbsp;</cite>\r\n<a href=\"https://cosmicjs.com/case-studies/simple-media-ditched-their-cms-for-the-cloud\" rel=\"noopener noreferrer\" target=\"_blank\"><cite>Case Study</cite></a><cite>.&nbsp;</cite></p>","metafields":[{"value":"SmartConnect","key":"company","title":"Company","type":"text","children":null},{"value":"Concierge Services ","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"SmartConnect is a one-stop shop that helps ease the stress of moving into a new home. They help connect customer's water, gas, electricity, TV, phone, internet, satellite and security services in their new home. To do this SmartConnect partners with real estate companies to offer their services. They needed a way to manage content for a marketing website, as well as acquire realtor partners that have their own branded pages.  \n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"437e90b0-c4cc-11e7-bedc-43d6110cf0dd-f2ca4000-b02c-11e7-ad94-cd2adf5d0d81-blank logo_full_landscape.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/437e90b0-c4cc-11e7-bedc-43d6110cf0dd-f2ca4000-b02c-11e7-ad94-cd2adf5d0d81-blank logo_full_landscape.png","imgix_url":"https://imgix.cosmicjs.com/437e90b0-c4cc-11e7-bedc-43d6110cf0dd-f2ca4000-b02c-11e7-ad94-cd2adf5d0d81-blank logo_full_landscape.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-11-08T21:32:43.952Z","created_by":"5716b504e9c686d006000073","created":"2017-11-08T21:32:43.952Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"company":"SmartConnect","industry_type":"Concierge Services ","teaser":"SmartConnect is a one-stop shop that helps ease the stress of moving into a new home. They help connect customer's water, gas, electricity, TV, phone, internet, satellite and security services in their new home. To do this SmartConnect partners with real estate companies to offer their services. They needed a way to manage content for a marketing website, as well as acquire realtor partners that have their own branded pages.  \n\n\n","logo":{"url":"https://cdn.cosmicjs.com/437e90b0-c4cc-11e7-bedc-43d6110cf0dd-f2ca4000-b02c-11e7-ad94-cd2adf5d0d81-blank logo_full_landscape.png","imgix_url":"https://imgix.cosmicjs.com/437e90b0-c4cc-11e7-bedc-43d6110cf0dd-f2ca4000-b02c-11e7-ad94-cd2adf5d0d81-blank logo_full_landscape.png"}}},{"_id":"5a2842a36eb72c025900014f","order":35,"slug":"sloma-real-estate-group-builds-a-website","title":"Sloma Real Estate Group Builds a Website","content":"<p><a href=\"http://slomarealestate.com\" rel=\"noopener noreferrer\" target=\"_blank\">Sloma Real Estate</a> wanted to make finding a home in Chicago a memorable experience for all the right reasons. When they decided to build a new website, they wanted something that was memorable without being gaudy, and distinguished without being pretentious.&nbsp;</p><p><br></p><p><img src=\"https://cosmic-s3.imgix.net/7af3cde0-daba-11e7-82e3-e92aaea009f5-sloma-imac-mockup.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&ldquo;With regards to speed and flexibility there is no equal to Cosmic. The amount of things that we were able to accomplish on a tight budget and timeline were nothing short of remarkable.&rdquo;</p><p><cite>&mdash; Garrett Sibinga, Front End Engineer &nbsp;</cite></p></blockquote><p>Garrett Sibinga: &quot;When we set out to build the website, we wanted a fast and modern site that could support rich content without slowing down. We wanted to be able to work with API&rsquo;s, but still have the flexibility of a CMS system. After lots of research we settled on Cosmic because the interface and concepts were familiar from WordPress, but the prospect of working with <a href=\"https://cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a> instead of <a href=\"https://cosmicjs.com/knowledge-base/php-cms\" rel=\"noopener noreferrer\" target=\"_blank\">PHP</a> was a huge relief.&quot;</p><p>&quot;Once we started working with the Cosmic platform, we quickly began to see many of the advantages. Whether is was the API string that auto-populates for each page, adding metafields and structuring data on the fly, or the <a href=\"https://cosmicjs.com/cms-api\" rel=\"noopener noreferrer\" target=\"_blank\">Imgix integration</a> for serving the perfectly sized image every time, we were thrilled by the features we continued to discover. In addition to having great features, we were blown away by the speed and consistency that the platform offered.&quot;</p><p><br></p><p><img src=\"https://cosmic-s3.imgix.net/48aed8c0-daba-11e7-92aa-b5a1b0875421-Screen Shot 2017-12-06 at 1.14.45 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><p>&quot;For everything that was awesome about the project, there were definitely some technical challenges. Because the site uses MLS data, iFrames were a necessary evil. In order to include them dynamically in our layouts, we had to communicate with them. We ended writing scripts that work between our MLS provider&rsquo;s domain and our main domain which resize our frame window based on the content within it. Overall the project turned out great, and we couldn&rsquo;t have been more excited when we launched <a href=\"http://slomarealestate.com\"></a><a href=\"//slomarealestate.com\">slomarealestate.com</a>. &quot;</p><p><br></p><p><cite>Case Study Contributed by Garrett Sibinga, Cosmic Community Member&nbsp;</cite></p><p><br></p><div class=\"fr-embedly   \" data-original-embed=\"<a href='https://cosmicjs.com/jamesgarrett' class='embedly-card'></a>\"><a href=\"https://cosmicjs.com/jamesgarrett\" class=\"embedly-card\"></a></div>","metafields":[{"value":"Sloma Real Estate Group","key":"company","title":"Company","type":"text","children":null},{"value":"Real Estate","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Sloma Real Estate wanted to make finding a home in Chicago a memorable experience for all the right reasons. When they decided to build a new website, they wanted something that was memorable without being gaudy, and distinguished without being pretentious.  They wanted to be able to work with API’s while still having the flexibility of a CMS system. ","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"38908d20-e0fb-11e7-9770-193f8ce654df-Asset 34.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/38908d20-e0fb-11e7-9770-193f8ce654df-Asset 34.png","imgix_url":"https://imgix.cosmicjs.com/38908d20-e0fb-11e7-9770-193f8ce654df-Asset 34.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-12-06T19:18:59.312Z","created_by":"5716b504e9c686d006000073","created":"2017-12-06T19:18:59.313Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"metadata":{"company":"Sloma Real Estate Group","industry_type":"Real Estate","teaser":"Sloma Real Estate wanted to make finding a home in Chicago a memorable experience for all the right reasons. When they decided to build a new website, they wanted something that was memorable without being gaudy, and distinguished without being pretentious.  They wanted to be able to work with API’s while still having the flexibility of a CMS system. ","logo":{"url":"https://cdn.cosmicjs.com/38908d20-e0fb-11e7-9770-193f8ce654df-Asset 34.png","imgix_url":"https://imgix.cosmicjs.com/38908d20-e0fb-11e7-9770-193f8ce654df-Asset 34.png"}}},{"_id":"5d35ed4c28b51555a1a478e5","order":35,"slug":"duplicate-object-types-editor-publishing-restrictions","title":"Duplicate Object Types, Editor Publishing Restrictions","content":"<p>We have a couple new feature releases for your review:<br><br><strong>Duplicate Object Types</strong><br>You can now Duplicate Object Types. Go to any <em>Object Type &gt; Settings</em> page and scroll to the bottom and find the &quot;Duplicate Objects Type&quot; button. This is a great time saver for when you need to duplicate Object Type Metafield content models and settings (it does not duplicate Objects).</p><p><img src=\"https://cdn.cosmicjs.com/b92de430-aca3-11e9-ad8d-03d468d7a40e-Screen-Shot-2019-07-22-at-11.53.21-AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><strong>Editor Restricted Publishing</strong><br>You can now assign a team member access to all content in your Bucket but only allow them to save content to draft. This is a nice in-between role between Editor and Contributor.</p><p><img src=\"https://cdn.cosmicjs.com/1715eb70-aca3-11e9-ad8d-03d468d7a40e-Screen-Shot-2019-07-22-at-11.56.16-AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p>","metafields":[{"value":"","key":"published_date","title":"Published Date","type":"date","children":null},{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":null,"imgix_url":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2019-07-22T17:07:24.944Z","created_by":"5357ef811693be2118000001","modified_at":"2020-08-10T13:59:43.225Z","created":"2019-07-22T17:07:24.944Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-07-22T17:14:44.956Z","metadata":{"published_date":"","author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":null,"imgix_url":null}}},{"_id":"5a2f014769fccec655000009","order":35,"slug":"typescript-cms","title":"TypeScript CMS ","content":"","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"xEsEbr17ak","value":"ac1708c0-debf-11e7-ab11-c9d0f3286dfc-Unknown.png","url":"https://cdn.cosmicjs.com/ac1708c0-debf-11e7-ab11-c9d0f3286dfc-Unknown.png","imgix_url":"https://imgix.cosmicjs.com/ac1708c0-debf-11e7-ab11-c9d0f3286dfc-Unknown.png"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"hxo5hWDtdQ","value":"a85ce6f0-debf-11e7-ab11-c9d0f3286dfc-Unknown.png","url":"https://cdn.cosmicjs.com/a85ce6f0-debf-11e7-ab11-c9d0f3286dfc-Unknown.png","imgix_url":"https://imgix.cosmicjs.com/a85ce6f0-debf-11e7-ab11-c9d0f3286dfc-Unknown.png"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"JhvPtIN21b","value":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for TypeScript websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"eS4BnOnwpI","value":"TypeScript"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"GLL8Huo0kA","value":"Cosmic is the best CMS for TypeScript websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"00WvECgvNL","value":"979b32e0-debf-11e7-a865-5b78e641a505-Unknown.png","url":"https://cdn.cosmicjs.com/979b32e0-debf-11e7-a865-5b78e641a505-Unknown.png","imgix_url":"https://imgix.cosmicjs.com/979b32e0-debf-11e7-a865-5b78e641a505-Unknown.png"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"BouGTZZKHw","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"3jCXLJhykI","value":"Best Headless CMS for TypeScript"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"qMCjXKINbg","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]},{"children":null,"type":"text","title":"Apps Search Term","key":"apps_search_term","id":"3dkcxkd4ob","value":""},{"children":null,"type":"text","title":"Articles Search Term","key":"articles_search_term","id":"hJM1KnyWxu","value":""},{"children":null,"type":"text","title":"Page Overview Title","key":"page_overview_title","id":"l6U3bYtxCZ","value":""},{"children":null,"type":"html-textarea","title":"Page Overview","key":"page_overview","id":"aVM1hYsvg5","value":""},{"children":null,"type":"html-textarea","title":"SEO Content","key":"seo_content","id":"Wa5glLRZko","value":""},{"children":[],"type":"repeater","title":"Apps","key":"apps","id":"APBWc2DwG9","value":"","repeater_fields":[{"title":"App Slug","key":"app_slug","value":"","type":"text","required":false}]},{"children":[],"type":"repeater","title":"Articles","key":"articles","id":"CITz1i7kHD","value":"","repeater_fields":[{"title":"Article Slug","key":"article_slug","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-22T23:07:51.159Z","created_by":"5357ef811693be2118000001","created":"2017-12-11T22:05:59.333Z","status":"published","modified_at":"2020-10-28T14:34:55.349Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-10-28T14:34:55.349Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/ac1708c0-debf-11e7-ab11-c9d0f3286dfc-Unknown.png","imgix_url":"https://imgix.cosmicjs.com/ac1708c0-debf-11e7-ab11-c9d0f3286dfc-Unknown.png"},"thumbnail":{"url":"https://cdn.cosmicjs.com/a85ce6f0-debf-11e7-ab11-c9d0f3286dfc-Unknown.png","imgix_url":"https://imgix.cosmicjs.com/a85ce6f0-debf-11e7-ab11-c9d0f3286dfc-Unknown.png"},"blurb":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for TypeScript websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"TypeScript","seo_description":"Cosmic is the best CMS for TypeScript websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/979b32e0-debf-11e7-a865-5b78e641a505-Unknown.png","imgix_url":"https://imgix.cosmicjs.com/979b32e0-debf-11e7-a865-5b78e641a505-Unknown.png"},"code_example":"","seo_title":"Best Headless CMS for TypeScript","videos":[],"apps_search_term":"","articles_search_term":"","page_overview_title":"","page_overview":"","seo_content":"","apps":[],"articles":[]}},{"_id":"5d238263f6d70b6118eaa61f","order":36,"slug":"headless-cms-features-and-solution-pages","title":"Headless CMS Features and Solution Pages","content":"<p>We&#39;re excited to launch new resources to demonstrate how teams all over the world are using the Cosmic <a href=\"https://cosmicjs.com/headless-cms\" rel=\"noopener noreferrer\" target=\"_blank\">headless CMS</a> to manage content for their websites and apps. You&#39;ll now notice:</p><ol><li>The Navigation Bar has grown to include a new <a href=\"https://cosmicjs.com/solutions\" rel=\"noopener noreferrer\" target=\"_blank\"><strong>Solutions</strong></a> Tab, which outlines use-cases like <a href=\"https://cosmicjs.com/solutions/headless-cms-for-ecommerce-websites\" rel=\"noopener noreferrer\" target=\"_blank\"><strong>E-Commerce Websites</strong></a>, <a href=\"https://cosmicjs.com/solutions/headless-cms-for-blogs\" rel=\"noopener noreferrer\" target=\"_blank\"><strong>Blogs</strong></a>, <a href=\"https://cosmicjs.com/solutions/headless-cms-for-native-apps\" rel=\"noopener noreferrer\" target=\"_blank\"><strong>Native Apps</strong></a> and more. Each Solution page provides helpful open-source example apps, extensions and customer stories that demonstrate that particular use-case.</li><li>All Cosmic <a href=\"https://cosmicjs.com/headless-cms\" rel=\"noopener noreferrer\" target=\"_blank\"><strong>Headless CMS Features</strong></a> now have a Feature Detail Page for easier adoption and reference among teams. See example: <a href=\"https://cosmicjs.com/headless-cms/revision-history\" rel=\"noopener noreferrer\" target=\"_blank\"><strong>Revision History</strong></a>.</li></ol><article><p>By highlighting customer use-cases and providing better feature documentation, it&#39;s our goal to help you build apps faster, together. If you have any questions, or any other feature requests, <a href=\"https://cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Slack</a> and <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">join us on Twitter</a>. &nbsp;&nbsp;</p><p>Photo by <a href=\"https://unsplash.com/@jplenio?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Johannes Plenio</a> on <a href=\"https://unsplash.com/search/photos/lightbulb?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Unsplash</a></p></article>","metafields":[{"value":"2019-07-09","key":"published_date","title":"Published Date","type":"date","children":null},{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"29d44330-a279-11e9-891e-991d47368f91-johannes-plenio-voQ97kezCx0-unsplash.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/29d44330-a279-11e9-891e-991d47368f91-johannes-plenio-voQ97kezCx0-unsplash.jpg","imgix_url":"https://imgix.cosmicjs.com/29d44330-a279-11e9-891e-991d47368f91-johannes-plenio-voQ97kezCx0-unsplash.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2019-07-08T17:50:27.918Z","created_by":"5716b504e9c686d006000073","modified_at":"2020-08-10T13:59:43.225Z","created":"2019-07-08T17:50:27.918Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-07-09T19:06:57.190Z","metadata":{"published_date":"2019-07-09","author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"featured_image":{"url":"https://cdn.cosmicjs.com/29d44330-a279-11e9-891e-991d47368f91-johannes-plenio-voQ97kezCx0-unsplash.jpg","imgix_url":"https://imgix.cosmicjs.com/29d44330-a279-11e9-891e-991d47368f91-johannes-plenio-voQ97kezCx0-unsplash.jpg"}}},{"_id":"58fc11d1f9dd68656c0000b3","order":36,"slug":"python-cms","title":"Python CMS","content":"<p>Cosmic JS is an API-first CMS that integrates with Python. Use Cosmic JS to quickly build content-powered blogs, dynamic pages, and more. Install the Official Cosmic JS Python Client to start managing dynamic content. Cosmic JS offers an easy way to power\r\ncontent for your Python apps. &nbsp;As your Python CMS, Cosmic &nbsp;JS allows you to develop your application faster and easier.</p><h3>Python CMS Articles</h3><p><a data-target-href=\"https://cosmicjs.com/blog/the-cosmic-stack\" href=\"https://cosmicjs.com/blog/the-cosmic-stack\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">The Cosmic Stack</a></p><h3>Python CMS Resources</h3><p><a href=\"https://cosmicjs.com/docs/\">Cosmic JS Docs</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-python\" href=\"https://github.com/cosmicjs/cosmicjs-python\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official&nbsp;</a><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-python\" href=\"https://github.com/cosmicjs/cosmicjs-python\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Python Client</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3>Examples</h3><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'>git clone <a href=\"https://github.com/cosmicjs/cosmicjs-python.git\"></a><a href=\"https://github.com/cosmicjs/cosmicjs-python.git\">https://github.com/cosmicjs/cosmicjs-python.git</a>\r\ncd cosmicjs-python\r\npython <a href=\"setup.py\">setup.py</a> install</pre><p>Then in your Python file:</p><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><code style=' font-size: inherit; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: 0px 0px; text-align: left;'><span style=\" color: rgb(102, 217, 239);\">from</span> pythoncosmicjs <span style=\" color: rgb(102, 217, 239);\">import</span> Api\r\n<span spellcheck=\"true\" style=\" color: rgb(112, 128, 144);\"># Configure</span>\r\napi <span style=\" color: rgb(248, 248, 242);\">=</span> Api<span style=\" color: rgb(248, 248, 242);\">(</span>bucket<span style=\" color: rgb(248, 248, 242);\">=</span><span style=\" color: rgb(166, 226, 46);\">&#39;bucket-slug&#39;</span><span style=\" color: rgb(248, 248, 242);\">,</span> read_key<span style=\" color: rgb(248, 248, 242);\">=</span><span style=\" color: rgb(166, 226, 46);\">&#39;read_key&#39;</span><span style=\" color: rgb(248, 248, 242);\">,</span> write_key<span style=\" color: rgb(248, 248, 242);\">=</span><span style=\" color: rgb(166, 226, 46);\">&#39;write_key&#39;</span><span style=\" color: rgb(248, 248, 242);\">)</span>\r\n<span spellcheck=\"true\" style=\" color: rgb(112, 128, 144);\"># Get all objects</span>\r\n<span style=\" color: rgb(102, 217, 239);\">print</span><span style=\" color: rgb(248, 248, 242);\">(</span>api<span style=\" color: rgb(248, 248, 242);\">.</span>objects<span style=\" color: rgb(248, 248, 242);\">(</span>limit<span style=\" color: rgb(248, 248, 242);\">=</span><span style=\" color: rgb(174, 129, 255);\">10</span><span style=\" color: rgb(248, 248, 242);\">,</span> skip<span style=\" color: rgb(248, 248, 242);\">=</span><span style=\" color: rgb(174, 129, 255);\">5</span><span style=\" color: rgb(248, 248, 242);\">)</span><span style=\" color: rgb(248, 248, 242);\">)</span> <span spellcheck=\"true\" style=\" color: rgb(112, 128, 144);\"># limit, skip the default is None</span>\r\n<span spellcheck=\"true\" style=\" color: rgb(112, 128, 144);\"># Get objects by type</span>\r\n<span style=\" color: rgb(102, 217, 239);\">print</span><span style=\" color: rgb(248, 248, 242);\">(</span>api<span style=\" color: rgb(248, 248, 242);\">.</span>object_type<span style=\" color: rgb(248, 248, 242);\">(</span>type_slug<span style=\" color: rgb(248, 248, 242);\">=</span><span style=\" color: rgb(166, 226, 46);\">&#39;pages&#39;</span><span style=\" color: rgb(248, 248, 242);\">,</span> limit<span style=\" color: rgb(248, 248, 242);\">=</span><span style=\" color: rgb(174, 129, 255);\">10</span><span style=\" color: rgb(248, 248, 242);\">,</span> skip<span style=\" color: rgb(248, 248, 242);\">=</span><span style=\" color: rgb(174, 129, 255);\">5</span><span style=\" color: rgb(248, 248, 242);\">)</span><span style=\" color: rgb(248, 248, 242);\">)</span> <span spellcheck=\"true\" style=\" color: rgb(112, 128, 144);\"># limit, skip the default is None</span>\r\n<span spellcheck=\"true\" style=\" color: rgb(112, 128, 144);\"># Get object</span>\r\n<span style=\" color: rgb(102, 217, 239);\">print</span><span style=\" color: rgb(248, 248, 242);\">(</span>api<span style=\" color: rgb(248, 248, 242);\">.</span>object<span style=\" color: rgb(248, 248, 242);\">(</span>object_slug<span style=\" color: rgb(248, 248, 242);\">=</span><span style=\" color: rgb(166, 226, 46);\">&#39;object-slug&#39;</span><span style=\" color: rgb(248, 248, 242);\">)</span><span style=\" color: rgb(248, 248, 242);\">)</span> <span spellcheck=\"true\" style=\" color: rgb(112, 128, 144);\"># object_slug mandatory variable</span>\r\n</code></pre><p>More examples available on the <a href=\"https://cosmicjs.com/getting-started\" rel=\"noopener noreferrer\" target=\"_blank\">Getting Started page</a>.</p>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"W0CkugvO0E","value":"89ba2960-27cc-11e7-8426-e9537a551401-python.svg","url":"https://cdn.cosmicjs.com/89ba2960-27cc-11e7-8426-e9537a551401-python.svg","imgix_url":"https://imgix.cosmicjs.com/89ba2960-27cc-11e7-8426-e9537a551401-python.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"5c7W2salx2","value":"8d27d8e0-27cc-11e7-8426-e9537a551401-python.svg","url":"https://cdn.cosmicjs.com/8d27d8e0-27cc-11e7-8426-e9537a551401-python.svg","imgix_url":"https://imgix.cosmicjs.com/8d27d8e0-27cc-11e7-8426-e9537a551401-python.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"pvAT2TorkC","value":"<p>Cosmic is the best CMS for Python websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"ZlXTKEubcD","value":"Python"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"2znYsZjhzM","value":"Cosmic is the best CMS for Python websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"bA9gZH8Wvo","value":"bd335db0-2aca-11e7-ae54-e9a1fc58ec22-python.jpg","url":"https://cdn.cosmicjs.com/bd335db0-2aca-11e7-ae54-e9a1fc58ec22-python.jpg","imgix_url":"https://imgix.cosmicjs.com/bd335db0-2aca-11e7-ae54-e9a1fc58ec22-python.jpg"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"cpaU1bH93b","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"fwokhKF34Q","value":""},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"frgtgqfrpylludl8pnsi","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-23T02:30:41.876Z","created_by":"5357ef811693be2118000001","created":"2017-04-23T02:30:41.876Z","status":"published","modified_at":"2020-06-27T19:34:59.755Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-27T19:34:59.755Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/89ba2960-27cc-11e7-8426-e9537a551401-python.svg","imgix_url":"https://imgix.cosmicjs.com/89ba2960-27cc-11e7-8426-e9537a551401-python.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/8d27d8e0-27cc-11e7-8426-e9537a551401-python.svg","imgix_url":"https://imgix.cosmicjs.com/8d27d8e0-27cc-11e7-8426-e9537a551401-python.svg"},"blurb":"<p>Cosmic is the best CMS for Python websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Python","seo_description":"Cosmic is the best CMS for Python websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/bd335db0-2aca-11e7-ae54-e9a1fc58ec22-python.jpg","imgix_url":"https://imgix.cosmicjs.com/bd335db0-2aca-11e7-ae54-e9a1fc58ec22-python.jpg"},"code_example":"","seo_title":"","videos":[]}},{"_id":"5c6dacf64692736579b70232","order":36,"slug":"product-update-view-as-editor","title":"Product Update: View as Editor","content":"<p><img src=\"https://cosmic-s3.imgix.net/daa1a400-3546-11e9-be5e-d196042f83b6--udZnjsCzsE.jpg?w=1200&auto=compress\" data-name=\"-udZnjsCzsE.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>We&#39;re happy to release a new feature that helps you collaborate with your team members easier using Cosmic. Introducing <strong>View as Editor</strong>.<br><br>As a developer, getting a CMS set up for your content creators requires a certain level of empathy. It&#39;s your job to make a technology choice that allows them to work in a comfortable environment and only see what they need to get their job done.<br><br>With the new &quot;<strong>View as Editor</strong>&quot; toggle now available in your Bucket for the developer and admin roles (see gif below), you can preview the entire Bucket experience from the vantage point of your content creators hiding all developer features and settings.<br><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1e608ec0-3549-11e9-918c-59ca5baebb7d-view-as-editor.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br>So now when you add your content creators in the editor role, you can be sure that you are giving them an intuitive and easy-to-use editing experience.<br><br>I&#39;d love to hear your thoughts on this and other ways to make it easier for teams of developers and content creators to collaborate. <a href=\"https://www.cosmicjs.com//community\" rel=\"noopener noreferrer\" target=\"_blank\">Join the conversation on Slack</a> and <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a>.<br><br>Photo by <a href=\"https://unsplash.com/photos/-udZnjsCzsE?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Scott Webb</a> on <a href=\"https://unsplash.com/?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Unsplash</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>As a developer, getting a CMS set up for your content creators requires a certain level of empathy. It&#39;s your job to make a technology choice that allows them to work in a comfortable environment and only see what they need to get their job done.</p>"},{"value":"daa1a400-3546-11e9-be5e-d196042f83b6--udZnjsCzsE.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/daa1a400-3546-11e9-be5e-d196042f83b6--udZnjsCzsE.jpg","imgix_url":"https://imgix.cosmicjs.com/daa1a400-3546-11e9-be5e-d196042f83b6--udZnjsCzsE.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2019-02-20T19:39:34.921Z","created_by":"5357ef811693be2118000001","created":"2019-02-20T19:39:34.921Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-02-21T01:38:58.279Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>As a developer, getting a CMS set up for your content creators requires a certain level of empathy. It&#39;s your job to make a technology choice that allows them to work in a comfortable environment and only see what they need to get their job done.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/daa1a400-3546-11e9-be5e-d196042f83b6--udZnjsCzsE.jpg","imgix_url":"https://imgix.cosmicjs.com/daa1a400-3546-11e9-be5e-d196042f83b6--udZnjsCzsE.jpg"}}},{"_id":"59f100cb13c70dca7800304e","order":36,"slug":"resistbot-brings-democracy-to-your-fingertips","title":"Resistbot Brings Democracy to Your Fingertips","content":"<p><a href=\"https://resistbot.io/\" rel=\"noopener noreferrer\" target=\"_blank\">Resistbot</a> empowers citizens to help bring change in their government. &nbsp;By simply texting RESIST to 50409, they will take your request, turn it into a formal letter then fax it to your elected officials. &nbsp;Resistbot uses Cosmic to empower their platform with information to serve to their <a href=\"https://resistbot.news/the-robot-of-the-resistance-2b40d2703794\" rel=\"noopener noreferrer\" target=\"_blank\">millions of users</a>.</p><p><img src=\"https://cosmic-s3.imgix.net/a4dfb420-bb3e-11e7-9030-cb9c8c291293-resistbot.svg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&ldquo;Cosmic enabled me to spin up a number of simple content-driven Resistbot features in a matter of minutes: helping folks find a topic to write to their officials about, tips for using the bot, and fun quotes. I was able to move content out of my\r\nflow logic and simplify my code. It worked great for me as a quick data API, and saved me a ton of time. And when I need help, the team is always right there.&rdquo;</p></blockquote><p><cite>&mdash; Jason Putori, Co-creator Resistbot</cite></p>","metafields":[{"value":"Resistbot","key":"company","title":"Company","type":"text","children":null},{"value":"Civic Action","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Resistbot empowers citizens to help bring change in their government.  By simply texting RESIST to 50409, they will take your request, turn it into a formal letter then fax it to your elected officials.  Resistbot uses Cosmic to empower their platform with information to serve to their millions of users.","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"bbe7a3e0-c3d5-11e7-8554-abcc312ecfae-resistbot.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/bbe7a3e0-c3d5-11e7-8554-abcc312ecfae-resistbot.png","imgix_url":"https://imgix.cosmicjs.com/bbe7a3e0-c3d5-11e7-8554-abcc312ecfae-resistbot.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-25T21:23:23.430Z","created_by":"5716b504e9c686d006000073","created":"2017-10-25T21:23:23.430Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"company":"Resistbot","industry_type":"Civic Action","teaser":"Resistbot empowers citizens to help bring change in their government.  By simply texting RESIST to 50409, they will take your request, turn it into a formal letter then fax it to your elected officials.  Resistbot uses Cosmic to empower their platform with information to serve to their millions of users.","logo":{"url":"https://cdn.cosmicjs.com/bbe7a3e0-c3d5-11e7-8554-abcc312ecfae-resistbot.png","imgix_url":"https://imgix.cosmicjs.com/bbe7a3e0-c3d5-11e7-8554-abcc312ecfae-resistbot.png"}}},{"_id":"58fc0ec85161d9036900040f","order":37,"slug":"php-cms","title":"PHP CMS","content":"<p>Cosmic JS is an API-first CMS that integrates with PHP. Use Cosmic JS to quickly build content-powered blogs, dynamic pages, and more. Install the Official Cosmic JS PHP Client to start managing content for your app application. &nbsp;Check out some <a href=\"https://cosmicjs.com/apps?languages=PHP\" rel=\"noopener noreferrer\" target=\"_blank\">PHP integration examples</a> on our <a href=\"https://cosmicjs.com/apps\" rel=\"noopener noreferrer\" target=\"_blank\">Apps page</a>.</p><h3>PHP CMS Articles</h3><p><a data-target-href=\"https://medium.com/cosmicjs/build-a-php-single-page-website-in-4-steps-425b642641fa\" href=\"https://medium.com/cosmicjs/build-a-php-single-page-website-in-4-steps-425b642641fa\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Build a PHP Single-Page Website in 4 Steps</a><br><a href=\"https://cosmicjs.com/blog/building-an-inventory-management-app-using-vuejs-and-laravel\">Building an Inventory Management App Using Vue.js and Laravel</a></p><h3>PHP CMS Resources</h3><p><a href=\"https://cosmicjs.com/docs/\">Cosmic JS Docs</a><br><span><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-php\" href=\"https://github.com/cosmicjs/cosmicjs-php\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official&nbsp;</a><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-php\" href=\"https://github.com/cosmicjs/cosmicjs-php\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">PHP</a><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-php\" href=\"https://github.com/cosmicjs/cosmicjs-php\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">&nbsp;Client</a></span><br><a data-target-href=\"https://cosmicjs.com/apps?languages=PHP\" href=\"https://cosmicjs.com/apps?languages=PHP\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">PHP Apps</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3>Examples</h3><p>Clone the PHP client:</p><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'>git clone <a href=\"https://github.com/cosmicjs/cosmicjs-php\">https://github.com/cosmicjs/cosmicjs-php</a></pre><p>Then in your PHP file:</p><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><code style=' font-size: inherit; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: 0px 0px; text-align: left;'><span style=\" color: rgb(248, 248, 242);\">$config</span> <span style=\" color: rgb(248, 248, 242);\">=</span> <span style=\" color: rgb(102, 217, 239);\">new</span> stdClass<span style=\" color: rgb(248, 248, 242);\">(</span><span style=\" color: rgb(248, 248, 242);\">)</span><span style=\" color: rgb(248, 248, 242);\">;</span>\r\n<span style=\" color: rgb(248, 248, 242);\">$config</span><span style=\" color: rgb(248, 248, 242);\">-</span><span style=\" color: rgb(248, 248, 242);\">&gt;</span><span style=\" color: rgb(249, 38, 114);\">bucket_slug</span> <span style=\" color: rgb(248, 248, 242);\">=</span> <span style=\" color: rgb(166, 226, 46);\">&quot;astral&quot;</span><span style=\" color: rgb(248, 248, 242);\">;</span>\r\n<span style=\" color: rgb(102, 217, 239);\">include</span><span style=\" color: rgb(248, 248, 242);\">(</span><span style=\" color: rgb(166, 226, 46);\">&quot;cosmicjs.php&quot;</span><span style=\" color: rgb(248, 248, 242);\">)</span><span style=\" color: rgb(248, 248, 242);\">;</span>\r\n<span style=\" color: rgb(248, 248, 242);\">$objects</span> <span style=\" color: rgb(248, 248, 242);\">=</span> <span style=\" color: rgb(248, 248, 242);\">$cosmicjs</span><span style=\" color: rgb(248, 248, 242);\">-</span><span style=\" color: rgb(248, 248, 242);\">&gt;</span><span style=\" color: rgb(230, 219, 116);\">getObjects</span><span style=\" color: rgb(248, 248, 242);\">(</span><span style=\" color: rgb(248, 248, 242);\">)</span><span style=\" color: rgb(248, 248, 242);\">;</span>\r\n<span style=\" color: rgb(230, 219, 116);\">var_dump</span><span style=\" color: rgb(248, 248, 242);\">(</span><span style=\" color: rgb(248, 248, 242);\">$objects</span><span style=\" color: rgb(248, 248, 242);\">)</span><span style=\" color: rgb(248, 248, 242);\">;</span></code></pre>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"rQBITCqU8g","value":"2e3b1dc0-27cb-11e7-9631-b17e7278f329-php.svg","url":"https://cdn.cosmicjs.com/2e3b1dc0-27cb-11e7-9631-b17e7278f329-php.svg","imgix_url":"https://imgix.cosmicjs.com/2e3b1dc0-27cb-11e7-9631-b17e7278f329-php.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"zVRkJRMJ0M","value":"f5fd1350-27ca-11e7-9631-b17e7278f329-php.svg","url":"https://cdn.cosmicjs.com/f5fd1350-27ca-11e7-9631-b17e7278f329-php.svg","imgix_url":"https://imgix.cosmicjs.com/f5fd1350-27ca-11e7-9631-b17e7278f329-php.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"COhPQ3A2M3","value":"<p>Cosmic is the best CMS for PHP websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"NZP0ZERoVW","value":"PHP"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"vtCIYox5S2","value":"Cosmic is the best CMS for PHP websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"drMNo5czEb","value":"cc373520-2aca-11e7-ae54-e9a1fc58ec22-php.jpg","url":"https://cdn.cosmicjs.com/cc373520-2aca-11e7-ae54-e9a1fc58ec22-php.jpg","imgix_url":"https://imgix.cosmicjs.com/cc373520-2aca-11e7-ae54-e9a1fc58ec22-php.jpg"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"jCqcuVLuet","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"fwokhKF34Q","value":""},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"frgtgqfrpylludl8pnsi","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-23T02:17:44.047Z","created_by":"5357ef811693be2118000001","created":"2017-04-23T02:17:44.047Z","status":"published","modified_at":"2020-06-27T19:35:25.336Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-27T19:35:25.336Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/2e3b1dc0-27cb-11e7-9631-b17e7278f329-php.svg","imgix_url":"https://imgix.cosmicjs.com/2e3b1dc0-27cb-11e7-9631-b17e7278f329-php.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/f5fd1350-27ca-11e7-9631-b17e7278f329-php.svg","imgix_url":"https://imgix.cosmicjs.com/f5fd1350-27ca-11e7-9631-b17e7278f329-php.svg"},"blurb":"<p>Cosmic is the best CMS for PHP websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"PHP","seo_description":"Cosmic is the best CMS for PHP websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/cc373520-2aca-11e7-ae54-e9a1fc58ec22-php.jpg","imgix_url":"https://imgix.cosmicjs.com/cc373520-2aca-11e7-ae54-e9a1fc58ec22-php.jpg"},"code_example":"","seo_title":"","videos":[]}},{"_id":"5a8f0ad2730d8d2953107b77","order":37,"slug":"design-spin-builds-a-react-website","title":"Design Spin Builds a React Website","content":"<p><a href=\"https://designspin.co.uk\" rel=\"noopener noreferrer\" target=\"_blank\">Design Spin</a> is a boutique independent design and development shop in Norwich, England. Principal <a href=\"https://twitter.com/Design_Spin?lang=en\" rel=\"noopener noreferrer\" target=\"_blank\">Jason Foster</a> focuses on creating premium interactive experiences for clients through web and mobile application development. Updating the Design Spin website had been on his radar for quite some time and this week we see the released <a href=\"https://designspin.co.uk\" rel=\"noopener noreferrer\" target=\"_blank\">product</a>. Read on to hear the narrative directly from Jason Foster as written in his <a href=\"https://designspin.co.uk/article/new-site-for-design-spin\" rel=\"noopener noreferrer\" target=\"_blank\">blog</a>.&nbsp;</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/170495c0-18af-11e8-aeb8-8b476a88dd0b-design-spin-site-image.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><strong>Jason Foster</strong>: &quot;We don&#39;t see the site as finished, but rather an ongoing project that we will iterate on and improve over time. Our old website was built with WordPress. We love WordPress, as do the clients we have that are using it. But we wanted the new site to be something modern, incorporating some of the latest in what the web has to offer.</p><p>JavaScript as a language has made a lot of advances over the last few years and has become extremely popular. It used to be known as a front end language, predominantly used for providing effects and interactions to web pages, things like image sliders for example. But today with the availability of <a href=\"https://nodejs.org/en/\">node.js</a>, it is possible to do a whole lot more.</p><p>Node allows JavaScript to run on the server side. If this was a WordPress website the language we would be using on the server side would be PHP, but we would still be using JavaScript on the client side for any browser trickery such as the image sliders mentioned. As we see it, this is one of the benefits of using Node for our server side implementation: much of the codebase used on the server side can be shared with the client and vice versa.</p><p>When you visit this website, the first page is delivered from the server then further page changes are handled client side. This makes the whole experience seem very quick. I will outline two of the tools used to get this job done.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/e8487940-18ae-11e8-8adf-577078533a11-Before-4.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><h3><br></h3><h3>React</h3><p>Developed by Facebook, <a href=\"https://reactjs.org/\">react</a> is a popular JavaScript library for developing user interfaces. React allows you to break your page / user interface into smaller re-usable components that can have state and can be driven by state. When state in your app changes, React will only change what needs to change through its own complex differing algorithm.</p><p>This library also includes methods for rendering components on the server side. You may have seen apps that when loaded in your browser present you with an empty app container or a loading spinner, shortly followed by content. The content that follows was triggered to load after the initial page had been served. This all sounds innocent enough but if that content was important from an SEO perspective, the chances are a search engine may never know about it.</p><p>We used the server rendering features of react, so on initial page load our content is available to be crawled by a search engine.</p><p><br></p><h3>Cosmic</h3><p>As we were no longer using WordPress, we needed something to replace our content management system. WordPress has a built in Restful API, which would of worked well for this project, but we discovered Cosmic. Cosmic does everything WordPress does but without the programmatic hassle, so we could get the site up to speed quicker. They provide a useful library making it easy to query your data, so we wrapped this functionality on our own server routes so we could switch it out easily in the future should we ever need to.&nbsp;</p><p>Cosmic also provides Web Hooks for setup to the URLs of your choice. When we create a new article, Cosmic notifies us through our specified URL, allowing us to do things like update our sitemap and send out push notifications.</p><p><br></p><h2>PROGRESSIVE WEB APPS</h2><p>When we built this website we wanted to ensure that we ticked the boxes outlined by <a href=\"https://developers.google.com/web/tools/lighthouse/\">Lighthouse</a> for a progressive web app. <a href=\"https://developers.google.com/web/tools/lighthouse/\">Lighthouse</a> is available within the Google Chrome browsers development tools, allowing you to quickly audit any of your web pages for Progressive Web Apps, Performance, Best Practices and Accessibility.</p><p>We care about what Google deems as important, so put a fair bit of effort in trying to get what Google&#39;s Lighthouse deemed to be a performant website / web app. We got a 100% for PWA and are still tweaking a bit to try and up our performance score, on last check 86%.</p><p>Our home page has a pixelated animation of My face! On the first iteration of coding that, the performance score was really suffering, as it was basically blocking interaction on the website which in Lighthouse&#39;s opinion is a big no no. When things like this happen you have to get creative. We knew we wanted the animation, because it looks cool right? So we ended up doing the calculations for where each pixel should be in a web worker. This got us back to a pretty good performance score and everybody was happy again, phew!&quot;</p><p><br></p><blockquote><p>&quot;I hope in the future that this new website will convince clients to avoid WordPress and use the fantastic Cosmic API to build apps and manage content.&rdquo;</p><p><cite>&mdash; Jason Foster, Principal and Lead Developer</cite></p></blockquote>","metafields":[{"value":"Design Spin","key":"company","title":"Company","type":"text","children":null},{"value":"Interactive Agency","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Design Spin is a boutique independent design and development shop in Norwich, England. Principal Jason Foster focuses on creating premium interactive experiences for clients through web and mobile application development. Updating the Design Spin website had been on his radar for quite some time and this week we see the released product. \n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"8446d310-1804-11e8-b0cb-5d400b8ba5fa-3aedfc70-15b1-11e8-b72b-ad95b808aa14-design-spin-site-image.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/8446d310-1804-11e8-b0cb-5d400b8ba5fa-3aedfc70-15b1-11e8-b72b-ad95b808aa14-design-spin-site-image.jpg","imgix_url":"https://imgix.cosmicjs.com/8446d310-1804-11e8-b0cb-5d400b8ba5fa-3aedfc70-15b1-11e8-b72b-ad95b808aa14-design-spin-site-image.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-02-22T18:24:18.364Z","created_by":"5716b504e9c686d006000073","created":"2018-02-22T18:24:18.364Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"metadata":{"company":"Design Spin","industry_type":"Interactive Agency","teaser":"Design Spin is a boutique independent design and development shop in Norwich, England. Principal Jason Foster focuses on creating premium interactive experiences for clients through web and mobile application development. Updating the Design Spin website had been on his radar for quite some time and this week we see the released product. \n","logo":{"url":"https://cdn.cosmicjs.com/8446d310-1804-11e8-b0cb-5d400b8ba5fa-3aedfc70-15b1-11e8-b72b-ad95b808aa14-design-spin-site-image.jpg","imgix_url":"https://imgix.cosmicjs.com/8446d310-1804-11e8-b0cb-5d400b8ba5fa-3aedfc70-15b1-11e8-b72b-ad95b808aa14-design-spin-site-image.jpg"}}},{"_id":"5cf6f8ca78d0ad2a93da2d1d","order":37,"slug":"sign-up-log-in-with-google","title":"Sign up / Log in with Google","content":"<p>We&#39;re excited to announce a new way to sign up and log in with Cosmic: using your Google account. It just takes 2 clicks <span class=\"fr-emoticon fr-deletable\">😎</span>&nbsp;</p><p><img src=\"https://cdn.cosmicjs.com/6cedff30-879e-11e9-a6e9-7fae54fa6a48-google-login.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br>Authenticating with your Google account comes in addition to the existing options of using GitHub, Single Sign-On or manual account creation. We hope this makes your team&#39;s onboarding experience frictionless and easy.<a href=\"https://cosmicjs.com/login\"></a></p><p><a href=\"https://cosmicjs.com/login\">Log in or sign up to check it out</a>.</p><p><br>If you have any questions, or any other feature requests (the squeaky wheel gets the grease!) <a href=\"https://cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Slack</a> and <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">join us on Twitter</a>. &nbsp;&nbsp;</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"d40ca570-879b-11e9-8ede-1b82ca6d6457-cosmic-google.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/d40ca570-879b-11e9-8ede-1b82ca6d6457-cosmic-google.jpg","imgix_url":"https://imgix.cosmicjs.com/d40ca570-879b-11e9-8ede-1b82ca6d6457-cosmic-google.jpg"},{"value":"2019-06-05","key":"published_date","title":"Published Date","type":"date","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2019-06-04T23:03:38.671Z","created_by":"5716b504e9c686d006000073","modified_at":"2020-08-10T13:59:43.225Z","created":"2019-06-04T23:03:38.671Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:46:03.933Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"featured_image":{"url":"https://cdn.cosmicjs.com/d40ca570-879b-11e9-8ede-1b82ca6d6457-cosmic-google.jpg","imgix_url":"https://imgix.cosmicjs.com/d40ca570-879b-11e9-8ede-1b82ca6d6457-cosmic-google.jpg"},"published_date":"2019-06-05"}},{"_id":"5ced833730f2d23cfcb44613","order":38,"slug":"dashboard-updates","title":"Dashboard Updates","content":"<p>Here&#39;s a quick update on some nice improvements to the Cosmic Dashboard, accompanied by gifs for your viewing pleasure <span class=\"fr-emoticon fr-deletable\">😁</span>&nbsp;<br><br><strong>1. Easier Integration Tools</strong><br>We are committed to a world-class developer experience. It&#39;s our goal to make it as easy as possible to integrate Cosmic content into any application. And now the experience is even better because with this new Integration Tools modal update, you have instant access to the API response for any dashboard resource in your Bucket. You also have easy access to all the other available integration methods: <a href=\"https://docs.cosmicjs.com/graphql-api/\" rel=\"noopener noreferrer\" target=\"_blank\">GraphQL API</a>, <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">NPM Module</a>, and more.&nbsp;</p><p>Just click the &quot;Integration Tools&quot; button to see the magic in action.</p><p><img src=\"https://cdn.cosmicjs.com/7cf30230-8178-11e9-a201-1d9059ecc643-integration-tools.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>The high standard for an easy integration experience is <a href=\"https://stripe.com\" rel=\"noopener noreferrer\" target=\"_blank\">Stripe</a>. And we are aiming to make it even <strong>easier than Stripe</strong> to integrate your Cosmic code into your app. That&#39;s right, I said it, and you can hold me to it <span class=\"fr-emoticon fr-deletable\">😜</span>&nbsp;<br><br><strong>2. Remove File Metafields</strong><br>You can now remove files from File Metafields. This is a feature that falls in the category of &quot;why wasn&#39;t this shipped earlier?&quot;, but here it is, better late than never.<br><br><img src=\"https://cdn.cosmicjs.com/1ce418c0-8178-11e9-a201-1d9059ecc643-remove.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>We hope you like these improvements to get you up and running with cloud-powered content faster and easier. If you have any questions, or any other feature requests (the squeaky wheel gets the grease!) <a href=\"https://cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Slack</a> and <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">join us on Twitter</a>.&nbsp;</p><p><br></p><p>Photo by <a href=\"https://unsplash.com/photos/HUJDz6CJEaM?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Chris Liverani</a> on <a href=\"https://unsplash.com/?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Unsplash</a></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"b2b282a0-8179-11e9-a201-1d9059ecc643-HUJDz6CJEaM.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/b2b282a0-8179-11e9-a201-1d9059ecc643-HUJDz6CJEaM.jpg","imgix_url":"https://imgix.cosmicjs.com/b2b282a0-8179-11e9-a201-1d9059ecc643-HUJDz6CJEaM.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2019-05-28T18:51:35.680Z","created_by":"5357ef811693be2118000001","modified_at":"2020-08-10T14:02:39.393Z","created":"2019-05-28T18:51:35.680Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-05-28T19:54:46.501Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":"https://cdn.cosmicjs.com/b2b282a0-8179-11e9-a201-1d9059ecc643-HUJDz6CJEaM.jpg","imgix_url":"https://imgix.cosmicjs.com/b2b282a0-8179-11e9-a201-1d9059ecc643-HUJDz6CJEaM.jpg"}}},{"_id":"58fc0f975161d90369000429","order":38,"slug":"android-cms","title":"Android CMS","content":"<p>2.5 million Apps in the Android App Store means that being cross-platform means web, iOS and Android. Get a feel for developing for Android by taking a spin through our <a data-target-href=\"https://cosmicjs.com/apps/cross-platform-blog\" href=\"https://cosmicjs.com/apps/cross-platform-blog\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Android App,</a> the <a data-target-href=\"https://cosmicjs.com/apps/cross-platform-blog\" href=\"https://cosmicjs.com/apps/cross-platform-blog\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cross-Platform Blog</a>.&nbsp;</p><h3>Android CMS Articles</h3><p><a data-target-href=\"https://cosmicjs.com/blog/how-to-build-a-cross-platform-blog-using-react-native-and-nodejs\" href=\"https://cosmicjs.com/blog/how-to-build-a-cross-platform-blog-using-react-native-and-nodejs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">How to Build a Cross-Platform Blog Using ReactNative and&nbsp;</a>\r\n<a href=\"Node.js\"></a>\r\n<a href=\"Node.js\"></a><a href=\"Node.js\">Node.js</a><br><a data-target-href=\"https://hackernoon.com/build-a-cross-platform-blog-in-4-steps-f648f62a921e\" href=\"https://hackernoon.com/build-a-cross-platform-blog-in-4-steps-f648f62a921e\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Build a Cross-Platform Blog in 4 Steps&nbsp;</a></p><h3>Android CMS Resources</h3><p><a href=\"https://cosmicjs.com/docs/\">Cosmic JS Docs</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official Javascript Client&nbsp;</a><br><a data-target-href=\"https://cosmicjs.com/apps?languages=Angular%20JS\" href=\"https://cosmicjs.com/apps?languages=Angular%20JS\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Android Apps&nbsp;</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3 style=' font-family: \"Open Sans\", sans-serif; color: rgb(51, 51, 51); font-size: 24px; text-align: start; background-color: rgb(255, 255, 255);'>Examples</h3><p>You can access your Cosmic JS Bucket content with simple HTTP requests to the API:</p><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><a href=\"https://api.cosmicjs.com/v1/cross-platform-blog/object-type/posts?pretty=true\" style=\" background-color: transparent; color: rgb(0, 175, 215);\"></a><a href=\"https://api.cosmicjs.com/v1/cross-platform-blog/object-type/posts?pretty=true&hide_metafields=true\">https://api.cosmicjs.com/v1/cross-platform-blog/object-type/posts?pretty=true&amp;hide_metafields=true</a></pre>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"WO5s7ICSlz","value":"6a2df2d0-27cb-11e7-9631-b17e7278f329-android.svg","url":"https://cdn.cosmicjs.com/6a2df2d0-27cb-11e7-9631-b17e7278f329-android.svg","imgix_url":"https://imgix.cosmicjs.com/6a2df2d0-27cb-11e7-9631-b17e7278f329-android.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"dT7SfHF6id","value":"75d3f940-27cb-11e7-9631-b17e7278f329-android.svg","url":"https://cdn.cosmicjs.com/75d3f940-27cb-11e7-9631-b17e7278f329-android.svg","imgix_url":"https://imgix.cosmicjs.com/75d3f940-27cb-11e7-9631-b17e7278f329-android.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"gN3RPyRbFy","value":"<p>Cosmic is the best CMS for Android apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"Sbir6Vxtq7","value":"Android"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"dHjcJATcg5","value":"Cosmic is the best CMS for Android apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"XSfMbb8iL8","value":"f1fe8880-2aca-11e7-ae54-e9a1fc58ec22-android.jpg","url":"https://cdn.cosmicjs.com/f1fe8880-2aca-11e7-ae54-e9a1fc58ec22-android.jpg","imgix_url":"https://imgix.cosmicjs.com/f1fe8880-2aca-11e7-ae54-e9a1fc58ec22-android.jpg"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"nkdXOhfoCo","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"fwokhKF34Q","value":""},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"frgtgqfrpylludl8pnsi","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-23T02:21:11.603Z","created_by":"5357ef811693be2118000001","created":"2017-04-23T02:21:11.603Z","status":"published","modified_at":"2020-06-27T19:35:47.434Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-27T19:35:47.434Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/6a2df2d0-27cb-11e7-9631-b17e7278f329-android.svg","imgix_url":"https://imgix.cosmicjs.com/6a2df2d0-27cb-11e7-9631-b17e7278f329-android.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/75d3f940-27cb-11e7-9631-b17e7278f329-android.svg","imgix_url":"https://imgix.cosmicjs.com/75d3f940-27cb-11e7-9631-b17e7278f329-android.svg"},"blurb":"<p>Cosmic is the best CMS for Android apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Android","seo_description":"Cosmic is the best CMS for Android apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/f1fe8880-2aca-11e7-ae54-e9a1fc58ec22-android.jpg","imgix_url":"https://imgix.cosmicjs.com/f1fe8880-2aca-11e7-ae54-e9a1fc58ec22-android.jpg"},"code_example":"","seo_title":"","videos":[]}},{"_id":"5afae2e358cb6871b19ad2b4","order":38,"slug":"be-builds-a-new-community-and-website","title":"be© Builds a New Community, and Website ","content":"<p><a href=\"https://whatyouwannabe.com/home-en/\" rel=\"noopener noreferrer\" target=\"_blank\">be&copy;:</a> An unexpected place. Close to Milan, and only a few kilometers from the Linate and Orio al Serio airport, there is a workplace that could be the efficient and cost-effective answer to all you need in a business location. be&copy; offices are built around the philosophy of smart-working practices and strives to enhance a good work-life balance.</p><p><br></p><p><a href=\"https://whatyouwannabe.com/home-en/\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://cosmic-s3.imgix.net/e84107f0-deab-11e8-a065-db7370345ece-be-screenshot.png?w=2000\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></a></p><p><br></p><p>Offering everything from optimal commutes to great meetings rooms and spaces as well as outdoor gardens and trails, <a href=\"https://whatyouwannabe.com/home-en/\" rel=\"noopener noreferrer\" target=\"_blank\">Cassina de&#39; Pecchi</a> needed a way to digitally tell its story to its multiple audiences, so they choose Cosmic to build their new website. Cosmic offers Cassina de&#39; Pecchi and their agency team the freedom to build applications in any programming language while giving non-technical editors the opportunity to edit, plan and manage content.</p><p>Built on Vue.js and Cosmic, the new website offers amenities such as Services, Information, Galleries and Location information. The tech team tasked with the website build heavily relied on the <a href=\"https://cosmicjs.com/docs/graphql\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic GraphQL API</a> and bills it as their team&#39;s &quot;go-to feature&quot;.&nbsp;</p><p><br></p><p><a href=\"https://whatyouwannabe.com/gallery/\" rel=\"noopener noreferrer\" target=\"_blank\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/31ad8ba0-585d-11e8-a1b6-4740e8b8ce0a-8585b300-b7cd-11e7-ab95-7df122e4b3ac-_PPC5411.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></a></p><p><br></p><blockquote><p>&quot;We needed a flexible tool to implement different types of content at any given time so we choose Cosmic, which also allows for collaboration on our team. The killer feature, however, is the GraphQL API: we managed to develop the website with\r\nVue.js, just the way we like!</p><cite>&mdash; Martino Roma, Lead Software Engineer &nbsp;</cite></blockquote>","metafields":[{"value":"be©","key":"company","title":"Company","type":"text","children":null},{"value":"Construction","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Offering everything from optimal commutes to great meetings rooms and spaces as well as outdoor gardens and trails, Cassina de' Pecchi needed a way to digitally tell its story to its multiple audiences, so they choose Cosmic to build their new website. Cosmic offers Cassina de' Pecchi and their agency team the freedom to build applications in any programming language while giving non-technical editors the opportunity to edit, plan and manage content.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"2db7a3d0-5922-11e8-81ce-5dccd2a7dbce-Risorsa 1@2x.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2db7a3d0-5922-11e8-81ce-5dccd2a7dbce-Risorsa 1@2x.png","imgix_url":"https://imgix.cosmicjs.com/2db7a3d0-5922-11e8-81ce-5dccd2a7dbce-Risorsa 1@2x.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-05-15T13:38:43.379Z","created_by":"5716b504e9c686d006000073","created":"2018-05-15T13:38:43.379Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-11-02T14:32:13.903Z","metadata":{"company":"be©","industry_type":"Construction","teaser":"Offering everything from optimal commutes to great meetings rooms and spaces as well as outdoor gardens and trails, Cassina de' Pecchi needed a way to digitally tell its story to its multiple audiences, so they choose Cosmic to build their new website. Cosmic offers Cassina de' Pecchi and their agency team the freedom to build applications in any programming language while giving non-technical editors the opportunity to edit, plan and manage content.\n","logo":{"url":"https://cdn.cosmicjs.com/2db7a3d0-5922-11e8-81ce-5dccd2a7dbce-Risorsa 1@2x.png","imgix_url":"https://imgix.cosmicjs.com/2db7a3d0-5922-11e8-81ce-5dccd2a7dbce-Risorsa 1@2x.png"}}},{"_id":"5c58e60ff883ff0e8eba234b","order":38,"slug":"developer-spotlight-raymond-camden-of-american-express","title":"Developer Spotlight: Raymond Camden of American Express","content":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Raymond Camden, a Senior Software Engineer and Developer Advocate residing in Lafayette, Louisiana. Raymond has extensive experience in the technology space, having enjoyed stints at IBM, Adobe and AuthO prior to becoming a Senior Engineer for Developer Experience at <a href=\"https://www.americanexpress.com\" rel=\"noopener noreferrer\" target=\"_blank\">American Express</a>. Follow Raymond on <a href=\"https://twitter.com/raymondcamden\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://github.com/cfjedimaster\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a> or <a href=\"https://www.linkedin.com/in/raymondcamden/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a>,\r\nand enjoy the Q/A.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/c5389c70-2968-11e9-a6b7-7748767493d1-ray2019c.jpg\" style=\"width: 300px;\" class=\"fr-fic fr-dib fr-fil pull-left mr-20 mb-20\"><strong>Cosmic: When did you first begin building software?</strong><br>Raymond: I began on an Apple 2e (it may have been the +) back in the 80s. My initial reason was to cheat at games (ask me about hex editing for Bard&#39;s Tale) but after seeing Tron I was really inspired to become a coder. Boy was reality somewhat different...<br><br><strong>What is your preferred development stack?</strong><br>The web in general. I&#39;d say mainly JavaScript and lately with Vue, but I&#39;m passionate about the entire web stack. My favorite editor is Visual Studio Code (although I was a big Brackets fan for a while). When working on the back-end I&#39;ll still use JavaScript and Node.js.<br><br><strong>What past projects are you most proud of and why?</strong><br>I was big into MUD programming (multi-player online text adventure games, think Zork but with multiple players) and I built a framework to enable easier dialog creation and more thematic elements (time passing, etc). The code wasn&#39;t necessarily rocket science, but the end result - enabling more creativity - is something I&#39;m really proud of.<br><br>Oh - and I built an app that scans your contacts, finds ones without pictures, and assigns a random cat picture. Yeah, I&#39;m pretty proud of that too.<br><br><strong>What are some technologies you are excited about or want to learn more about?</strong><br>GraphQL for one. A lot of my work involves APIs and GraphQL feels like a real game changer. I&#39;m incredibly excited about serverless and have been (slowly) playing with various different platforms and trying them out.<br><br><strong>Do you have any tips for new developers just starting to code?&nbsp;</strong><br>For web developers, <a href=\"https://developer.mozilla.org/en-US/\" rel=\"noopener noreferrer\" target=\"_blank\">MDN Web Docs</a> is the absolute best resource for learning, period. I&#39;m a big fan of Node School as well since I like the interactive problem/solving experience. I&#39;m also a big believer in building something that already existed. As programmers we&#39;ve got DRY beaten into our skulls and that obviously makes sense, but when I&#39;m learning a new language or platform, I&#39;ll build somethingvthat already exists, like a blog. That way I&#39;m focused on the *how* of building it and not the *what*. The end result may be thrown away, but it&#39;s a great way to spend more time learning then trying to figure out what to do.</p><p><br>The Cosmic Spotlight Series is dedicated to showcasing developers that are building apps using modern tools. Learn how to <a href=\"https://www.cosmicjs.com/contribute\" rel=\"noopener noreferrer\" target=\"_blank\">Contribute here</a>. To stay connected with us <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">join the conversation on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Raymond Camden, a Senior Software Engineer and Developer Advocate residing in Lafayette, Louisiana. Raymond has extensive experience in the technology space, having enjoyed stints at IBM, Adobe and AuthO prior to becoming a Senior Engineer for Developer Experience at <a href=\"https://www.americanexpress.com\" rel=\"noopener noreferrer\" target=\"_blank\">American Express</a>. Follow Raymond on <a href=\"https://twitter.com/raymondcamden\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://github.com/cfjedimaster\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a> or <a href=\"https://www.linkedin.com/in/raymondcamden/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a>, and enjoy the Q/A.</p>"},{"value":"dcc13c20-2973-11e9-ae72-4925ebbc0b12-DE-3AJbX_400x400.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/dcc13c20-2973-11e9-ae72-4925ebbc0b12-DE-3AJbX_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/dcc13c20-2973-11e9-ae72-4925ebbc0b12-DE-3AJbX_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2019-02-05T01:25:35.417Z","created_by":"5716b504e9c686d006000073","created":"2019-02-05T01:25:35.417Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-02-05T18:28:43.027Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Raymond Camden, a Senior Software Engineer and Developer Advocate residing in Lafayette, Louisiana. Raymond has extensive experience in the technology space, having enjoyed stints at IBM, Adobe and AuthO prior to becoming a Senior Engineer for Developer Experience at <a href=\"https://www.americanexpress.com\" rel=\"noopener noreferrer\" target=\"_blank\">American Express</a>. Follow Raymond on <a href=\"https://twitter.com/raymondcamden\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://github.com/cfjedimaster\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a> or <a href=\"https://www.linkedin.com/in/raymondcamden/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a>, and enjoy the Q/A.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/dcc13c20-2973-11e9-ae72-4925ebbc0b12-DE-3AJbX_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/dcc13c20-2973-11e9-ae72-4925ebbc0b12-DE-3AJbX_400x400.jpg"}}},{"_id":"5c5333ba50a84c679d2be59b","order":39,"slug":"developer-spotlight-ali-spittel-of-dev-community","title":"Developer Spotlight: Ali Spittel of DEV Community","content":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Ali Spittel, a Software Engineer and Developer Advocate residing in Washington, DC. Ali was most recently Lead Instructor at <a href=\"https://generalassemb.ly\" rel=\"noopener noreferrer\" target=\"_blank\">General Assembly</a> prior to scaling back her course schedule to accept a position as Software Engineer and Dev Advocate at <a href=\"https://dev.to\" rel=\"noopener noreferrer\" target=\"_blank\">DEV Community</a>. When she&#39;s not busy teaching or leading the front-end charge at DEV Community, she&#39;s directing the DC Chapter of <a href=\"https://www.womenwhocode.com/dc\" rel=\"noopener noreferrer\" target=\"_blank\">WomenWhoCode</a>. Follow Ali on <a href=\"https://twitter.com/ASpittel\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> or her <a href=\"http://dev.to/aspittel\" rel=\"noopener noreferrer\" target=\"_blank\">DEV Community profile</a> and enjoy the Q/A.<br><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/ccf9d9d0-2592-11e9-97d0-4b614869ef97-Ali.jpg\" style=\"width: 50%;\" class=\"fr-fic fr-fil fr-dii pull-left mr-30 mb-30\"></p><p><strong>Cosmic: When did you first begin building software?</strong><br>Ali: I started writing code during my Sophomore year of college. I had an extra class block to take an elective, and I had heard that computer science was a great one to take. I fell in love with building stuff, and I moved into a teaching assistant role the next semester. I also started taking a C++ data structures and algorithms class, which I worked so hard at but I just didn&#39;t understand. So, I decided that programming wasn&#39;t for me, and moved down to DC for a political internship the next semester. Then, I fell back into data analysis programming for that internship, which led me into a software engineering career!<br><br></p><p><strong>What is your preferred development stack?</strong><br>I think in a dream world, I would write Vue frontends with Django APIs. Python brought me into programming, and it&#39;s still my go-to language. Django, and Django REST Framework, has so much awesome stuff built-in that makes building apps fun and quick.\r\nFor the frontend, I have love for both React and Vue, and I have professional experience with both. I just think Vue is usually easier to get up and running with. For databases, I&#39;m a PosgreSQL loyalist.</p><p><br><strong>What past projects are you most proud of and why?</strong><br>Though it&#39;s not strictly a code project, I&#39;m really proud of my <a href=\"https://dev.to/aspittel\" target=\"_blank\">tech blogging</a>. I&#39;ve only been doing it for a little over a year, and it&#39;s been awesome to see it grow and people&#39;s response. I also built <a href=\"https://learncodefrom.us/\" target=\"_blank\">Learn Code from Us</a> which highlights tech content creators from underrepresented groups in tech, which is something I&#39;m really passionate about.&nbsp;</p><p><br><strong>What were your biggest challenges being an instructor at General Assembly?&nbsp;</strong><br>Being an instructor is one of the most rewarding things I&#39;ve ever done. Seeing students&#39; growth is awesome. Learning to code can be really challenging from a lot of angles, and getting through that with the students is a challenge as well! It&#39;s\r\na truly immersive experience, and it is for the instructors as well.</p><p>I only taught fulltime for a year and a half, but we did make two big curriculum changes to fit in better with where we saw the DC market going. We first moved from AngularJS to React, since AngularJS is in the sunsetting process. We also moved from Ruby\r\nand Rails to Django and Python, since Python is so well used by the data science community which is really big in DC.</p><p><br><strong>What was the inspiration for joining DEV Community?&nbsp;</strong><br>I&#39;ve been a community member for a little over a year, and writing there was a huge part of how my blog gained traction. I really like the mission and the inclusive community that they foster.</p><p>It&#39;s my dream job! I get to do everything that I love doing -- coding, speaking, teaching, and working with the developer community. I&#39;m very excited about it!</p><p><br><strong>What are some technologies you are excited about or want to learn more about?</strong><br>I really enjoy working with Gatsby and Vue, so I may try VuePress in the future. I also haven&#39;t gotten a chance to play with React Hooks yet, I&#39;m really excited about them!</p><p><strong><br></strong>The Cosmic Spotlight Series is dedicated to showcasing developers that are building apps using modern tools. Learn how to <a href=\"https://www.cosmicjs.com/contribute\" rel=\"noopener noreferrer\" target=\"_blank\">Contribute here</a>. To stay connected with us <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">join the conversation on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Ali Spittel, a Software Engineer and Developer Advocate residing in Washington, DC. Ali was most recently Lead Instructor at <a href=\"https://generalassemb.ly\" rel=\"noopener noreferrer\" target=\"_blank\">General Assembly</a> prior to scaling back her course schedule to accept a position as Software Engineer and Dev Advocate at <a href=\"https://dev.to\" rel=\"noopener noreferrer\" target=\"_blank\">DEV Community</a>. When she&#39;s not busy teaching or leading the front-end charge at DEV Community, she&#39;s directing the DC Chapter of <a href=\"https://www.womenwhocode.com/dc\" rel=\"noopener noreferrer\" target=\"_blank\">WomenWhoCode</a>. Follow Ali on <a href=\"https://twitter.com/ASpittel\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> or her <a href=\"http://dev.to/aspittel\" rel=\"noopener noreferrer\" target=\"_blank\">DEV Community profile</a> and enjoy the Q/A.</p>"},{"value":"e5a99560-2592-11e9-97d0-4b614869ef97-Ali.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e5a99560-2592-11e9-97d0-4b614869ef97-Ali.jpg","imgix_url":"https://imgix.cosmicjs.com/e5a99560-2592-11e9-97d0-4b614869ef97-Ali.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2019-01-31T17:43:22.306Z","created_by":"5716b504e9c686d006000073","created":"2019-01-31T17:43:22.306Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-02-01T17:13:26.546Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Ali Spittel, a Software Engineer and Developer Advocate residing in Washington, DC. Ali was most recently Lead Instructor at <a href=\"https://generalassemb.ly\" rel=\"noopener noreferrer\" target=\"_blank\">General Assembly</a> prior to scaling back her course schedule to accept a position as Software Engineer and Dev Advocate at <a href=\"https://dev.to\" rel=\"noopener noreferrer\" target=\"_blank\">DEV Community</a>. When she&#39;s not busy teaching or leading the front-end charge at DEV Community, she&#39;s directing the DC Chapter of <a href=\"https://www.womenwhocode.com/dc\" rel=\"noopener noreferrer\" target=\"_blank\">WomenWhoCode</a>. Follow Ali on <a href=\"https://twitter.com/ASpittel\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> or her <a href=\"http://dev.to/aspittel\" rel=\"noopener noreferrer\" target=\"_blank\">DEV Community profile</a> and enjoy the Q/A.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/e5a99560-2592-11e9-97d0-4b614869ef97-Ali.jpg","imgix_url":"https://imgix.cosmicjs.com/e5a99560-2592-11e9-97d0-4b614869ef97-Ali.jpg"}}},{"_id":"5b2263219630a82b2e9cde53","order":39,"slug":"story-licensing-republishing-website-using-sendgrid-algolia-and-cosmic-js","title":"Story Licensing: Republishing Website Using SendGrid, Algolia and Cosmic","content":"<p><a href=\"https://storylicensing.com\" rel=\"noopener noreferrer\" target=\"_blank\">Story Licensing</a> is a site for users to find and republish high-quality and high traffic blog posts on their own site, application or blog. Cosmic partnered with <a href=\"http://www.amipublications.com\" rel=\"noopener noreferrer\" target=\"_blank\">AMI</a> to build the <a href=\"https://storylicensing.com\" rel=\"noopener noreferrer\" target=\"_blank\">Story Licensing</a> application using some of the most powerful development tools available. By offloading the non-core development functionality onto available API services, our cross-functional teams were able to build this application faster than we ever could have imagined. </p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/0f063df0-8b97-11e8-9c43-0ff54078072a-ice_screenshot_20180719-160209.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><a href=\"http://www.amipublications.com\" rel=\"noopener noreferrer\" target=\"_blank\">AMI</a> stands for ArtMap, Inc. and is a collection of publications that range from <a href=\"https://hackernoon.com\" rel=\"noopener noreferrer\" target=\"_blank\">Hackernoon</a> to <a href=\"https://artplusmarketing.com\" rel=\"noopener noreferrer\" target=\"_blank\">Art + Marketing</a> and <a href=\"https://psiloveyou.xyz\" rel=\"noopener noreferrer\" target=\"_blank\">P.S. I Love You</a>. A backup of each AMI publication&#39;s content is stored in Cosmic. The team plugged in <a href=\"https://www.algolia.com\" rel=\"noopener noreferrer\" target=\"_blank\">Algolia</a> to search the available content and integrated <a href=\"https://sendgrid.com\" rel=\"noopener noreferrer\" target=\"_blank\">SendGrid</a> to notify the publisher and writer of a republishing lead. You can see more about how Story Licensing was built <a href=\"https://cosmicjs.com/articles/how-we-built-the-story-licensing-app-using-nextjs-algolia-and-cosmic-js-ji95nfdo\" rel=\"noopener noreferrer\" target=\"_blank\">here</a>. </p><p><br></p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/29722420-85d3-11e8-b23b-7fe85e02049c-0cbc38b0-6fd1-11e8-922a-eb4448ab4dca-ezgif-4-9b89469b78.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><h3 dir=\"ltr\"><br></h3><p><br></p><blockquote><p>&quot;When the opportunity to work with Hacker Noon contributors Tony Spiro and Carson Gibbons came up, I jumped on the opportunity. Their API-first content management platform Cosmic was perfect (and super simple) for connecting best-in-class services like Algolia for search and SendGrid for email. &nbsp;In terms of providing the framework for teams to quickly build quality professional apps, Cosmic is definitely onto something.&rdquo;</p><p><cite>&mdash; David Smooke, AMI Publisher-in-Chief &nbsp;</cite></p></blockquote><p dir=\"ltr\"><a href=\"//StoryLicensing.com\"></a><a href=\"//StoryLicensing.com\"></a></p><p dir=\"ltr\"><br></p><div class=\"fr-embedly               \" data-original-embed=\"<a href='https://twitter.com/usoskina/status/1006989466223955968' class='embedly-card'></a>\"><a href=\"https://twitter.com/usoskina/status/1006989466223955968\" class=\"embedly-card\"></a></div>","metafields":[{"value":"Story Licensing ","key":"company","title":"Company","type":"text","children":null},{"value":"Republishing Platform","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Story Licensing is a site for users to find and republish high-quality and high traffic blog posts on their own site, application or blog. Cosmic partnered with AMI to build the Story Licensing application using some of the most powerful development tools available.\n\n\n\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"d3d32130-6fd0-11e8-922a-eb4448ab4dca-fb07c320-5f5c-11e8-889c-33c9a0abc661-sl.jpg","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/d3d32130-6fd0-11e8-922a-eb4448ab4dca-fb07c320-5f5c-11e8-889c-33c9a0abc661-sl.jpg","imgix_url":"https://imgix.cosmicjs.com/d3d32130-6fd0-11e8-922a-eb4448ab4dca-fb07c320-5f5c-11e8-889c-33c9a0abc661-sl.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-12-03T19:49:54.515Z","created_by":"5716b504e9c686d006000073","created":"2018-06-14T12:44:17.854Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-07-20T14:57:42.081Z","metadata":{"company":"Story Licensing ","industry_type":"Republishing Platform","teaser":"Story Licensing is a site for users to find and republish high-quality and high traffic blog posts on their own site, application or blog. Cosmic partnered with AMI to build the Story Licensing application using some of the most powerful development tools available.\n\n\n\n","logo":{"url":"https://cdn.cosmicjs.com/d3d32130-6fd0-11e8-922a-eb4448ab4dca-fb07c320-5f5c-11e8-889c-33c9a0abc661-sl.jpg","imgix_url":"https://imgix.cosmicjs.com/d3d32130-6fd0-11e8-922a-eb4448ab4dca-fb07c320-5f5c-11e8-889c-33c9a0abc661-sl.jpg"}}},{"_id":"5ce2b37260fd82017b4169a2","order":39,"slug":"cloudfront-cdn-now-included","title":"CloudFront CDN Now Included","content":"<p>Faster is better. And Cosmic media assets just got a whole lot faster. We are excited to announce that AWS CloudFront CDN asset delivery is now included free and automatically for all media assets delivered from the Cosmic\r\nJS API. This means that all of your global users will now receive your media assets faster on the global Cosmic CloudFront CDN.</p><p>Go into your Bucket and notice media urls will now originate from the Cosmic CloudFront CDN with the following base URL:</p><pre>https://cdn.cosmicjs.com</pre><p><br><strong>What is CloudFront?</strong><br><a href=\"https://aws.amazon.com/cloudfront/\" rel=\"noopener noreferrer\" target=\"_blank\">From the AWS website</a>:<br><em>&quot;Amazon CloudFront is a fast content delivery network (CDN) service that securely delivers data, videos, applications, and APIs to customers globally with low latency, high transfer speeds, all within a developer-friendly environment.&quot;</em></p><p><span class=\"fr-video fr-fvc fr-dvb fr-draggable\" contenteditable=\"false\" draggable=\"true\"><iframe width=\"100%\" height=\"360\" src=\"//www.youtube.com/embed/AT-nHW3_SVI?wmode=opaque\" frameborder=\"0\" allowfullscreen=\"\"></iframe></span></p><p>We hope you enjoy this added value for you, your team, and your end users. Join the conversation <a href=\"https://cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">on Slack</a> and <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"c9386830-7b09-11e9-9995-d5d38695c1e5-cloudfront-cosmicjs.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/c9386830-7b09-11e9-9995-d5d38695c1e5-cloudfront-cosmicjs.jpg","imgix_url":"https://imgix.cosmicjs.com/c9386830-7b09-11e9-9995-d5d38695c1e5-cloudfront-cosmicjs.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2019-05-20T14:02:26.194Z","created_by":"5357ef811693be2118000001","modified_at":"2020-08-10T14:00:04.404Z","created":"2019-05-20T14:02:26.194Z","status":"published","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-05-20T15:28:51.168Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":"https://cdn.cosmicjs.com/c9386830-7b09-11e9-9995-d5d38695c1e5-cloudfront-cosmicjs.jpg","imgix_url":"https://imgix.cosmicjs.com/c9386830-7b09-11e9-9995-d5d38695c1e5-cloudfront-cosmicjs.jpg"}}},{"_id":"58fc0a4f5161d903690003da","order":39,"slug":"ruby-on-rails-cms","title":"Ruby on Rails CMS","content":"<p>Cosmic JS is an API-first CMS that integrates with Ruby on Rails. Use Cosmic JS to quickly build content-powered blogs, dynamic pages, and more. Use the Cosmic JS Rest API to integrate with your Rails app to start managing content today.&nbsp;</p><h3>Rails CMS Articles</h3><p><a data-target-href=\"https://cosmicjs.com/blog/the-cosmic-stack\" href=\"https://cosmicjs.com/blog/the-cosmic-stack\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">The Cosmic Stack</a></p><h3>Rails CMS Resources</h3><p><a href=\"https://cosmicjs.com/docs/\">Cosmic JS Docs</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Official JavaScript Client</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3 style=' font-family: \"Open Sans\", sans-serif; color: rgb(51, 51, 51); font-size: 24px; text-align: start; background-color: rgb(255, 255, 255);'>Examples</h3><p>You can access your Cosmic JS Bucket content with simple HTTP requests to the API:</p><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><a href=\"https://api.cosmicjs.com/v1/cross-platform-blog/object-type/posts?pretty=true\" style=\" background-color: transparent; color: rgb(0, 175, 215);\"></a><a href=\"https://api.cosmicjs.com/v1/cross-platform-blog/object-type/posts?pretty=true\">https://api.cosmicjs.com/v1/cross-platform-blog/object-type/posts?pretty=true</a></pre><p><br></p>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"AvR6zOeIjj","value":"4ae89b30-27c8-11e7-9631-b17e7278f329-rails.svg","url":"https://cdn.cosmicjs.com/4ae89b30-27c8-11e7-9631-b17e7278f329-rails.svg","imgix_url":"https://imgix.cosmicjs.com/4ae89b30-27c8-11e7-9631-b17e7278f329-rails.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"uX67Mqoabt","value":"4e326f00-27c8-11e7-9631-b17e7278f329-rails.svg","url":"https://cdn.cosmicjs.com/4e326f00-27c8-11e7-9631-b17e7278f329-rails.svg","imgix_url":"https://imgix.cosmicjs.com/4e326f00-27c8-11e7-9631-b17e7278f329-rails.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"SBTATnTTE9","value":"<p>Cosmic is the best CMS for Ruby on Rails websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"B7AHw2pbLf","value":"Ruby On Rails"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"jhgCnluW6b","value":"Cosmic is the best CMS for Ruby on Rails websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"0gVtbjNgtP","value":"178a5980-2acb-11e7-ae54-e9a1fc58ec22-rails.jpg","url":"https://cdn.cosmicjs.com/178a5980-2acb-11e7-ae54-e9a1fc58ec22-rails.jpg","imgix_url":"https://imgix.cosmicjs.com/178a5980-2acb-11e7-ae54-e9a1fc58ec22-rails.jpg"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"feepzZZjzq","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"QKuYj7ARJb","value":"Best Headless CMS for Ruby on Rails"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"frgtgqfrpylludl8pnsi","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-23T01:58:39.740Z","created_by":"5357ef811693be2118000001","created":"2017-04-23T01:58:39.740Z","status":"published","modified_at":"2020-06-27T19:36:20.036Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-27T19:36:20.036Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/4ae89b30-27c8-11e7-9631-b17e7278f329-rails.svg","imgix_url":"https://imgix.cosmicjs.com/4ae89b30-27c8-11e7-9631-b17e7278f329-rails.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/4e326f00-27c8-11e7-9631-b17e7278f329-rails.svg","imgix_url":"https://imgix.cosmicjs.com/4e326f00-27c8-11e7-9631-b17e7278f329-rails.svg"},"blurb":"<p>Cosmic is the best CMS for Ruby on Rails websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Ruby On Rails","seo_description":"Cosmic is the best CMS for Ruby on Rails websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/178a5980-2acb-11e7-ae54-e9a1fc58ec22-rails.jpg","imgix_url":"https://imgix.cosmicjs.com/178a5980-2acb-11e7-ae54-e9a1fc58ec22-rails.jpg"},"code_example":"","seo_title":"Best Headless CMS for Ruby on Rails","videos":[]}},{"_id":"5c4f20a4c420fc09709e5c8e","order":40,"slug":"developer-spotlight-rick-hanlon-of-facebook","title":"Developer Spotlight: Rick Hanlon of Facebook","content":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Rick Hanlon, a Front End Engineer and recent New Yorker that is now residing in London, England working on the React Native Core team at <a href=\"https://www.facebook.com\" rel=\"noopener noreferrer\" target=\"_blank\">Facebook</a>. Follow Rick on <a href=\"https://twitter.com/rickhanlonii\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> or <a href=\"https://www.linkedin.com/in/rickhanlonii/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> and enjoy the Q/A.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/f0cb1cd0-2311-11e9-b734-1b28bdc32736-0L4If1ta_400x400.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><strong>Cosmic: When did you first begin building software?</strong><br>Rick: I was fortunate because my dad taught me BASIC when I was 11. This sparked a love with computers really early on. Through middle school I spent most of my time either in the computer lab playing with apps and downloading music on Napster or in my parents basement building websites on GeoCities and Angelfire. I eventually went to college and got a degree in theoretical math, but switched back to software after I graduated and joined my first startup.<br><br><strong>What is your preferred development stack?</strong><br>I&#39;m all-in on the React/Node/Express stack. This stack allows you to build sites as fast as we did back when we would just FTP php files to webservers, but now we can build rich experiences that push and redefine the limits of web technology. On this stack I highly recommend Next.js. I think the whole suite of tools offered by <a href=\"https://zeit.co\" rel=\"noopener noreferrer\" target=\"_blank\">Zeit</a> are amazing (Hyper, Now, Next, Domains) and with them you can spin up a site in an afternoon, which is crazy cool.<br><br><strong>What past projects are you most proud of and why?</strong><br>There a are a few projects I&#39;m super proud of! On the backend, I build the entire checkout order system used by <a href=\"https://seatgeek.com\" rel=\"noopener noreferrer\" target=\"_blank\">SeatGeek</a> to process all of their ticket transactions through a Python API. On the frontend, I managed a team at Kustomer that built a massive React/Redux app which was quick to iterate on with very few regressions. While there I also built a few really cool web technologies including a jsx templating engine.<br><br><strong>What were your biggest challenges in building apps at Kustomer in New York?&nbsp;</strong><br>The biggest challenge for me was balancing short term gains with long term strategies. At a growing startup, every project in the pipeline is money on the table, and it can be easy to focus on the easy money. It takes discipline and courage to understand that if you only focus on what&#39;s on the table now, you won&#39;t innovate and bring more people in the door.<br><br><strong>What was the inspiration for joining Facebook? How has your experience been thus far?</strong>Last May I visited the Facebook London office for the Jest Summit. Walking the halls of the office, I really started to see myself working here and that&#39;s when I decided to start studying for an interview. A few months later, I accepted an offer and was moving from NYC to London!</p><p>So far Facebook lives up to the hype. I was worried that there was going to be some big company boogeyman waiting for me with overbearing process and structure, but instead I&#39;ve found Facebook to run like a community of well funded startups. I actually feel more in control of my time and impact than I ever did at a startup, which is both empowering and intimidating at the same time.<br><br><strong>What are some technologies you are excited about or want to learn more about?</strong><br>Like almost everyone I talk to, I&#39;m super excited about TypeScript. Coming from a Java background, I&#39;m a big fan of types and I think TypeScript has nailed the syntax and community support in a great way. I&#39;m interested to see how much of the JavaScript stack TypeScript eats over the next 3 years.<br><br><strong>Do you have any tips for working in a new team environment since you just moved countries for this gig?&nbsp;</strong><br>I have to remind myself constantly that no one is expecting some huge contribution on the first day. Instead, take time to ramp up, get to know as many people as possible, and enjoy the new role while you find where you fit in.<br><br><strong>What does the future of React Native look like?&nbsp;</strong><br>The future of React Native looks a lot more like React than Native ;)<br><br>The Cosmic Spotlight Series is dedicated to showcasing developers that are building apps using modern tools. Learn how to <a href=\"https://www.cosmicjs.com/contribute\" rel=\"noopener noreferrer\" target=\"_blank\">Contribute here</a>. To stay connected with us <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">join the conversation on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Rick Hanlon, a Front End Engineer &nbsp;and recent New Yorker that is now residing in London, England working on the front end team at Facebook. Rick is also on the core team of <a href=\"https://jestjs.io\" rel=\"noopener noreferrer\" target=\"_blank\">Jest</a>, a JavaScript testing platform. Follow Rick on <a href=\"https://twitter.com/rickhanlonii\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> or <a href=\"https://www.linkedin.com/in/rickhanlonii/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> and enjoy the Q/A.</p>"},{"value":"ebea2e40-2311-11e9-b734-1b28bdc32736-0L4If1ta_400x400.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/ebea2e40-2311-11e9-b734-1b28bdc32736-0L4If1ta_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/ebea2e40-2311-11e9-b734-1b28bdc32736-0L4If1ta_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2019-01-28T15:32:52.868Z","created_by":"5716b504e9c686d006000073","created":"2019-01-28T15:32:52.869Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-01-30T18:25:16.132Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Rick Hanlon, a Front End Engineer &nbsp;and recent New Yorker that is now residing in London, England working on the front end team at Facebook. Rick is also on the core team of <a href=\"https://jestjs.io\" rel=\"noopener noreferrer\" target=\"_blank\">Jest</a>, a JavaScript testing platform. Follow Rick on <a href=\"https://twitter.com/rickhanlonii\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> or <a href=\"https://www.linkedin.com/in/rickhanlonii/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> and enjoy the Q/A.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/ebea2e40-2311-11e9-b734-1b28bdc32736-0L4If1ta_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/ebea2e40-2311-11e9-b734-1b28bdc32736-0L4If1ta_400x400.jpg"}}},{"_id":"59f2166834dbbd042a000273","order":40,"slug":"second-wind-nation","title":"Second Wind Nation","content":"<p><a href=\"http://www.secondwindnation.com\" rel=\"noopener noreferrer\" target=\"_blank\">Second Wind Nation</a> exists to provide resources for swimming, cycling and running enthusiasts to achieve breakthroughs. Their goal is to build a community that helps one another find their &quot;Second Wind&quot;. Second Wind Nation is a publication that covers Running, Cycling and Triathalons. With expert writers in each segment, they needed a solution that ensured developer flexibility while also giving their content writers and editors access to only their particular segment.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/d0757700-be36-11e7-958b-232a3f62ac7b-41f2cf20-bd4e-11e7-8629-8922f6819eac-2017 URA Car Free Crit_women's bunch.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>Cosmic has allowed us to enter the market quicker. We managed to build a Proof of Concept and deploy it within one week thanks to the well-documented APIs and easy-to-use User Interface for our editors.</p><p><cite>&mdash; Yew Wee Chua, Chief Technology Officer</cite></p></blockquote>","metafields":[{"value":"Second Wind Nation","key":"company","title":"Company","type":"text","children":null},{"value":"Publication","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"Second Wind Nation is a publication that covers Running, Cycling and Triathalons. With expert writers in each segment, they needed a solution that ensured developer flexibility while also giving their content writers and editors access to only their particular segment. ","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"05e34100-bf14-11e7-8141-970f143098e4-secondwind.png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/05e34100-bf14-11e7-8141-970f143098e4-secondwind.png","imgix_url":"https://imgix.cosmicjs.com/05e34100-bf14-11e7-8141-970f143098e4-secondwind.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2017-10-26T17:07:52.049Z","created_by":"5716b504e9c686d006000073","created":"2017-10-26T17:07:52.049Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"company":"Second Wind Nation","industry_type":"Publication","teaser":"Second Wind Nation is a publication that covers Running, Cycling and Triathalons. With expert writers in each segment, they needed a solution that ensured developer flexibility while also giving their content writers and editors access to only their particular segment. ","logo":{"url":"https://cdn.cosmicjs.com/05e34100-bf14-11e7-8141-970f143098e4-secondwind.png","imgix_url":"https://imgix.cosmicjs.com/05e34100-bf14-11e7-8141-970f143098e4-secondwind.png"}}},{"_id":"58fc10095161d90369000430","order":40,"slug":"ios-cms","title":"iOS CMS","content":"<p>Build a website, and build an app for the iOS store - update content to both with one click. Get a feel for developing for iOS by taking a spin through our <a data-target-href=\"https://cosmicjs.com/apps/cross-platform-blog\" href=\"https://cosmicjs.com/apps/cross-platform-blog\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">iOS App</a>, the <a data-target-href=\"https://cosmicjs.com/apps/cross-platform-blog\" href=\"https://cosmicjs.com/apps/cross-platform-blog\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cross-Platform Blog</a>.</p><h3>iOS CMS Articles</h3><p><a data-target-href=\"https://cosmicjs.com/blog/how-to-build-a-cross-platform-blog-using-react-native-and-nodejs\" href=\"https://cosmicjs.com/blog/how-to-build-a-cross-platform-blog-using-react-native-and-nodejs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">How to Build a Cross-Platform Blog Using ReactNative and&nbsp;</a>\r\n<a href=\"https://cosmicjs.com/cosmic-js/edit-object/Node.js\"></a>\r\n<a href=\"Node.js\"></a><a href=\"Node.js\">Node.js</a><br><a data-target-href=\"https://hackernoon.com/build-a-cross-platform-blog-in-4-steps-f648f62a921e\" href=\"https://hackernoon.com/build-a-cross-platform-blog-in-4-steps-f648f62a921e\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Build a Cross-Platform Blog in 4 Steps&nbsp;</a>\r\n<a data-target-href=\"https://cosmicjs.com/blog/how-to-build-a-nodejs-user-management-app\" href=\"https://cosmicjs.com/blog/how-to-build-a-nodejs-user-management-app\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">&nbsp;</a></p><h3>iOS CMS Resources</h3><p><a href=\"https://cosmicjs.com/docs/\">Cosmic JS Docs</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official Javascript Client&nbsp;</a><br><a data-target-href=\"https://cosmicjs.com/apps?languages=Angular%20JS\" href=\"https://cosmicjs.com/apps?languages=Angular%20JS\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">iOS Apps&nbsp;</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3>Examples</h3><p>You can access your Cosmic JS Bucket content with simple HTTP requests to the API:</p><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><a href=\"https://api.cosmicjs.com/v1/cross-platform-blog/object-type/posts?pretty=true&hide_metafields=true\">https://api.cosmicjs.com/v1/cross-platform-blog/object-type/posts?pretty=true&amp;hide_metafields=true</a></pre>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"D61rGzc25z","value":"b92a4910-27cb-11e7-9631-b17e7278f329-ios.svg","url":"https://cdn.cosmicjs.com/b92a4910-27cb-11e7-9631-b17e7278f329-ios.svg","imgix_url":"https://imgix.cosmicjs.com/b92a4910-27cb-11e7-9631-b17e7278f329-ios.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"hGVCX6SHir","value":"b92a4910-27cb-11e7-9631-b17e7278f329-ios.svg","url":"https://cdn.cosmicjs.com/b92a4910-27cb-11e7-9631-b17e7278f329-ios.svg","imgix_url":"https://imgix.cosmicjs.com/b92a4910-27cb-11e7-9631-b17e7278f329-ios.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"djRnn0vq4n","value":"<p>Cosmic is the best CMS for iOS apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"dCS93ugITl","value":"iOS"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"cWyNuquWl3","value":"Cosmic is the best CMS for iOS apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"WUX14nTKgx","value":"dd9ace80-2aca-11e7-ae54-e9a1fc58ec22-ios.jpg","url":"https://cdn.cosmicjs.com/dd9ace80-2aca-11e7-ae54-e9a1fc58ec22-ios.jpg","imgix_url":"https://imgix.cosmicjs.com/dd9ace80-2aca-11e7-ae54-e9a1fc58ec22-ios.jpg"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"4UcJQJ6asl","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"KLusB02V6P","value":"Best Headless CMS for iOS"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"frgtgqfrpylludl8pnsi","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-23T02:23:05.477Z","created_by":"5357ef811693be2118000001","created":"2017-04-23T02:23:05.477Z","status":"published","modified_at":"2020-06-27T19:36:41.638Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-27T19:36:41.638Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/b92a4910-27cb-11e7-9631-b17e7278f329-ios.svg","imgix_url":"https://imgix.cosmicjs.com/b92a4910-27cb-11e7-9631-b17e7278f329-ios.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/b92a4910-27cb-11e7-9631-b17e7278f329-ios.svg","imgix_url":"https://imgix.cosmicjs.com/b92a4910-27cb-11e7-9631-b17e7278f329-ios.svg"},"blurb":"<p>Cosmic is the best CMS for iOS apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"iOS","seo_description":"Cosmic is the best CMS for iOS apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/dd9ace80-2aca-11e7-ae54-e9a1fc58ec22-ios.jpg","imgix_url":"https://imgix.cosmicjs.com/dd9ace80-2aca-11e7-ae54-e9a1fc58ec22-ios.jpg"},"code_example":"","seo_title":"Best Headless CMS for iOS","videos":[]}},{"_id":"5cdc55b25265734551852132","order":40,"slug":"new-graphql-api-release","title":"New GraphQL API Release","content":"<p>We&#39;re excited to announce a big update to our GraphQL API. Check out the all of the new features in the <a href=\"https://docs.cosmicjs.com/graphql-api/\" rel=\"noopener noreferrer\" target=\"_blank\">GraphQL API documentation section</a> in the <a href=\"https://docs.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">new docs area</a>. The changes include:<br><br><strong>Serverless FTW!</strong><br>Our new GraphQL API is powered by <a href=\"https://aws.amazon.com/lambda/\" rel=\"noopener noreferrer\" target=\"_blank\">AWS Lambda Functions</a>. So you have the assurance of <strong>infinite</strong><strong>&nbsp;scalability</strong> and <strong>reliability</strong> for your content queries. This is what some call &quot;Serverless&quot; but we won&#39;t get into that debate, but we can all agree that it&#39;s awesome <span class=\"fr-emoticon fr-deletable\">😁</span>&nbsp;<br><br><strong>More Queries</strong><br>We have included lots of new methods to query your content as well as expanded account-level access queries. Old methods are still available, and have been deprecated. <a href=\"https://docs.cosmicjs.com/graphql-api/methods-overview.html#queries\" rel=\"noopener noreferrer\" target=\"_blank\">Check out the new queries</a>.<br><br><strong>Mutations</strong><br>A much-requested feature, mutations allow you to perform writes, edits, and deletes on your Bucket content. We&#39;re happy to now include this functionality with the GraphQL API. <a href=\"https://docs.cosmicjs.com/graphql-api/methods-overview.html#mutations\" rel=\"noopener noreferrer\" target=\"_blank\">Check out mutations</a>.<br><br><strong>Playground</strong><br>We have a new playground setup to explore all of the features, docs, and schema for the new GraphQL API. <a href=\"https://docs.cosmicjs.com/graphql-api/#playground\" rel=\"noopener noreferrer\" target=\"_blank\">Check out the playground</a>.<br><br>Special thanks to the developers in our community who helped us make these big improvements. We plan to continue to provide more tools and resources for our GraphQL API users.</p><p>Let me know if you have any questions. Join the community <a href=\"https://cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">on Slack</a> and reach out <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">on Twitter</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"88af5360-773e-11e9-bdd0-2fb2b1d856d9-graphql-lambda.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/88af5360-773e-11e9-bdd0-2fb2b1d856d9-graphql-lambda.jpg","imgix_url":"https://imgix.cosmicjs.com/88af5360-773e-11e9-bdd0-2fb2b1d856d9-graphql-lambda.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2019-05-16T18:08:50.752Z","created_by":"5357ef811693be2118000001","created":"2019-05-16T18:08:50.752Z","status":"published","modified_at":"2020-08-10T14:02:39.393Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-05-16T14:21:33.481Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":"https://cdn.cosmicjs.com/88af5360-773e-11e9-bdd0-2fb2b1d856d9-graphql-lambda.jpg","imgix_url":"https://imgix.cosmicjs.com/88af5360-773e-11e9-bdd0-2fb2b1d856d9-graphql-lambda.jpg"}}},{"_id":"58fdf952b53aeb5e5b000b5b","order":41,"slug":"go-cms","title":"Go CMS","content":"<p>Cosmic JS is a great choice for your Go application CMS. &nbsp;Cosmic JS makes it easy to connect your Go application to our CMS API to power your content.</p><h3>Go CMS Articles</h3><p><a href=\"https://cosmicjs.com/blog/the-cosmic-stack\" rel=\"noopener noreferrer\" target=\"_blank\">The Cosmic Stack</a></p><h3>Go CMS Resources</h3><p><a href=\"https://cosmicjs.com/docs/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic JS Docs</a><br><a href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noopener noreferrer\" target=\"_blank\">Official JavaScript Client</a><br><a href=\"https://github.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic JS GitHub</a></p><h3 style=' font-family: \"Open Sans\", sans-serif; color: rgb(51, 51, 51); font-size: 24px; text-align: start; background-color: rgb(255, 255, 255);'>Examples</h3><p>You can access your Cosmic JS Bucket content with simple HTTP requests to the API:</p><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><a href=\"https://api.cosmicjs.com/v1/cross-platform-blog/object-type/posts?pretty=true\" style=\" background-color: transparent; color: rgb(0, 175, 215);\"></a><a href=\"https://api.cosmicjs.com/v1/cross-platform-blog/object-type/posts?pretty=true\">https://api.cosmicjs.com/v1/cross-platform-blog/object-type/posts?pretty=true</a></pre>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"cL74kvMzFU","value":"56dbf540-28ef-11e7-89e7-6d9e98749006-go.svg","url":"https://cdn.cosmicjs.com/56dbf540-28ef-11e7-89e7-6d9e98749006-go.svg","imgix_url":"https://imgix.cosmicjs.com/56dbf540-28ef-11e7-89e7-6d9e98749006-go.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"7EV0JlUaOl","value":"56dbf540-28ef-11e7-89e7-6d9e98749006-go.svg","url":"https://cdn.cosmicjs.com/56dbf540-28ef-11e7-89e7-6d9e98749006-go.svg","imgix_url":"https://imgix.cosmicjs.com/56dbf540-28ef-11e7-89e7-6d9e98749006-go.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"6polUQLrDO","value":"<p>Cosmic is the best CMS for Go websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"xaNiX5kDJL","value":"Go"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"pneErPPJAb","value":"Cosmic is the best CMS for Go websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"BXTsLY5wk9","value":"26aa4470-2acb-11e7-ae54-e9a1fc58ec22-go.jpg","url":"https://cdn.cosmicjs.com/26aa4470-2acb-11e7-ae54-e9a1fc58ec22-go.jpg","imgix_url":"https://imgix.cosmicjs.com/26aa4470-2acb-11e7-ae54-e9a1fc58ec22-go.jpg"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"C3APKPAvFo","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"fwokhKF34Q","value":""},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"frgtgqfrpylludl8pnsi","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-24T13:10:42.642Z","created_by":"5357ef811693be2118000001","created":"2017-04-24T13:10:42.642Z","status":"published","modified_at":"2020-06-27T19:37:09.576Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-27T19:37:09.576Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/56dbf540-28ef-11e7-89e7-6d9e98749006-go.svg","imgix_url":"https://imgix.cosmicjs.com/56dbf540-28ef-11e7-89e7-6d9e98749006-go.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/56dbf540-28ef-11e7-89e7-6d9e98749006-go.svg","imgix_url":"https://imgix.cosmicjs.com/56dbf540-28ef-11e7-89e7-6d9e98749006-go.svg"},"blurb":"<p>Cosmic is the best CMS for Go websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Go","seo_description":"Cosmic is the best CMS for Go websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/26aa4470-2acb-11e7-ae54-e9a1fc58ec22-go.jpg","imgix_url":"https://imgix.cosmicjs.com/26aa4470-2acb-11e7-ae54-e9a1fc58ec22-go.jpg"},"code_example":"","seo_title":"","videos":[]}},{"_id":"5c4a6498301dec60d6005af0","order":41,"slug":"developer-spotlight-leslie-cohn-wein-of-netlify","title":"Developer Spotlight: Leslie Cohn-Wein of Netlify","content":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Leslie Cohn-Wein, a Front End Developer and Austin native now residing in Dallas, Texas. Leslie most recently worked as a Front End Engineer for <a href=\"https://www.canvasunited.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Canvas United</a>, a New York City-based digital agency, prior to starting as a Front End Developer<strong>&nbsp;</strong>at <a href=\"http://netlify.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Netlify</a>. Follow Leslie on <a href=\"https://twitter.com/lesliecdubs\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> or <a href=\"https://www.linkedin.com/in/lesliecohnwein/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> and enjoy the Q/A.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/9cfdad90-203f-11e9-b9ce-c7982c432698-ZhG3yywl_400x400.jpg\" class=\"fr-fic fr-fil fr-dii pull-left mr-20 mb-10\" style=\"width: 50%;\"></p><p><strong>When did you first begin building software?</strong><br>I taught myself basic CSS in the early 2000s in order to customize my MySpace and LiveJournal backgrounds. To my surprise, that experience kicked off an enduring interest in code.</p><p>After studying digital media in college and interning at the Denver Open Media Foundation theming Drupal sites for nonprofits, I moved to NYC for a role as a communications manager. I successfully made the transition into full-time front end development a few years later, working at ad agencies with clients like Nintendo, Comedians in Cars Getting Coffee, and Crunch Fitness. I&rsquo;ve been building software professionally for the past 5 years.<br><br><strong>What is your preferred development stack?</strong><br>I&rsquo;m a huge proponent of the <a href=\"https://jamstack.org/\" rel=\"noopener noreferrer\" target=\"_blank\">JAMstack</a>, which is a modern web development architecture based on client-side JavaScript, APIs, and markup. JAMstack apps are incredibly performant,\r\nscalable, and secure, and go hand-in-hand with our modern workflows.</p><p>In the agency world, I found that I was able to get new projects started more quickly by leveraging <a href=\"https://www.staticgen.com/\" rel=\"noopener noreferrer\" target=\"_blank\">static site generators</a> like Middleman and Gatsby, which gave me scaffolding, a templating system, hot reloading, and more without all the tedious setup. Deploying to <a href=\"http://netlify.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Netlify</a> was as easy as hooking up my GitHub account and pushing my code (full disclosure: I now work as a front end dev at Netlify).&nbsp;</p><p>The JAMstack put the power of developing and deploying dynamic apps in my hands, no back end dev or server maintenance required. I am such a fan of developing with the stack that I jumped ship from agency life back in October to join the Netlify team.<br><br><strong>What past projects are you most proud of and why?</strong><br>Aside from my recent work on the Netlify app, I&#39;d have to say that one of my favorite agency projects was a website build for <a href=\"https://www.parkerpalmsprings.com/home/\" rel=\"noopener noreferrer\" target=\"_blank\">The Parker Palm Springs</a> hotel in California. I worked for a Ruby on Rails shop at the time, so we chose to develop with Middleman, manage content with a <a href=\"https://headlesscms.org/\" rel=\"noopener noreferrer\" target=\"_blank\">headless CMS</a>, and automatically deploy to Netlify\r\nwith a standard Git workflow.&nbsp;</p><p>Building with the JAMstack meant my time was spent pairing with my art director, refining the interactive storytelling experience on the homepage ー not wiring up views or coordinating with DevOps to get a staging site live. I loved working on a purely front end stack with such a playful design, and it didn&#39;t hurt that we ultimately won the <a href=\"https://www.commarts.com/project/26022/the-parker-palm-springs\" rel=\"noopener noreferrer\" target=\"_blank\">2018 Communication Arts Interactive Award</a> for it.<br><br><strong>What were your biggest challenges in building apps in an agency environment at Canvas?&nbsp;</strong><br>Shipping a new, self-contained site every 2 or 3 months was exhilarating, but that process demands an incredibly well-coordinated workflow. Using static site generators to speed up the build process changed the game for me.</p><p>In an effort to ship work even faster, we worked on developing a reusable, easily skinnable component library that would help avoid building duplicate functionality for each new project (because who wants to build <em>another&nbsp;</em>hamburger nav, amirite?).&nbsp;</p><p>Contrary to popular opinion, we also found that trying out new tech on occasion improved our velocity. Moving from CoffeeScript, jQuery, and CDN-hosted includes to ES6, React, Jest, and npm did require an investment in learning, but ultimately improved\r\nour team&#39;s dev experience and significantly shortened the QA cycle.<br><br><strong>What was the inspiration for joining Netlify? How has your experience been thus far?</strong><br>I was scrolling through my Twitter feed last year when I saw a retweet from the smart and prolific <a href=\"https://twitter.com/ameliasbrain\" rel=\"noopener noreferrer\" target=\"_blank\">Amelia Bellamy-Royds</a> about a front end opening at Netlify. I applied immediately.</p><p>Joining the team last October was oddly familiar; I&#39;d been in touch with Netlify&#39;s support team for guidance several times over the past few years, and had recently worked with the sales team to <a href=\"https://www.netlify.com/enterprise/\" rel=\"noopener noreferrer\" target=\"_blank\">power up my agency&#39;s capabilities</a>. I&#39;m still getting up to speed, but the tech, too, is familiar: the front end of <a href=\"http://app.netlify.com/\"></a>\r\n<a href=\"//app.netlify.com\"></a><a href=\"//app.netlify.com\" rel=\"noopener noreferrer\" target=\"_blank\">app.netlify.com</a> is build with React, and ー of course! ー deployed to Netlify. So meta.</p><p>I just returned from our week-long all hands meeting in San Francisco, where we reviewed the company roadmap and started concepting some of the new features I&#39;ll get to help build. Unlike the agency world, the Netlify team truly believes in an interdisciplinary\r\napproach ー I have the opportunity to work side-by-side every day with designers, API and platform developers, technical writers, and other front enders to bring a new vision of the web to life.<br><br><strong>What are some technologies you are excited about or want to learn more about?</strong><br>There are too many to name them all! I actually keep a &quot;learning plan&quot; where I outline concepts, courses, and articles I want to dive deeper in to, and have an accountability buddy at work to keep me honest in my progress.<br><br><strong>A few of the highlights right now:</strong></p><ul><li>Serverless is blowing up, so <a href=\"https://www.netlify.com/docs/functions/\" rel=\"noopener noreferrer\" target=\"_blank\">learning more about functions as a service (FAAS)</a> is high on my list.&nbsp;</li><li>New React features like Hooks and Suspense are close to primetime, so I want to focus in on some practical examples.&nbsp;</li><li>I&#39;ve been using GraphQL with Gatsby for many months, but there&#39;s always more to master!</li><li>My coworker <a href=\"https://twitter.com/swyx\" rel=\"noopener noreferrer\" target=\"_blank\">swyx</a> got us into using <a href=\"https://www.cypress.io/\" rel=\"noopener noreferrer\" target=\"_blank\">Cypress</a> for integration tests, and I&#39;ve slowly been picking it up.</li><li>I tested out CSS-in-JS on my last agency project and think it&#39;s worth exploring further.</li><li>The design team at my last agency was still using the Adobe Creative Suite, so I&#39;m continuing to level up with Sketch and starting to play with Figma and Webflow.</li></ul><p><br><strong>Do you have any tips for working remote in a team environment?&nbsp;</strong><br>I&#39;ve been working remotely for over 2 years now and while it was tough to adjust at first, I can&#39;t imagine going back. I&#39;ve found that a consistent routine is necessary; I get ready as if I were going into an office (minus the slippers!), work from the desk in my dedicated home office, and walk my <a href=\"http://instagram.com/dammitmacklin\" rel=\"noopener noreferrer\" target=\"_blank\">dog Mack</a> over lunch. This has helped compartmentalize &quot;work time&quot; vs &quot;play time&quot; and usually keeps me from pushing sloppy code from the couch at midnight.</p><p>A daily stand-up ensures I get at least a few minutes of &quot;face to face&quot; time every day (thanks, Google Meet!). Slack has also been a huge help in this regard, allowing me to &quot;drop by someone&#39;s desk&quot; whenever necessary. As a remotee,\r\nI believe it&#39;s better to err on the side of over-communicating.</p><p>Occasional in-person meetups, both with coworkers and in my community, have been priceless for team bonding and combatting loneliness. It&#39;s also a great opportunity to step outside your own bubble and keep a pulse on what&#39;s happening in the wider\r\nworld of software development.</p><p><br></p><p><strong>Conclusion</strong><br>The Cosmic Spotlight Series is dedicated to showcasing developers that are building apps using modern tools. Learn how to <a href=\"https://www.cosmicjs.com/contribute\" rel=\"noopener noreferrer\" target=\"_blank\">Contribute here</a>. To stay connected with us follow us on <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> and <a href=\"https://www.cosmicjs.com/community/\" rel=\"noopener noreferrer\" target=\"_blank\">join the conversation on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Leslie Cohn-Wein, a Front End Developer and Austin native now residing in Dallas, Texas. Leslie most recently worked as a Front End Engineer for <a href=\"https://www.canvasunited.com/\">Canvas United</a>, a New York City-based digital agency, prior to starting as a Front End Developer<strong>&nbsp;</strong>at <a href=\"http://netlify.com/\">Netlify</a>. Follow Leslie on <a href=\"https://twitter.com/lesliecdubs\">Twitter</a> or <a href=\"https://www.linkedin.com/in/lesliecohnwein/\">LinkedIn</a> and enjoy the Q/A.</p>"},{"value":"88933cd0-203f-11e9-92c9-db458343bde2-ZhG3yywl_400x400.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/88933cd0-203f-11e9-92c9-db458343bde2-ZhG3yywl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/88933cd0-203f-11e9-92c9-db458343bde2-ZhG3yywl_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2019-01-25T01:21:28.582Z","created_by":"5716b504e9c686d006000073","created":"2019-01-25T01:21:28.582Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-01-28T19:39:58.465Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Leslie Cohn-Wein, a Front End Developer and Austin native now residing in Dallas, Texas. Leslie most recently worked as a Front End Engineer for <a href=\"https://www.canvasunited.com/\">Canvas United</a>, a New York City-based digital agency, prior to starting as a Front End Developer<strong>&nbsp;</strong>at <a href=\"http://netlify.com/\">Netlify</a>. Follow Leslie on <a href=\"https://twitter.com/lesliecdubs\">Twitter</a> or <a href=\"https://www.linkedin.com/in/lesliecohnwein/\">LinkedIn</a> and enjoy the Q/A.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/88933cd0-203f-11e9-92c9-db458343bde2-ZhG3yywl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/88933cd0-203f-11e9-92c9-db458343bde2-ZhG3yywl_400x400.jpg"}}},{"_id":"5a9f17109ef8cf5e264d65a4","order":41,"slug":"alicomm-builds-a-website-using-laravel-and-cosmic-js","title":"Alicomm Builds a Website using Laravel and Cosmic","content":"<p><a href=\"http://alicomm.co\" rel=\"noopener noreferrer\" target=\"_blank\">Alicomm</a> is a professional communication coaching firm that empowers executives and business leaders to succeed by effectively establishing their brand, articulating their message and mission, and connecting with their audience.&nbsp;</p><p>In order to empower others, Alicomm knows presenting strong and dynamic content is mission-critical, so they chose activate interactive agency <a href=\"https://simplemedia.co\" rel=\"noopener noreferrer\" target=\"_blank\">Simple Media</a> to build a new website using <a href=\"https://cosmicjs.com/knowledge-base/vuejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Laravel</a>, <a href=\"https://cosmicjs.com/knowledge-base/php-cms\" rel=\"noopener noreferrer\" target=\"_blank\">PHP</a> and Cosmic.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/9aedccf0-40ee-11e8-9919-e3487fdc7656-Untitled design-5.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><blockquote><p>&ldquo;While developing complex web apps, agencies can&#39;t forget about the client and their user experience, particularly when it comes to managing content. &nbsp;PHP frameworks like <a href=\"https://cosmicjs.com/knowledge-base/vuejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Laravel</a> provide sturdy architecture and scaling potential; however a CMS layer has to be built to support the day-to-day content management efforts of both internal and external teams. &nbsp;</p><p>Cosmic has proven to be a massive solution for both our agency and our client by helping us streamline content management for both the marketing website and the web app.&quot;</p><p><cite>&mdash; Nick Bonanno, Simple Media (consulting interactive agency)</cite></p></blockquote>","metafields":[{"value":"Alicomm","key":"company","title":"Company","type":"text","children":null},{"value":"Executive Training","key":"industry_type","title":"Industry Type","type":"text","children":null},{"value":"AliComm is a professional communication coaching firm that empowers executives and business leaders to succeed by effectively establishing their brand, articulating their message and mission, and connecting with their audience. In order to empower others, AliComm knows presenting a strong and dynamic content is mission-critical, so they chose to build a new website using Laravel, PHP and Cosmic.\n","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"aff9d810-40f2-11e8-9919-e3487fdc7656-Alicomm full color (2).png","key":"logo","title":"Logo","type":"file","children":null,"url":"https://cdn.cosmicjs.com/aff9d810-40f2-11e8-9919-e3487fdc7656-Alicomm full color (2).png","imgix_url":"https://imgix.cosmicjs.com/aff9d810-40f2-11e8-9919-e3487fdc7656-Alicomm full color (2).png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"case-studies","created_at":"2018-03-06T22:32:48.334Z","created_by":"5716b504e9c686d006000073","created":"2018-03-06T22:32:48.334Z","status":"published","modified_at":"2020-10-02T02:10:14.361Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-04-15T21:19:33.582Z","metadata":{"company":"Alicomm","industry_type":"Executive Training","teaser":"AliComm is a professional communication coaching firm that empowers executives and business leaders to succeed by effectively establishing their brand, articulating their message and mission, and connecting with their audience. In order to empower others, AliComm knows presenting a strong and dynamic content is mission-critical, so they chose to build a new website using Laravel, PHP and Cosmic.\n","logo":{"url":"https://cdn.cosmicjs.com/aff9d810-40f2-11e8-9919-e3487fdc7656-Alicomm full color (2).png","imgix_url":"https://imgix.cosmicjs.com/aff9d810-40f2-11e8-9919-e3487fdc7656-Alicomm full color (2).png"}}},{"_id":"5cd9a8a3630c5172d98e48c8","order":41,"slug":"introducing-the-new-docs","title":"Introducing the new docs","content":"<p>We&#39;re excited to announce that we have made a big update to the <a data-cke-saved-href=\"https://docs.cosmicjs.com/\" href=\"https://docs.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic documentation</a>. We think you&#39;ll agree that the experience is much improved and makes thumbing through the docs much easier and even enjoyable 😁</p><p><strong>Here are the updates:</strong></p><ol><li>All of the docs for the main features are all now in a single location for easy access: <a href=\"https://docs.cosmicjs.com/rest-api/\">REST API</a>, <a href=\"https://docs.cosmicjs.com/graphql-api/\">GraphQL API</a>, <a href=\"https://docs.cosmicjs.com/cli/\">CLI</a>, <a href=\"https://docs.cosmicjs.com/webhooks/\">Webhooks</a>, <a href=\"https://docs.cosmicjs.com/extensions/\">Extensions</a>, and <a href=\"https://docs.cosmicjs.com/functions/\">Functions</a>.</li><li>Speed between pages is now blazing fast.</li><li>Search! You can now search through all of the documentation to find what you need quickly.</li></ol><p><br>Good documentation is so important. It can be the deal-maker or deal-breaker when deciding which tools to use on your team. And we think this release is a big improvement that we hope you like.</p><p>Check out <a href=\"https://docs.cosmicjs.com/\">the new docs</a> and let me know what you think! Join the <a href=\"https://cosmicslack.now.sh/\" rel=\"noopener noreferrer\" target=\"_blank\">community on Slack</a> and <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">on Twitter</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"b68f3110-75c7-11e9-b6b5-b978e3708b4c-cosmicjs-docs.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/b68f3110-75c7-11e9-b6b5-b978e3708b4c-cosmicjs-docs.jpg","imgix_url":"https://imgix.cosmicjs.com/b68f3110-75c7-11e9-b6b5-b978e3708b4c-cosmicjs-docs.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2019-05-14T17:25:55.309Z","created_by":"5357ef811693be2118000001","created":"2019-05-14T17:25:55.310Z","status":"published","modified_at":"2020-08-10T14:02:39.393Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-05-14T14:19:37.307Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":"https://cdn.cosmicjs.com/b68f3110-75c7-11e9-b6b5-b978e3708b4c-cosmicjs-docs.jpg","imgix_url":"https://imgix.cosmicjs.com/b68f3110-75c7-11e9-b6b5-b978e3708b4c-cosmicjs-docs.jpg"}}},{"_id":"595e8ee6924137fa700001a9","order":42,"slug":"bootstrap-cms","title":"Bootstrap CMS","content":"<p>Cosmic JS makes it easy to manage content for your Bootstrap applications. Check out some of the <a href=\"https://cosmicjs.com/apps?languages=Bootstrap\" rel=\"noopener noreferrer\" target=\"_blank\">apps built with Bootstrap</a> and the Cosmic JS CMS API. &nbsp;And check out the tutorials below.</p><h3>Bootstrap CMS Articles</h3><p><a href=\"https://cosmicjs.com/blog/how-to-build-a-medium-backup-app\" rel=\"noopener noreferrer\" target=\"_blank\">How to Build a Medium Backup App</a><br><a href=\"https://hackernoon.com/how-to-build-a-node-js-user-management-app-12d900695ef6\" rel=\"noopener noreferrer\" target=\"_blank\">How to Build a Node.js User Management App</a></p><h3>Bootstrap CMS Resources</h3><p><a href=\"https://cosmicjs.com/docs/\">Cosmic JS Docs</a><br><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\"></a><a data-target-href=\"https://github.com/cosmicjs/cosmicjs-node\" href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Official JavaScript Client</a><br><a data-target-href=\"https://github.com/cosmicjs\" href=\"https://github.com/cosmicjs\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Cosmic JS GitHub</a></p><h3>Examples</h3><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><code style=' font-size: inherit; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: 0px 0px; text-align: left;'>npm i cosmicjs</code></pre><p>Then in your JavaScript file, get your content:</p><div class=\"fr-embedly  \" data-original-embed=\"<a href='https://runkit.com/tonyspiro/5ad9109c320cd6001286359c' class='embedly-card'></a>\"><a href=\"https://runkit.com/tonyspiro/5ad9109c320cd6001286359c\" class=\"embedly-card\"></a></div>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"EjHBqfbyjf","value":"87f56f20-6289-11e7-ab3d-9ddd8313526f-bootstrap.png","url":"https://cdn.cosmicjs.com/87f56f20-6289-11e7-ab3d-9ddd8313526f-bootstrap.png","imgix_url":"https://imgix.cosmicjs.com/87f56f20-6289-11e7-ab3d-9ddd8313526f-bootstrap.png"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"P4igJngy5k","value":"87f56f20-6289-11e7-ab3d-9ddd8313526f-bootstrap.png","url":"https://cdn.cosmicjs.com/87f56f20-6289-11e7-ab3d-9ddd8313526f-bootstrap.png","imgix_url":"https://imgix.cosmicjs.com/87f56f20-6289-11e7-ab3d-9ddd8313526f-bootstrap.png"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"Ynn0u4jg5K","value":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for Bootstrap websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"2PXkbhI9Dd","value":"Bootstrap"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"K1vIaINadD","value":"Cosmic is the best CMS for Bootstrap websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"kogD3PAJoA","value":"87f56f20-6289-11e7-ab3d-9ddd8313526f-bootstrap.png","url":"https://cdn.cosmicjs.com/87f56f20-6289-11e7-ab3d-9ddd8313526f-bootstrap.png","imgix_url":"https://imgix.cosmicjs.com/87f56f20-6289-11e7-ab3d-9ddd8313526f-bootstrap.png"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"CBSVIzkoLV","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"zhZH7Hc8aI","value":"Bootstrap CMS"},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"EJPS1t2oPf","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]},{"children":null,"type":"text","title":"Apps Search Term","key":"apps_search_term","id":"0j2XD9Gog1","value":""},{"children":null,"type":"text","title":"Articles Search Term","key":"articles_search_term","id":"8RgqbG1UTr","value":""},{"children":null,"type":"text","title":"Page Overview Title","key":"page_overview_title","id":"gj036836gx4c73fpdjzb","value":""},{"children":null,"type":"html-textarea","title":"Page Overview","key":"page_overview","id":"iSVFzvAn9h","value":""},{"children":null,"type":"html-textarea","title":"SEO Content","key":"seo_content","id":"lcsUSsZiB9","value":""},{"children":[],"type":"repeater","title":"Apps","key":"apps","id":"dkpxmwigd1z8x4ants9f","value":"","repeater_fields":[{"title":"App Slug","key":"app_slug","value":"","type":"text","required":false}]},{"children":[],"type":"repeater","title":"Articles","key":"articles","id":"dwil4bqojngnkej4v85k","value":"","repeater_fields":[{"title":"Article Slug","key":"article_slug","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-22T23:07:51.159Z","created_by":"5357ef811693be2118000001","created":"2017-07-06T19:26:30.459Z","status":"published","modified_at":"2021-02-04T15:56:18.611Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2021-02-04T15:56:18.611Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/87f56f20-6289-11e7-ab3d-9ddd8313526f-bootstrap.png","imgix_url":"https://imgix.cosmicjs.com/87f56f20-6289-11e7-ab3d-9ddd8313526f-bootstrap.png"},"thumbnail":{"url":"https://cdn.cosmicjs.com/87f56f20-6289-11e7-ab3d-9ddd8313526f-bootstrap.png","imgix_url":"https://imgix.cosmicjs.com/87f56f20-6289-11e7-ab3d-9ddd8313526f-bootstrap.png"},"blurb":"<p><a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: &quot;Open Sans&quot;, sans-serif; font-size: 13px; text-align: start;\"></a>Cosmic is the best CMS for Bootstrap websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"Bootstrap","seo_description":"Cosmic is the best CMS for Bootstrap websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/87f56f20-6289-11e7-ab3d-9ddd8313526f-bootstrap.png","imgix_url":"https://imgix.cosmicjs.com/87f56f20-6289-11e7-ab3d-9ddd8313526f-bootstrap.png"},"code_example":"","seo_title":"Bootstrap CMS","videos":[],"apps_search_term":"","articles_search_term":"","page_overview_title":"","page_overview":"","seo_content":"","apps":[],"articles":[]}},{"_id":"5c48978d7ec1dc376af9b466","order":42,"slug":"developer-spotlight-jason-lengstorf-of-gatsby","title":"Developer Spotlight: Jason Lengstorf of Gatsby","content":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with <a href=\"https://lengstorf.com\" rel=\"noopener noreferrer\" target=\"_blank\">Jason Lengstorf</a>, a developer, architect, keynote speaker and occasional designer residing in Portland, Oregon. Having worked previously at IBM and Precision Nutrition, Jason now serves as Head of Developer Relations at <a href=\"https://www.gatsbyjs.org\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby</a>. Check out <a href=\"https://www.cosmicjs.com/articles/video-build-a-cosmic-js-powered-blog-using-gatsby-jpsrqozy\" rel=\"noopener noreferrer\" target=\"_blank\">the video of the pair programming session</a> he did demonstrating how to use Cosmic to power your Gatsby websites. Follow Jason on <a href=\"https://twitter.com/jlengstorf\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://github.com/jlengstorf\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a> and his <a href=\"https://lengstorf.com\" rel=\"noopener noreferrer\" target=\"_blank\">blog</a> and enjoy the Q/A.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/4a2b0bb0-2023-11e9-8b75-9b9c29c68edc-Jason.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><strong>Cosmic: When did you first begin building software?</strong><br>Jason: As a teenager, I was in a band, and we needed things like concert posters, merch designs, and a custom MySpace page. I wrote my first few lines of CSS around then, and slowly started doing more and more: I built our first website, learned Flash so I could embed our music, learned PHP and built a crappy CMS so the rest of the band could post updates to the site, and just kept going deeper and deeper down that rabbit hole. Eventually it became obvious that I wasn&#39;t rockstar material, so I stopped pretending to be a musician and focused exclusively on design/code.<br><br><strong>What is your preferred development stack?</strong><br>Right now, I work mostly with React, GraphQL, and Node.js.<br><br><strong>What past projects are you most proud of and why?</strong><br>The first two that come to mind are GrAMPS and the Gatsby swag store.</p><p><a href=\"https://github.com/gramps-graphql/gramps\" target=\"_blank\">GrAMPS</a> is a way to allow multiple independent teams to publish GraphQL schemas as npm packages that are then aggregated and stitched together. IBM Cloud, which I was working on when my team and I built it, uses a microservice architecture, which means that a different team owns each piece of the data. This meant that the API surface was hard to understand, largely undocumented, and extremely difficult to keep track of. By introducing GraphQL with GrAMPS, these teams got to keep control of their data sources, but gave us the ability to expose all of the data through a centralized GraphQL endpoint. This was a huge win for everyone inside the company, and it led to much better communication and standardization within the team.</p><p>The <a href=\"https://store.gatsbyjs.org/\" target=\"_blank\">Gatsby swag store</a> is a Gatsby site where we sell our swag, but it&#39;s <em>also</em> a way for us to give back to the community. Anyone who <a href=\"https://gatsby.app/contribute\" target=\"_blank\">contributes to Gatsby</a> &mdash; whether that&#39;s through code, giving a talk, writing an article, or something else &mdash; can log in with their GitHub account and get a discount code for free swag. This is our way of saying &quot;thank you&quot; to the community for all the hard work they put in. It&#39;s only a small part of what we try to do for the Gatsby community, but for me, it&#39;s a really fun way to give back and joke around.<br><br><strong>What are your biggest challenges in building the community at Gatsby?</strong><br>I&#39;m very fortunate at Gatsby, because the community is incredible. I often make the joke that working in developer relations really just means retweeting all the nice things people already say about us.</p><p>The most challenging part has been making sure we don&#39;t miss things. People have questions, and when they reach out to us and we lose the message, that sucks. Gatsby is a community-powered company, so we work extremely hard to make sure the community stays at the center of everything we do: how does Gatsby make people&#39;s lives easier? how do we make sure every decision we make is creating a better experience for the community? how do we ensure that our community is a safe and supportive place for everyone, regardless of experience level or background?<br><br><strong>How do things change moving from a legacy company like IBM to a bleeding-edge startup like Gatsby?</strong><br>Both have their perks and problems. For example, at IBM I felt like I spent months asking permission to do a few weeks&#39; worth of work, which was super frustrating. However, IBM can solve <em>any</em> problem because they have so many incredibly talented people working there, and their resources are... significant.</p><p>At Gatsby, we can quickly move toward new ideas with minimal bureaucracy, but we also hit resource limits: I can&#39;t necessarily hire all the people I&#39;d like to for my team, or sponsor every event I&#39;d like to, or spin up an exploratory team to tackle an interesting-but-unproven problem.</p><p>In general, the biggest difference for me has been the amount of chaos available to me. I&#39;m the kind of person who loves to be buried in hard problems with fuzzy definitions. I like trying to make sense out of the mess, and identify pathways through tricky problem spaces. At IBM, there are occasional challenges like this &mdash; the GraphQL/GrAMPS project was one of them &mdash; but mostly things are relatively well established, so the level of chaos is fairly low. At Gatsby, it often feels like everything we do is being done for the first time, so there&#39;s no shortage of chaos. My personality type tends to thrive in the Gatsby environment, I&#39;ve found.<br><br><strong>What are some technologies you are excited about or want to learn more about?</strong><br>I&#39;m really excited about new developments in the GraphQL space, and I&#39;ll always be learning more about the fundamentals: HTML, CSS, vanilla JavaScript. I&#39;ve also been dipping my toes into &quot;abstract syntax trees&quot;, which are what tools like Babel use to change code from one format to another. It hurts my brain a little bit, but it&#39;s really fun once it works. :)</p><p><strong><br></strong>The Cosmic Spotlight Series is dedicated to showcasing developers that are building apps using modern tools. Learn how to <a href=\"https://www.cosmicjs.com/contribute\" rel=\"noopener noreferrer\" target=\"_blank\">Contribute here</a>. To stay connected with us <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">join the conversation on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Jason Lengstorf, a developer, architect, keynote speaker and occasional designer residing in Portland, Oregon. Having worked previously at IBM and Precision Nutrition, Jason now serves as Head of Developer Relations at <a href=\"https://www.gatsbyjs.org\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby</a>. Follow Jason on <a href=\"https://twitter.com/jlengstorf\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://www.linkedin.com/in/jlengstorf/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> or <a href=\"https://github.com/jlengstorf\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, and enjoy the Q/A.</p>"},{"value":"564c3590-2023-11e9-85d1-29a68f3754e7-Jason.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/564c3590-2023-11e9-85d1-29a68f3754e7-Jason.png","imgix_url":"https://imgix.cosmicjs.com/564c3590-2023-11e9-85d1-29a68f3754e7-Jason.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2019-01-23T16:34:21.501Z","created_by":"5716b504e9c686d006000073","created":"2019-01-23T16:34:21.501Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-01-25T17:46:48.839Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Jason Lengstorf, a developer, architect, keynote speaker and occasional designer residing in Portland, Oregon. Having worked previously at IBM and Precision Nutrition, Jason now serves as Head of Developer Relations at <a href=\"https://www.gatsbyjs.org\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby</a>. Follow Jason on <a href=\"https://twitter.com/jlengstorf\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://www.linkedin.com/in/jlengstorf/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> or <a href=\"https://github.com/jlengstorf\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, and enjoy the Q/A.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/564c3590-2023-11e9-85d1-29a68f3754e7-Jason.png","imgix_url":"https://imgix.cosmicjs.com/564c3590-2023-11e9-85d1-29a68f3754e7-Jason.png"}}},{"_id":"5c9991c6329e6a1b5152fd8f","slug":"introducing-the-powered-by-cosmic-js-badge","title":"Introducing the 'Powered by Cosmic' Badge","content":"<p>We&#39;re excited to unveil a new feature for the Cosmic Community: the <strong>Powered</strong><strong>&nbsp;by Cosmic Badge.</strong></p><p style=\"text-align: center;\">Here&#39;s how it looks <span class=\"fr-emoticon fr-deletable\">😍</span>&nbsp;</p><p style=\"text-align: center;\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/51fe54d0-4f6e-11e9-9f32-8d001da69630-powered-by-cosmicjs.svg\" style=\"width: 180px;\" class=\"fr-fic fr-dib\"></p><p><br>Add the badge to the footer of your website to let your visitors know how you power your content (API-first!). Enable sharing to allow others to clone your content to their own Bucket.</p><p>You will get a <strong>Free Personal plan forever</strong> for helping us spread the word.</p><p><br><strong>Here&#39;s how to do it:&nbsp;</strong></p><p>1. Navigate to <a href=\"https://cosmicjs.com/login\"><em>Your Bucket &gt; Settings</em></a> and turn sharing on.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/82f3f120-4f6f-11e9-94c4-7f4f4d5a285a-Screen-Shot-2019-03-25-at-7.32.58-PM.png\" style=\"width: 150px;\" class=\"fr-fic fr-dib fr-fil\"></p><p>2. Copy and paste the code to the footer of your website using HTML or markdown.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/a9b03560-4f7b-11e9-94c4-7f4f4d5a285a-Screen-Shot-2019-03-25-at-9.00.00-PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>3. <a href=\"/contact?subject=Clone%20on%20Cosmic%20Badge\">Reach out to Cosmic support</a> with a link to the badge and we&#39;ll upgrade your Bucket of choice to a <strong>free Personal plan forever</strong>!</p><p><br></p><p>Photo by <a href=\"https://unsplash.com/photos/ImcUkZ72oUs?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">israel palacio</a> on <a href=\"https://unsplash.com/?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Unsplash</a></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"b1d456a0-50b0-11e9-9e90-b1c67a0a9b8f-531fc300-4f71-11e9-a51b-7da149d7af67-ImcUkZ72oUs.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/b1d456a0-50b0-11e9-9e90-b1c67a0a9b8f-531fc300-4f71-11e9-a51b-7da149d7af67-ImcUkZ72oUs.jpg","imgix_url":"https://imgix.cosmicjs.com/b1d456a0-50b0-11e9-9e90-b1c67a0a9b8f-531fc300-4f71-11e9-a51b-7da149d7af67-ImcUkZ72oUs.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created":"2019-03-26T02:43:18.645Z","created_at":"2019-03-26T02:43:18.645Z","modified_at":"2020-08-10T14:00:04.404Z","status":"published","locale":null,"published_at":"2019-03-27T16:52:30.893Z","created_by":"5357ef811693be2118000001","modified_by":"5716b504e9c686d006000073","publish_at":null,"order":42,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":"https://cdn.cosmicjs.com/b1d456a0-50b0-11e9-9e90-b1c67a0a9b8f-531fc300-4f71-11e9-a51b-7da149d7af67-ImcUkZ72oUs.jpg","imgix_url":"https://imgix.cosmicjs.com/b1d456a0-50b0-11e9-9e90-b1c67a0a9b8f-531fc300-4f71-11e9-a51b-7da149d7af67-ImcUkZ72oUs.jpg"}}},{"_id":"5c4894956b991a3d5e9d2f3f","order":43,"slug":"developer-spotlight-quincy-larson-of-freecodecamp","title":"Developer Spotlight: Quincy Larson of freeCodeCamp","content":"<p>The Cosmic Community focuses on providing helpful resources to equip developers and content creators with the inspiration and know-how to build apps faster, together. In this installment of the Cosmic Developer Spotlight Series, we sat down with Quincy Larson, the developer and famed teacher behind <a href=\"https://www.freecodecamp.org\" rel=\"noopener noreferrer\" target=\"_blank\">freeCodeCamp.org</a>. Follow Quincy on <a href=\"https://twitter.com/ossia\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> and enjoy the Q/A.<br><br><strong>Cosmic: When and how did you first begin building software?</strong><br>Quincy: I first started building software when I was in my 30&#39;s, working as a school director. I wanted to figure out how to automate some of the more tedious tasks for my teachers and staff, which lead to me learning some programming.</p><p>I guess you could consider those early automation scripts to be my first pieces of software, even though they were super hacky and I was the only person who ran them.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/996c2640-1f2a-11e9-bed1-876abe5d5a05-quincy-headshot-highres.png\" class=\"fr-fic fr-fil fr-dii pull-left mr-20 mb-10\" style=\"width: 50%;\"></p><p><strong>So your first love was for education, and coding became the subject you loved teaching?</strong><br>Yes - I worked as a teacher and school director for about a decade before I started coding.</p><p>There are so many aspects of civilization that can be improved through better systems - and software is just a way of telling computers how to enact those systems.</p><p>I knew first hand how hard it was to learn how to code, and that we needed better learning resources. So I started building learning resources. Eventually I built the earliest version of <a href=\"http://freecodecamp.org/\"></a>\r\n<a href=\"//freeCodeCamp.org\"></a><a href=\"//freeCodeCamp.org\">freeCodeCamp.org</a>.<br><br><strong>What is your preferred development stack?</strong><br>I started off with Python and Django, worked as a Ruby on Rails developer for a while, and now I work with full stack JavaScript - Node, npm packages, and friends.<br><br><strong>What past projects are you most proud of and why?</strong><br>I&#39;m most proud of freeCodeCamp because it&#39;s helping millions of people learn to code - tens of thousands of whom have already gotten their first job as a developer.</p><p>This said, we are still early days. I think everyone would benefit from learning at least some coding because it allows you to take advantage of the past 70 years of breakthroughs in computing.</p><p>If you take everyone who&#39;s working-age on earth, that&#39;s several billion people whom we ultimately want to teach. That&#39;s a multi-generational effort. But that&#39;s what freeCodeCamp is aiming for.<br><br><strong>What were your biggest challenges in starting freeCodeCamp?&nbsp;</strong><br>The biggest challenge was figuring out a tool people would actually use and continue to use.&nbsp;</p><p>I had created other educational tools where people would say &quot;oh, that&#39;s cool&quot; but then never come back.</p><p>Once I noticed people coming back and progressing through freeCodeCamp&#39;s curriculum, that&#39;s when I started to realize that I&#39;d created something useful.<br><br><strong>What are some technologies you are excited about or want to learn more about?</strong><br>I&#39;m excited about the JAMstack and the prospect of serving static files quickly and inexpensively around the world. A ton of freeCodeCamp&#39;s community is in places with unreliable internet connections, and pushing everything to the CDN layer dramatically improves these peoples&#39; experience.<br><br><strong>Do you have any tips for new developers just starting to code?&nbsp;</strong><br>Sure - I recommend coding as much as possible. Following along with tutorials and building projects. And building projects at hackathons.</p><p>The more time you spend coding, the better. freeCodeCamp&#39;s interactive curriculum is a biproduct of that bias toward action. If you&#39;re coding and getting feedback in the form of failing tests or error messages, you&#39;re learning and you&#39;re\r\nmoving forward.</p><p><br>The Cosmic Spotlight Series is dedicated to showcasing developers that are building apps using modern tools. Learn how to <a href=\"https://www.cosmicjs.com/contribute\" rel=\"noopener noreferrer\" target=\"_blank\">contribute here</a>. To stay connected with us <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">join the conversation on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>The Cosmic Community focuses on providing helpful resources to equip developers and content creators with the inspiration and know-how to build apps faster, together. In this installment of the Cosmic Developer Spotlight Series, we sat down with Quincy Larson, the developer and famed teacher behind freeCodeCamp.org. Follow Quincy on <a href=\"https://twitter.com/ossia\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://medium.freecodecamp.org/@quincylarson\" rel=\"noopener noreferrer\" target=\"_blank\">Medium</a>, <a href=\"https://github.com/QuincyLarson\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a> or <a href=\"https://www.linkedin.com/in/quincylarson/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a>, and enjoy the Q/A.</p>"},{"value":"9407afd0-1f2a-11e9-bed1-876abe5d5a05-quincy-headshot-highres.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/9407afd0-1f2a-11e9-bed1-876abe5d5a05-quincy-headshot-highres.png","imgix_url":"https://imgix.cosmicjs.com/9407afd0-1f2a-11e9-bed1-876abe5d5a05-quincy-headshot-highres.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2019-01-23T16:21:41.835Z","created_by":"5716b504e9c686d006000073","created":"2019-01-23T16:21:41.835Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-01-23T18:14:52.006Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>The Cosmic Community focuses on providing helpful resources to equip developers and content creators with the inspiration and know-how to build apps faster, together. In this installment of the Cosmic Developer Spotlight Series, we sat down with Quincy Larson, the developer and famed teacher behind freeCodeCamp.org. Follow Quincy on <a href=\"https://twitter.com/ossia\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://medium.freecodecamp.org/@quincylarson\" rel=\"noopener noreferrer\" target=\"_blank\">Medium</a>, <a href=\"https://github.com/QuincyLarson\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a> or <a href=\"https://www.linkedin.com/in/quincylarson/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a>, and enjoy the Q/A.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/9407afd0-1f2a-11e9-bed1-876abe5d5a05-quincy-headshot-highres.png","imgix_url":"https://imgix.cosmicjs.com/9407afd0-1f2a-11e9-bed1-876abe5d5a05-quincy-headshot-highres.png"}}},{"_id":"5c7f0c3f7ca3461dcbec19b7","order":43,"slug":"optimize-images-on-the-fly-with-the-new-image-settings-editor","title":"Optimize images on the fly with the new image settings editor 📷 🛠","content":"<p>You can now edit your images on the fly using the new editor available on every image Metafield.</p><p>To see the new feature, <a href=\"https://cosmicjs.com/login\" rel=\"noopener noreferrer\" target=\"_blank\">login to your Cosmic account</a> and go to any Object with an image Metafield and you&#39;ll notice a button to edit &quot;Settings&quot;. (Note: you will need to have a role that includes developer features)</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/86c75810-3f9c-11e9-b5af-c5755d786de5-edit-image-button.jpg\" data-action=\"zoom\" class=\"fr-fic fr-dii\" style=\"width: 100%;\"></p><p><br></p><p>Click the button and you will be able to edit and optimize the image using <a href=\"https://imgix.com\" rel=\"noopener noreferrer\" target=\"_blank\">imgix</a> query params.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/338705a0-3f93-11e9-ae29-f5a87a57ad39-imgix-inline-editor.gif\" data-action=\"zoom\" class=\"fr-fic fr-dii\" style=\"width: 100%;\"></p><p><br>If you have any questions about this feature or others, <a href=\"https://cosmicjs.com/community\">join the conversation on Slack</a> and <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"e960cab0-3fa1-11e9-a6a6-3b139f4a7008-b3f3ee60-24d6-11e9-8b39-47bf34720c5d-Artboard-3.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e960cab0-3fa1-11e9-a6a6-3b139f4a7008-b3f3ee60-24d6-11e9-8b39-47bf34720c5d-Artboard-3.jpg","imgix_url":"https://imgix.cosmicjs.com/e960cab0-3fa1-11e9-a6a6-3b139f4a7008-b3f3ee60-24d6-11e9-8b39-47bf34720c5d-Artboard-3.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2019-03-05T23:54:39.910Z","created_by":"5357ef811693be2118000001","created":"2019-03-05T23:54:39.910Z","status":"published","published_at":"2019-03-06T18:25:45.422Z","modified_at":"2020-08-10T14:00:04.404Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":"https://cdn.cosmicjs.com/e960cab0-3fa1-11e9-a6a6-3b139f4a7008-b3f3ee60-24d6-11e9-8b39-47bf34720c5d-Artboard-3.jpg","imgix_url":"https://imgix.cosmicjs.com/e960cab0-3fa1-11e9-a6a6-3b139f4a7008-b3f3ee60-24d6-11e9-8b39-47bf34720c5d-Artboard-3.jpg"}}},{"_id":"5c40a8c079c1dd08aacd75f4","order":44,"slug":"developer-spotlight-emma-wedekind-of-logmein","title":"Developer Spotlight: Emma Wedekind of LogMeIn","content":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Emma Wedekind, a developer and New York native now residing in Karlsruhe, Germany. Emma is a Software Engineer at <a href=\"https://www.logmeininc.com\" rel=\"noopener noreferrer\" target=\"_blank\">LogMeIn</a> and the Founder of <a href=\"https://codingcoach.io\" rel=\"noopener noreferrer\" target=\"_blank\">CodingCoach.io</a>. Follow Emma on <a href=\"https://twitter.com/EmmaWedekind\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://www.linkedin.com/in/emmawedekind/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> or <a href=\"https://medium.com/@emmawedekind\" rel=\"noopener noreferrer\" target=\"_blank\">Medium</a>, and enjoy the Q/A.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/566b3050-1a72-11e9-89b0-8bd1fc7adb08--gZd_oMp_400x400.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><strong>Cosmic: When did you first begin building software?</strong><br><strong>Emma:&nbsp;</strong>I began my Sophomore year of college. I was originally a Biology major but switched to actuarial science, and ultimately found my passion in software engineering.<br><br><strong>What is your preferred development stack?</strong><br>I am a huge fan of React / Redux / TypeScript :) I began learning it about a year ago when I joined LogMeIn and have fallen in love with it! I am also a huge lover of Gatsby for building static sites with React. Cannot recommend highly enough!<br><br><strong>What past projects are you most proud of and why?</strong><br>I built the IBM Q Network website all by myself in just a couple of weeks! I chose to use Vue.js, which was extremely challenging as it was my first time using Vue, but I learned so many incredible skills as a result. </p><p><br><strong>What are your biggest challenges in building software at LogMeIn?</strong><br>Understanding the underlying architecture. It&#39;s built on top of Web-RTC, but there is a lot of proprietary and legacy code which can be difficult to navigate. Debugging can sometimes become a bit convoluted when you don&#39;t know which layer to start with.</p><p><br><strong>What was the inspiration for Coding Coach?</strong><strong><br></strong>I am a huge proponent of mentorship, primarily because I didn&rsquo;t have a mentor when I was beginning my front-end development journey. Navigating the world of front-end was extremely difficult without a mentor to guide me along. And although there are mentorship platforms out there, they&rsquo;re often expensive. I wanted to create something accessible to all! </p><p><br><strong>What are some technologies you are excited about or want to learn more about?</strong><br>I want to really hone in on learning SVG animations this year. I will also be focusing a lot more on how to build robust Design Systems and Component Libraries using React and native web components.</p><p><br>The Cosmic Spotlight Series is dedicated to showcasing developers that are building apps using modern tools. Learn how to <a href=\"https://www.cosmicjs.com/contribute\" rel=\"noopener noreferrer\" target=\"_blank\">Contribute here</a>. To stay connected with us <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">join the conversation on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Emma Wedekind, a developer and New York native now residing in Karlsruhe, Germany. Emma is a Software Engineer at <a href=\"https://www.logmeininc.com\" rel=\"noopener noreferrer\" target=\"_blank\">LogMeIn</a> and the Founder of <a href=\"https://codingcoach.io\" rel=\"noopener noreferrer\" target=\"_blank\">CodingCoach.io</a>. Follow Emma on <a href=\"https://twitter.com/EmmaWedekind\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://www.linkedin.com/in/emmawedekind/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> or <a href=\"https://medium.com/@emmawedekind\" rel=\"noopener noreferrer\" target=\"_blank\">Medium</a>, and enjoy the Q/A.</p>"},{"value":"68a38eb0-1b4a-11e9-a9d3-29385bebbe9f-emma1.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/68a38eb0-1b4a-11e9-a9d3-29385bebbe9f-emma1.jpg","imgix_url":"https://imgix.cosmicjs.com/68a38eb0-1b4a-11e9-a9d3-29385bebbe9f-emma1.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2019-01-17T16:09:36.403Z","created_by":"5716b504e9c686d006000073","created":"2019-01-17T16:09:36.403Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-01-19T01:18:05.242Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Emma Wedekind, a developer and New York native now residing in Karlsruhe, Germany. Emma is a Software Engineer at <a href=\"https://www.logmeininc.com\" rel=\"noopener noreferrer\" target=\"_blank\">LogMeIn</a> and the Founder of <a href=\"https://codingcoach.io\" rel=\"noopener noreferrer\" target=\"_blank\">CodingCoach.io</a>. Follow Emma on <a href=\"https://twitter.com/EmmaWedekind\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://www.linkedin.com/in/emmawedekind/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> or <a href=\"https://medium.com/@emmawedekind\" rel=\"noopener noreferrer\" target=\"_blank\">Medium</a>, and enjoy the Q/A.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/68a38eb0-1b4a-11e9-a9d3-29385bebbe9f-emma1.jpg","imgix_url":"https://imgix.cosmicjs.com/68a38eb0-1b4a-11e9-a9d3-29385bebbe9f-emma1.jpg"}}},{"_id":"5c7f15396a645a27c32b9384","order":44,"slug":"view-as-editor","title":"View as Editor","content":"<p>We&#39;re happy to release a new feature that helps you collaborate with your team members easier using Cosmic. Introducing <strong>View as Editor</strong>.<br><br>As a developer, getting a CMS set up for your content creators requires a certain level of empathy. It&#39;s your job to make a technology choice that allows them to work in a comfortable environment and only see what they need to get their job done.<br><br>With the new &quot;<strong>View as Editor</strong>&quot; toggle now available in your Bucket for the developer and admin roles (see gif below), you can preview the entire Bucket experience from the vantage point of your content creators hiding all developer features and settings.<br><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1e608ec0-3549-11e9-918c-59ca5baebb7d-view-as-editor.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br>So now when you add your content creators in the editor role, you can be sure that you are giving them an intuitive and easy-to-use editing experience.<br><br>I&#39;d love to hear your thoughts on this and other ways to make it easier for teams of developers and content creators to collaborate. <a href=\"https://cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Join the conversation on Slack</a> and <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a>.<br><br>Photo by <a href=\"https://unsplash.com/photos/-udZnjsCzsE?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Scott Webb</a> on <a href=\"https://unsplash.com/?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Unsplash</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"daa1a400-3546-11e9-be5e-d196042f83b6--udZnjsCzsE.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/daa1a400-3546-11e9-be5e-d196042f83b6--udZnjsCzsE.jpg","imgix_url":"https://imgix.cosmicjs.com/daa1a400-3546-11e9-be5e-d196042f83b6--udZnjsCzsE.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"changelogs","created_at":"2019-02-20T00:32:57.943Z","created_by":"5357ef811693be2118000001","created":"2019-02-20T00:32:57.943Z","status":"published","published_at":"2019-03-06T00:45:25.583Z","modified_at":"2020-08-10T14:00:04.404Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"featured_image":{"url":"https://cdn.cosmicjs.com/daa1a400-3546-11e9-be5e-d196042f83b6--udZnjsCzsE.jpg","imgix_url":"https://imgix.cosmicjs.com/daa1a400-3546-11e9-be5e-d196042f83b6--udZnjsCzsE.jpg"}}},{"_id":"58fdfa0bb53aeb5e5b000b5f","order":44,"slug":"aspnet-cms","title":"ASP.net CMS","content":"<p>Cosmic JS is a great choice to power content for your ASP.net apps. &nbsp;The Cosmic JS API can connect to any application, so you can freely build your website in ASP.net and serve your content via our CMS API to any other application.</p><h3>ASP.net CMS Articles</h3><p><a href=\"https://cosmicjs.com/blog/the-cosmic-stack\" rel=\"noopener noreferrer\" target=\"_blank\">The Cosmic Stack</a></p><h3>ASP.net CMS Resources</h3><p><a href=\"https://cosmicjs.com/docs/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic JS Docs</a><br><a href=\"https://github.com/cosmicjs/cosmicjs-node\" rel=\"noopener noreferrer\" target=\"_blank\">Official JavaScript Client</a><br><a href=\"https://github.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic JS GitHub</a></p><h3 style=' font-family: \"Open Sans\", sans-serif; color: rgb(51, 51, 51); font-size: 24px; text-align: start; background-color: rgb(255, 255, 255);'>Examples</h3><p>You can access your Cosmic JS Bucket content with simple HTTP requests to the API:</p><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 40, 34); text-align: left;'><a href=\"https://api.cosmicjs.com/v1/cross-platform-blog/object-type/posts?pretty=true\" style=\" background-color: transparent; color: rgb(0, 175, 215);\"></a><a href=\"https://api.cosmicjs.com/v1/cross-platform-blog/object-type/posts?pretty=true\">https://api.cosmicjs.com/v1/cross-platform-blog/object-type/posts?pretty=true</a></pre>","metafields":[{"children":null,"type":"file","title":"Image","key":"image","id":"IKV5qtc2K4","value":"cb7a8ab0-28ef-11e7-89e7-6d9e98749006-asp.net.svg","url":"https://cdn.cosmicjs.com/cb7a8ab0-28ef-11e7-89e7-6d9e98749006-asp.net.svg","imgix_url":"https://imgix.cosmicjs.com/cb7a8ab0-28ef-11e7-89e7-6d9e98749006-asp.net.svg"},{"children":null,"type":"file","title":"Thumbnail","key":"thumbnail","id":"nAp4LyUJA4","value":"cb7a8ab0-28ef-11e7-89e7-6d9e98749006-asp.net.svg","url":"https://cdn.cosmicjs.com/cb7a8ab0-28ef-11e7-89e7-6d9e98749006-asp.net.svg","imgix_url":"https://imgix.cosmicjs.com/cb7a8ab0-28ef-11e7-89e7-6d9e98749006-asp.net.svg"},{"children":null,"type":"html-textarea","title":"Blurb","key":"blurb","id":"ZlrWRpdkMV","value":"<p>Cosmic is the best CMS for ASP.net websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>"},{"children":null,"type":"text","title":"Headline","key":"headline","id":"vKv0f2OU6D","value":"ASP.net"},{"children":null,"type":"text","title":"SEO Description","key":"seo_description","id":"SqiIzi0nhU","value":"Cosmic is the best CMS for ASP.net websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators."},{"children":null,"type":"file","title":"Twitter Card Image","key":"twitter_card_image","id":"Td4RXWs9Qu","value":"37f46260-2acb-11e7-ae54-e9a1fc58ec22-asp.net.jpg","url":"https://cdn.cosmicjs.com/37f46260-2acb-11e7-ae54-e9a1fc58ec22-asp.net.jpg","imgix_url":"https://imgix.cosmicjs.com/37f46260-2acb-11e7-ae54-e9a1fc58ec22-asp.net.jpg"},{"children":null,"type":"html-textarea","title":"Code Example","key":"code_example","id":"iBAMNfEEFK","value":""},{"children":null,"type":"text","title":"SEO Title","key":"seo_title","id":"fwokhKF34Q","value":""},{"children":[],"type":"repeater","title":"Videos","key":"videos","id":"frgtgqfrpylludl8pnsi","value":"","repeater_fields":[{"title":"Title","key":"title","value":"","type":"text","required":false},{"title":"Link","key":"link","value":"","type":"text","required":false}]}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"kb-articles","created_at":"2017-04-24T13:13:47.601Z","created_by":"5357ef811693be2118000001","created":"2017-04-24T13:13:47.601Z","status":"published","modified_at":"2020-06-27T19:38:42.776Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-06-27T19:38:42.776Z","unpublish_at":null,"metadata":{"image":{"url":"https://cdn.cosmicjs.com/cb7a8ab0-28ef-11e7-89e7-6d9e98749006-asp.net.svg","imgix_url":"https://imgix.cosmicjs.com/cb7a8ab0-28ef-11e7-89e7-6d9e98749006-asp.net.svg"},"thumbnail":{"url":"https://cdn.cosmicjs.com/cb7a8ab0-28ef-11e7-89e7-6d9e98749006-asp.net.svg","imgix_url":"https://imgix.cosmicjs.com/cb7a8ab0-28ef-11e7-89e7-6d9e98749006-asp.net.svg"},"blurb":"<p>Cosmic is the best CMS for ASP.net websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.</p>","headline":"ASP.net","seo_description":"Cosmic is the best CMS for ASP.net websites and apps. As the new standard in digital content management, the Cosmic Headless CMS provides powerful API tools for developers and an intuitive admin dashboard for content creators.","twitter_card_image":{"url":"https://cdn.cosmicjs.com/37f46260-2acb-11e7-ae54-e9a1fc58ec22-asp.net.jpg","imgix_url":"https://imgix.cosmicjs.com/37f46260-2acb-11e7-ae54-e9a1fc58ec22-asp.net.jpg"},"code_example":"","seo_title":"","videos":[]}},{"_id":"5c2cf1cc472378384bf3f255","order":46,"slug":"developer-spotlight-john-leider-of-vuetify","title":"Developer Spotlight: John Leider of Vuetify","content":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with John Leider, the founder of <a href=\"https://vuetifyjs.com/enundefined\" rel=\"noopener noreferrer\" target=\"_blank\">Vuetify</a> who recently spoke at the Cosmic Vuetiful Holiday Meetup following his presentation at VueConf in Toronto. To see the slides from the Vuetiful Meetup Presentation, &quot;The Path to Vuetify 2.0&quot;, click <a href=\"https://slides.com/johnjleider/vuetify-2-1#/\" rel=\"noopener noreferrer\" target=\"_blank\">here</a>. Otherwise, follow John on <a href=\"https://twitter.com/zeroskillz\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://www.linkedin.com/in/john-leider-626183a2/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> or <a href=\"https://github.com/johnleider\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, and enjoy the Q/A.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/9413cf70-1392-11e9-abf3-81c633da85de-DuTbvdVVYAEayZk.jpg-large.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><strong>Cosmic: When did you first begin building software?<br></strong>John: I started programming in August of 2013.<br><br><strong>What is your preferred development stack?<br></strong>Naturally, Vue.js and Vuetify 😀<br><br><strong>What past projects are you most proud of and why?<br></strong>I was very proud of a Diablo site that I made with Vue1, and plan to remake it in 2019.<br><br><strong>What are your biggest challenges in building the Vuetify platform?<br></strong>The biggest challenge with Vuetify is that OSS is hard, and the supply does not always meet the demand. This has the side-effect of forcing us to be very efficient and work harder to come up with more intuitive ways to fund the project&#39;s development.<br><br><strong>What are some technologies you are excited about or want to learn more about?<br></strong>I&#39;m really big into tooling. I love making it easier to do common things and translate that knowledge to projects I&#39;m responsible for. One thing I want to learn more about is Service Workers.<br><br>The Cosmic Spotlight Series is dedicated to showcasing developers that are building apps using modern tools. Learn how to <a href=\"https://www.cosmicjs.com/contribute\" rel=\"noopener noreferrer\" target=\"_blank\">Contribute here</a>. To stay connected with us <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">join the conversation on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with John Leider, the founder of Vuetify who recently spoke at the Cosmic Vuetiful Holiday Meetup following his presentation at VueConf in Toronto. To see the slides from the Vuetiful Meetup Presentation &quot;The Path to Vuetify 2.0&quot;, you can click <a href=\"https://slides.com/johnjleider/vuetify-2-1#/\" rel=\"noopener noreferrer\" target=\"_blank\">here</a>. Otherwise, follow John on <a href=\"https://twitter.com/zeroskillz\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://www.linkedin.com/in/john-leider-626183a2/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> or <a href=\"https://github.com/johnleider\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, and enjoy the Q/A.</p>"},{"value":"0e85fb60-0eb2-11e9-9980-dd54a91eb8ce-IL1Ytuzu_400x400.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0e85fb60-0eb2-11e9-9980-dd54a91eb8ce-IL1Ytuzu_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0e85fb60-0eb2-11e9-9980-dd54a91eb8ce-IL1Ytuzu_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2019-01-02T17:15:56.591Z","created_by":"5716b504e9c686d006000073","created":"2019-01-02T17:15:56.591Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-01-08T23:16:29.457Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with John Leider, the founder of Vuetify who recently spoke at the Cosmic Vuetiful Holiday Meetup following his presentation at VueConf in Toronto. To see the slides from the Vuetiful Meetup Presentation &quot;The Path to Vuetify 2.0&quot;, you can click <a href=\"https://slides.com/johnjleider/vuetify-2-1#/\" rel=\"noopener noreferrer\" target=\"_blank\">here</a>. Otherwise, follow John on <a href=\"https://twitter.com/zeroskillz\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://www.linkedin.com/in/john-leider-626183a2/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> or <a href=\"https://github.com/johnleider\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, and enjoy the Q/A.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/0e85fb60-0eb2-11e9-9980-dd54a91eb8ce-IL1Ytuzu_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/0e85fb60-0eb2-11e9-9980-dd54a91eb8ce-IL1Ytuzu_400x400.jpg"}}},{"_id":"5c2d5008137cf238591db888","order":47,"slug":"extensions-feature-update","title":"Extensions Feature Update","content":"<p><a href=\"https://www.cosmicjs.com/extensions/\">Extensions</a> are a powerful component of Cosmic that allow you to create custom views in your Bucket Dashboard. We&#39;ve recently made some updates to make using this feature even better.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/6216a1d0-0ee9-11e9-94c7-15b9317b85c0-1546473113418.jpg\" style=\"width: 100%;\" class=\"fr-dib\"></p><p style=\"text-align: center;\"><em>New Extension edit view</em></p><p><strong>Extension Edit View</strong><br>You can now edit your Extension information such as Title, Sidenav icon, as well as add query parameters.<br><br><strong>Query Parameters</strong><br>Extensions are a great way to leverage powerful third party API services in your Cosmic Bucket. When you do connect to these services, however, you usually need some sort of API keys to access this content.</p><p>Until now, adding these keys to your Bucket was usually done in a makeshift way of adding a new Object Type such as &quot;Analytics&quot; and adding an Object to store your keys. This was an ok temporary solution, but definitely needed to change.</p><p>You can now add query parameters directly to your Extension in the Extension edit view which will be added to the Extension iframe query string.<br><br><strong>Extension Starter</strong><br>If you need an easy place to get started building your own Extensions, we now have an <a href=\"https://github.com/cosmicjs/extension-starter\" rel=\"noopener noreferrer\" target=\"_blank\">Extension Starter</a> available for download. If you would like more information on what you can build with Extensions, <a href=\"https://www.cosmicjs.com/docs/extensions\" rel=\"noopener noreferrer\" target=\"_blank\">check out the documentation page</a>.</p><p>I hope you enjoy these updates to Cosmic Extensions to help you build amazing custom experiences in your Bucket Dashboard. I&#39;m looking forward to seeing what you build!</p><p>If you have any questions, feel free to <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and in <a href=\"https://www.cosmicjs.com/community\">our Slack community channel</a>.</p><p>Photo by <a href=\"https://unsplash.com/photos/5qAnYQzZ2Fk?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Fausto Garc&iacute;a</a> on <a href=\"https://unsplash.com/?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Unsplash</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p><a href=\"https://www.cosmicjs.com/extensions/\">Extensions</a> are a powerful component of the Cosmic that allow you to create custom views in your Bucket Dashboard. We&#39;ve recently made some updates to make using this feature even better.</p>"},{"value":"611249d0-0eec-11e9-9037-9f98d83e8470-5qAnYQzZ2Fk.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/611249d0-0eec-11e9-9037-9f98d83e8470-5qAnYQzZ2Fk.jpg","imgix_url":"https://imgix.cosmicjs.com/611249d0-0eec-11e9-9037-9f98d83e8470-5qAnYQzZ2Fk.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2019-01-02T23:58:00.005Z","created_by":"5357ef811693be2118000001","created":"2019-01-02T23:58:00.005Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-01-03T00:22:10.979Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p><a href=\"https://www.cosmicjs.com/extensions/\">Extensions</a> are a powerful component of the Cosmic that allow you to create custom views in your Bucket Dashboard. We&#39;ve recently made some updates to make using this feature even better.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/611249d0-0eec-11e9-9037-9f98d83e8470-5qAnYQzZ2Fk.jpg","imgix_url":"https://imgix.cosmicjs.com/611249d0-0eec-11e9-9037-9f98d83e8470-5qAnYQzZ2Fk.jpg"}}},{"_id":"5c212d68dc2bf3440b278cb3","order":48,"slug":"developer-spotlight-diego-perez","title":"Developer Spotlight: Diego Perez","content":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with <a href=\"https://www.cosmicjs.com/imaka\" rel=\"noopener noreferrer\" target=\"_blank\">Diego Perez</a>, a Demandware / Software Developer residing in Spain who recently submitted the new <a href=\"https://www.cosmicjs.com/apps/angular-company-website\" rel=\"noopener noreferrer\" target=\"_blank\">Angular Company Website</a> in the Cosmic Community. Follow Diego on <a href=\"https://twitter.com/i_maka\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://www.linkedin.com/in/dperezmartinez/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> or <a href=\"https://github.com/imaka\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, and enjoy the Q/A.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/7e462160-07ae-11e9-85f6-838db3e54dd2-0.jpg\" style=\"width: 50%; float: left; margin-right: 20px;\" class=\"fr-fic fr-fil fr-dii\"></p><p><strong>How long have you been building software and how did you get started?<br></strong>I&#39;ve been into the software business since 2006. I never graduated from the university, but I met some great people there and started working with them for a\r\nvery small startup, building software and websites for SMEs using .NET Framework.<br><br><strong>What is your preferred development stack?<br></strong>I think every stack has a different purpose, but if I have to choose one, I would go for MEAN. The Angular team is doing a great job and Express/Node is the straightforward solution for someone\r\nlike me, I barely code in anything different than JavaScript nowadays.<br><br><strong>What past projects are you most proud of and why?<br></strong>My friends from university and I used to allocate some time in that startup to investigate and test things we couldn&#39;t use in official projects. I am proud to say that, before facebook\r\nor twitter, we developed some sort of social network where people could share pictures, music or thoughts... We never got traction to get anywhere, but it was a really intense and rewarding exercise.<br><br><strong>Talk a little bit more about your process for building apps. What are your biggest challenges and opportunities?<br></strong>I always start planning, finding use cases, etc. But I can&#39;t help it, I always start coding way too soon, so I end\r\nup doing several iterations trying to find a balance between a more practical or modular code. Best designed apps are easy to read and maintain, and that&#39;s my goal.<br><br><strong>What are some technologies you are excited about that you are using today, or want to learn more about?<br></strong>I want to get into desktop apps, so Ionic and Electron are in my radar at the moment. I would also like to play a little bit around\r\nwith Tensorflow.js; I used Tensorflow before but never on the web, and I&#39;d like to give it a try.<br><br>The Cosmic Spotlight Series is dedicated to showcasing developers that are building apps using modern tools. Learn how to <a href=\"https://www.cosmicjs.com/contribute\" rel=\"noopener noreferrer\" target=\"_blank\">Contribute here</a>. To stay connected with us <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">join the conversation on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with <a href=\"https://www.cosmicjs.com/imaka\" rel=\"noopener noreferrer\" target=\"_blank\">Diego Perez</a>, a Demandware / Software Developer residing in Spain who recently submitted the new <a href=\"https://www.cosmicjs.com/apps/angular-company-website\" rel=\"noopener noreferrer\" target=\"_blank\">Angular Company Website</a> in the Cosmic Community. Follow Diego on <a href=\"https://twitter.com/i_maka\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://www.linkedin.com/in/dperezmartinez/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> or <a href=\"https://github.com/imaka\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, and enjoy the Q/A.</p>"},{"value":"798516e0-07ae-11e9-85f6-838db3e54dd2-0.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/798516e0-07ae-11e9-85f6-838db3e54dd2-0.jpg","imgix_url":"https://imgix.cosmicjs.com/798516e0-07ae-11e9-85f6-838db3e54dd2-0.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-12-24T19:03:04.958Z","created_by":"5716b504e9c686d006000073","created":"2018-12-24T19:03:04.958Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2019-01-03T00:38:39.203Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with <a href=\"https://www.cosmicjs.com/imaka\" rel=\"noopener noreferrer\" target=\"_blank\">Diego Perez</a>, a Demandware / Software Developer residing in Spain who recently submitted the new <a href=\"https://www.cosmicjs.com/apps/angular-company-website\" rel=\"noopener noreferrer\" target=\"_blank\">Angular Company Website</a> in the Cosmic Community. Follow Diego on <a href=\"https://twitter.com/i_maka\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://www.linkedin.com/in/dperezmartinez/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> or <a href=\"https://github.com/imaka\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, and enjoy the Q/A.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/798516e0-07ae-11e9-85f6-838db3e54dd2-0.jpg","imgix_url":"https://imgix.cosmicjs.com/798516e0-07ae-11e9-85f6-838db3e54dd2-0.jpg"}}},{"_id":"5bfc741cacd4a151bd8b4905","order":49,"slug":"new-feature-activity-reports","title":"New Feature: Activity Reports","content":"<p>We&#39;re excited to roll out Activity Reports, a feature that helps you keep track of team member activity within your Bucket.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/a496bc70-f1ca-11e8-9231-9b47e8f95b7e-activity.gif\" style=\"width: 100%;\" data-action=\"zoom\" class=\"fr-fic fr-dib\"></p><p style=\"text-align: center;\"><span style=\"font-size: 12px;\">Click image to zoom</span></p><p><strong>To find Activity Reports:</strong><br>1. <a href=\"https://www.cosmicjs.com/login\" rel=\"noopener noreferrer\" target=\"_blank\">Login to Cosmic</a><br>2. Choose a new or existing Bucket<br>3. In the left sidenav of your Bucket Dashboard click the link under Settings &gt; Activity</p><p><br></p><p>With Activity Reports, you can keep track of all activity within your Bucket, as well as filter by team members to see individual activity. Filter by date range, click through to revisions, and even download a CSV to save for later auditing. This feature is only available for admin level team members.</p><p>We hope you enjoy this new feature to help your team collaborate more effectively on your digital projects using Cosmic. If you have any questions, feel free to <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and in <a href=\"https://www.cosmicjs.com/community\">our Slack community channel</a>.</p><p>Photo by <a href=\"https://unsplash.com/photos/NFs6dRTBgaM?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Ferdinand St&ouml;hr</a> on <a href=\"https://unsplash.com/search/photos/design-blue-wall?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Unsplash</a></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>With Activity Reports, you can keep track of all activity within your Bucket, as well as filter by team members to see individual activity. Filter by date range, click through to revisions, and even download a CSV to save for later auditing.</p>"},{"value":"bbe51dd0-f1cb-11e8-a8f5-49a98284373c-photo-1476445704028-a36e0c798192.jpeg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/bbe51dd0-f1cb-11e8-a8f5-49a98284373c-photo-1476445704028-a36e0c798192.jpeg","imgix_url":"https://imgix.cosmicjs.com/bbe51dd0-f1cb-11e8-a8f5-49a98284373c-photo-1476445704028-a36e0c798192.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-11-26T22:30:52.449Z","created_by":"5357ef811693be2118000001","created":"2018-11-26T22:30:52.449Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-11-27T15:50:38.394Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>With Activity Reports, you can keep track of all activity within your Bucket, as well as filter by team members to see individual activity. Filter by date range, click through to revisions, and even download a CSV to save for later auditing.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/bbe51dd0-f1cb-11e8-a8f5-49a98284373c-photo-1476445704028-a36e0c798192.jpeg","imgix_url":"https://imgix.cosmicjs.com/bbe51dd0-f1cb-11e8-a8f5-49a98284373c-photo-1476445704028-a36e0c798192.jpeg"}}},{"_id":"5bf828870305cf0d7f6b70d6","order":50,"slug":"developer-spotlight-owen-liversidge-with-tripwire-interactive","title":"Developer Spotlight: Owen Liversidge with Tripwire Interactive","content":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Owen Liversidge, a Web Developer residing in Atlanta, Georgia who&#39;s currently helping lead the development charge at renowned game development company <a href=\"https://www.tripwireinteractive.com/#/\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a>. Owen just launched Tripwire&#39;s new corporate website using a React and Cosmic-powered stack. Follow Owen on <a href=\"https://www.linkedin.com/in/owen-liversidge-39137470/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> or <a href=\"https://github.com/vertigojones\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, and enjoy the Q/A.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/eaac4ef0-ef3b-11e8-9a39-a5b33ea47754-0.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><strong>Cosmic: You just started coding within the last calendar year, right?&nbsp;</strong><br>Owen: Yes, I graduated back in April. My bootcamp of choice was <a href=\"https://generalassemb.ly/locations/atlanta\" rel=\"noopener noreferrer\" target=\"_blank\">General Assembly</a> in Atlanta, graduating in the Web Development Immersive. It was an insane three months, but I learned the tools needed to start building websites. Before that I was a music teacher for fifteen years, which ironically was gradually destroyed by my current chosen field - the internet. More and more budding musicians were turning to free online resources to learn how to play their instruments, so I decided to go back to my early roots in design and advertising (way before I took up music as a profession). I&#39;m happy that I made the switch - web development is fun, challenging, and a good workout for both sides of the brain.<br><br></p><p><strong>What is your preferred development stack / tools?</strong><br>On the front end I work primarily with React. I have dabbled a little with Gatsby, but I don&#39;t really have the need yet to start using GraphQL (although it is very interesting). On the back end I use Node and Express, which connects nicely with Cosmic - being able to edit all of my content using the Cosmic Dashboard allows me to keep my code very light on the server side. The only other framework that I have built apps with is Ruby On Rails. Before using Cosmic I was building databases with both PostgreSQL and Mongo DB, but I needed something for Tripwire that anyone could maintain, not just software engineers.</p><p data-empty=\"true\"><br></p><p><strong>Talk about working in a game dev company. What types of projects are you tasked with?&nbsp;</strong><br>Working for a game development company is very fun and very loose. As I am the sole web developer here, I&#39;m not really part of a web dev team but instead work closely with the marketing team. &nbsp;When I started here my first main task was to completely replace the previous company website, which had been built using Umbraco. Other than that we have landing pages for every single game published by Tripwire, plus microsites for seasonal updates and promotions. So I stay busy!</p><p data-empty=\"true\"><br></p><p><strong>What tools and technologies are you excited to explore in the near future?</strong><br>As I mentioned before, I&#39;d love to dive into GraphQL, and will probably look into the <a href=\"https://advancedreact.com\" rel=\"noopener noreferrer\" target=\"_blank\">new course</a> that Wes Bos has recently created. I&#39;m also interested in getting a proper workout with Gatsby, which is a framework incorporating both React and GraphQL. But really, as someone that is still new to web development, my biggest aim is to get better and more versatile with the technologies that I already use.</p><p data-empty=\"true\"><br></p><p><strong>You just launched Tripwire&#39;s new website, your first app ever. How did you get started?</strong><br>Having no one at Tripwire to act as a mentor, my first task was to become a master at Google! Being a bootcamp graduate showed me the basics, but there was still so much to learn before I could build my first production app. Knowing how to do research on my own was a huge undertaking, and I probably spent most of my first month just gathering up information. After that it was mostly trial and error - seeing what worked and what didn&#39;t. The biggest challenge was figuring out how to implement a database. Everything I had built before used seeds from within the app itself, and although I had experience connecting to third party API&#39;s, I hadn&#39;t yet incorporated a headless CMS.&nbsp;</p><p>Thankfully, I discovered Cosmic, which took care of everything seamlessly. They have great online resources, and I was even able to reference some code to help me build my app much quicker than by myself - this was the closest thing I had to an actual mentor all along! And because the web dashboard is so easy to use, I didn&#39;t really have to train anyone up on how to use it. After my database was set up, things fell into place a lot easier. My background in design has really helped me with styling, so most of my challenges are with coding itself. But I believe that being thrown into the deep end for my first professional project taught me a lot about how to be resourceful. I did have a few &quot;phone a friend&quot; moments along the way, and would like to thank both James Royals and Selo for their time and patience.</p><h4><br></h4><h4>Case Studies</h4><p><a href=\"https://www.cosmicjs.com/case-studies/tripwire-interactive-builds-a-react-corporate-website\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive Builds a React Corporate Website</a><br><a href=\"https://www.cosmicjs.com/case-studies/killing-floor-2-launches-twisted-christmas-seasons-beatings\" rel=\"noopener noreferrer\" target=\"_blank\">Killing Floor 2 Launches Twisted Christmas</a><br><a href=\"https://www.cosmicjs.com/case-studies/road-redemption-launches-a-marketing-microsite\" rel=\"noopener noreferrer\" target=\"_blank\">Road Redemption Launches a Marketing Microsite</a></p><p>The Cosmic Spotlight Series is dedicated to showcasing developers that are building apps using modern tools. Learn how to <a href=\"https://www.cosmicjs.com/contribute\" rel=\"noopener noreferrer\" target=\"_blank\">Contribute here</a>. To stay connected with us <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">join the conversation on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Owen Liversidge, a Web Developer residing in Atlanta, Georgia who&#39;s currently helping lead the development charge at renowned game development company <a href=\"https://www.tripwireinteractive.com/#/\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a>. Owen just built Tripwire&#39;s new corporate website on a React and Cosmic stack. Follow Owen on <a href=\"https://www.linkedin.com/in/owen-liversidge-39137470/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> or <a href=\"https://github.com/vertigojones\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, and enjoy the Q/A.</p>"},{"value":"eaac4ef0-ef3b-11e8-9a39-a5b33ea47754-0.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/eaac4ef0-ef3b-11e8-9a39-a5b33ea47754-0.jpg","imgix_url":"https://imgix.cosmicjs.com/eaac4ef0-ef3b-11e8-9a39-a5b33ea47754-0.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-11-23T16:19:19.870Z","created_by":"5716b504e9c686d006000073","created":"2018-11-23T16:19:19.870Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-11-26T16:43:37.547Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Owen Liversidge, a Web Developer residing in Atlanta, Georgia who&#39;s currently helping lead the development charge at renowned game development company <a href=\"https://www.tripwireinteractive.com/#/\" rel=\"noopener noreferrer\" target=\"_blank\">Tripwire Interactive</a>. Owen just built Tripwire&#39;s new corporate website on a React and Cosmic stack. Follow Owen on <a href=\"https://www.linkedin.com/in/owen-liversidge-39137470/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> or <a href=\"https://github.com/vertigojones\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, and enjoy the Q/A.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/eaac4ef0-ef3b-11e8-9a39-a5b33ea47754-0.jpg","imgix_url":"https://imgix.cosmicjs.com/eaac4ef0-ef3b-11e8-9a39-a5b33ea47754-0.jpg"}}},{"_id":"5be4c17ce6b8111e97553504","order":51,"slug":"product-update-media-management-search-and-filter","title":"Product Update: Media Management Search and Filter","content":"<p>We&#39;re excited to ship an enhancement to Media Management within Cosmic. Now when you Add Media from your Media Folder to the Content Editor or an Image Metafield, you&#39;ll be able to search by media name, metadata, as well as filter among media folders.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/d7563750-e3a9-11e8-b4f9-83bc88b91d18-PddYAGbobb.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>We hope you enjoy the new updates to media management. And that they make managing content in your Bucket even easier.&nbsp;</p><p>Photo by <a href=\"https://unsplash.com/photos/KZNTEn2r6tw?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Gem &amp; Lauris RK</a> on <a href=\"https://unsplash.com/search/photos/abstract?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Unsplash</a></p><p>If you have any questions or comments, <a href=\"https://www.cosmicjs.com/community\">join our Slack community</a> and <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>We&#39;re excited to ship an enhancement to Media Management within Cosmic. Now when you Add Media from your Media Folder to the Content Editor or an Image Metafield, you&#39;ll be able to search by media name, metadata, as well as filter among media folders.&nbsp;</p>"},{"value":"e8da5b90-e3aa-11e8-bb22-af373a2038ed-gem-lauris-rk-384958-unsplash.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e8da5b90-e3aa-11e8-bb22-af373a2038ed-gem-lauris-rk-384958-unsplash.jpg","imgix_url":"https://imgix.cosmicjs.com/e8da5b90-e3aa-11e8-bb22-af373a2038ed-gem-lauris-rk-384958-unsplash.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-11-08T23:06:36.235Z","created_by":"5716b504e9c686d006000073","created":"2018-11-08T23:06:36.235Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-11-09T14:56:08.303Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>We&#39;re excited to ship an enhancement to Media Management within Cosmic. Now when you Add Media from your Media Folder to the Content Editor or an Image Metafield, you&#39;ll be able to search by media name, metadata, as well as filter among media folders.&nbsp;</p>","featured_image":{"url":"https://cdn.cosmicjs.com/e8da5b90-e3aa-11e8-bb22-af373a2038ed-gem-lauris-rk-384958-unsplash.jpg","imgix_url":"https://imgix.cosmicjs.com/e8da5b90-e3aa-11e8-bb22-af373a2038ed-gem-lauris-rk-384958-unsplash.jpg"}}},{"_id":"5be076b1023fc2313a05213b","order":52,"slug":"revised-pricing-new-community-plan","title":"Revised Pricing, New Community Plan","content":"<p><img src=\"https://cosmic-s3.imgix.net/2b124940-e11d-11e8-9975-d3748b57b62d-plans.jpg?w=1600\" class=\"fr-fic fr-dii\"></p><p>We have revised the pricing for all Bucket and Cluster plans. Take a look at the <a href=\"https://www.cosmicjs.com/pricing\" rel=\"noopener noreferrer\" target=\"_blank\">pricing page</a> to see the new, simplified pricing including a new Community Plan that gives you a Free Personal Bucket forever.<br><br><strong>A few things to note:</strong><br>1. If you are a current customer on an existing plan, your plan rate will not change.<br>2. If you were thinking about upgrading your plan and notice your desired plan has increased, <a href=\"mailto:support@cosmicjs.com\">reach out to support</a> for a coupon code to be grandfathered into the previous rate for your selected plan. <strong>The coupon &nbsp;will expire Friday, November 9, 2018</strong>.<br>3. If you don&#39;t want to pay anything, that&#39;s fine too! You can get a Free Personal Bucket forever with the Community Plan.<br><br><strong>Community Plan</strong><br>We now have a Community Plan that rewards you for contributing educational resources and open source code to<a href=\"https://www.cosmicjs.com/community\">&nbsp;the Cosmic community</a>.</p><p>I&#39;m sure you&#39;ve seen other companies offer a Community plan that requires you to add their logo attribution wherever you are using their service. But we wanted to go a different route to better serve our community.</p><p>When you contribute <a href=\"https://www.cosmicjs.com/apps\">Apps</a>, <a href=\"https://www.cosmicjs.com/extensions\">Extensions</a>, <a href=\"https://www.cosmicjs.com/articles\">Learning Center Articles</a>, <a href=\"https://www.cosmicjs.com/docs/functions\">Functions</a> or <a href=\"https://github.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">open source code</a>, you will get a Free Personal Bucket forever plus dev swag goodies, and the opportunity to join Cosmic in a paid developer role (<a href=\"https://www.cosmicjs.com/jobs\">We&#39;re always looking for talented people</a>!)</p><p><a href=\"https://www.cosmicjs.com/contribute\">Click here to become a contributor &raquo;</a></p><p>Our mission is to help modern, digital teams build amazing products together. If you have any questions or comments, <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\">join our Slack channel</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>We have revised the pricing for all Bucket and Cluster plans. Take a look at the <a href=\"https://www.cosmicjs.com/pricing\" rel=\"noopener noreferrer\" target=\"_blank\">pricing page</a> to see the new, simplified pricing including a new Community Plan that gives you a Free Personal Bucket forever.</p>"},{"value":"2b124940-e11d-11e8-9975-d3748b57b62d-plans.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2b124940-e11d-11e8-9975-d3748b57b62d-plans.jpg","imgix_url":"https://imgix.cosmicjs.com/2b124940-e11d-11e8-9975-d3748b57b62d-plans.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-11-05T16:58:25.243Z","created_by":"5357ef811693be2118000001","created":"2018-11-05T16:58:25.243Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-11-05T17:19:42.486Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We have revised the pricing for all Bucket and Cluster plans. Take a look at the <a href=\"https://www.cosmicjs.com/pricing\" rel=\"noopener noreferrer\" target=\"_blank\">pricing page</a> to see the new, simplified pricing including a new Community Plan that gives you a Free Personal Bucket forever.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/2b124940-e11d-11e8-9975-d3748b57b62d-plans.jpg","imgix_url":"https://imgix.cosmicjs.com/2b124940-e11d-11e8-9975-d3748b57b62d-plans.jpg"}}},{"_id":"5bbb608b0d0468118ea1e36d","order":53,"slug":"json-metafield-now-available","title":"JSON Metafield Now Available","content":"<p><img src=\"https://cosmic-s3.imgix.net/91d15b70-cb02-11e8-9001-13182418d138-tools-for-motivation-290346-unsplash.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br>Cosmic is on a mission to provide your team with flexible solutions to store content for websites and apps. Until now, to store plain data, the only option was to use a Plain Text Metafield and store the data as a string. &nbsp;This was not ideal for storing raw data or retrieving data, especially if it&#39;s not intended to be a string. So we&#39;re excited to introduce a new Metafield to give you even more flexibility to store raw application data.</p><p>Using the new JSON Metafield, you can now store any valid JSON data. This gives you great flexibility to store any data type: <em>String</em>, <em>Boolean</em>, <em>Array</em>, <em>Objects</em> as well as creating nested data models.<br><br><strong>Using the JSON Metafield in the Dashboard</strong><br><br><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/cb1d7130-ca57-11e8-b3d8-9321f2710832-json.gif\" class=\"fr-fic fr-dii\"></p><p><br></p><p><strong>Storing JSON data using the Cosmic NPM Module</strong></p><div class=\"fr-embedly      \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/407091c710984ab01b966206eab01af3#file-index-html' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/407091c710984ab01b966206eab01af3#file-index-html\" class=\"embedly-card\"></a></div><p>We hope you enjoy the new JSON Metafield to provide you even more flexibility for storing application data for your Cosmic-powered applications.</p><p>If you have any questions or comments, <a href=\"https://www.cosmicjs.com/community\">join our Slack community</a> and <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a>.</p><p>Photo by <a href=\"https://unsplash.com/photos/cmR92mJs40w?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Tools For Motivation</a> on <a href=\"https://unsplash.com/search/photos/space?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Unsplash</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>We hope you enjoy the new JSON Metafield to provide you even more flexibility for storing application data for your Cosmic-powered applications.</p>"},{"value":"91d15b70-cb02-11e8-9001-13182418d138-tools-for-motivation-290346-unsplash.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/91d15b70-cb02-11e8-9001-13182418d138-tools-for-motivation-290346-unsplash.jpg","imgix_url":"https://imgix.cosmicjs.com/91d15b70-cb02-11e8-9001-13182418d138-tools-for-motivation-290346-unsplash.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-10-08T13:50:03.955Z","created_by":"5357ef811693be2118000001","created":"2018-10-08T13:50:03.955Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-10-09T13:56:21.664Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We hope you enjoy the new JSON Metafield to provide you even more flexibility for storing application data for your Cosmic-powered applications.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/91d15b70-cb02-11e8-9001-13182418d138-tools-for-motivation-290346-unsplash.jpg","imgix_url":"https://imgix.cosmicjs.com/91d15b70-cb02-11e8-9001-13182418d138-tools-for-motivation-290346-unsplash.jpg"}}},{"_id":"5b96c18bbe0f5f13bec4cdb9","order":54,"slug":"introducing-cosmic-functions","title":"Introducing Cosmic Functions","content":"<p><img src=\"https://cosmic-s3.imgix.net/faab88f0-b388-11e8-96e8-114e9cd03aa5-cosmic-lambda-functions.jpg\" class=\"fr-fic fr-dii\"></p><p>We&#39;re excited to release Cosmic Functions (public beta) to help teams build amazing modern products together with new serverless solutions.</p><p><a href=\"https://www.cosmicjs.com/docs/functions\" rel=\"noopener noreferrer\" target=\"_blank\">Click here to go directly to the Cosmic Functions documentation &gt;&gt;</a></p><p><br><strong>What are serverless functions?</strong><br>Serverless function development is rapidly growing in popularity. And it&#39;s no surprise. With serverless, you don&#39;t have to manage server infrastructure, you get infinite scalability, and you never have to pay for idle server time like with AWS EC2, Digital Ocean Droplets, etc. You only pay for code executions.&nbsp;</p><p>We even <a href=\"https://serverless.com/blog/build-and-deploy-a-serverless-nodejs-app-powered-by-cosmic-js/\" rel=\"noopener noreferrer\" target=\"_blank\">wrote an article</a> about the advantages of serverless development and offer a <a href=\"https://github.com/cosmicjs/serverless-starter\" rel=\"noopener noreferrer\" target=\"_blank\">Serverless Starter App</a> for teams that want to get familiar with this new technology.</p><p>Along with our best-in-class headless CMS and application development tools, adding serverless solutions helps further our mission to help teams build modern apps faster. &nbsp;We think that you&#39;ll find Cosmic Functions to be the most delightful way to deploy serverless functions, right from the comfort of your Cosmic Bucket.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/260b3e70-b512-11e8-82d1-2bed548b6ce8-functions-demo.gif\" class=\"fr-fic fr-dii\"></p><p style=\"text-align: center;\"><em>Find Cosmic Functions in Your Bucket &gt; Settings &gt; Functions</em></p><p><br><strong>What are Cosmic Functions?</strong><br><a href=\"https://www.cosmicjs.com/docs/functions\">Cosmic Functions</a> allow you to deploy AWS Lambda functions (currently Node.js v8.10) without having to manage server infrastructure. &nbsp;You can deploy your functions to AWS through your Bucket Dashboard located at <em>Your Bucket &gt; Settings &gt; Functions</em>.&nbsp;</p><p>AWS Lambda functions are infinitely scalable, highly cost effective, and you get 1M requests per month free. &nbsp;<strong>Using&nbsp;</strong><strong>Cosmic to deploy your functions is 100% free</strong>. &nbsp;Cosmic does not charge you to deploy your AWS Lambda functions. &nbsp;All analytics and billing is connected to your AWS account.<br><br><strong>What&#39;s required?</strong><br>1. Your AWS access key and secret key<br>2. Node.js codebase (zip or link to git repo) that follows Lambda requirements. (If you&#39;ve linked your Cosmic account to your GitHub account, you can deploy private GitHub repos as well as public repos).</p><p><br><strong>Getting Started</strong><br>To get started deploying your own Functions go to <em>Your Bucket &gt; Settings &gt; Functions</em>. &nbsp;For more information, go to the <a href=\"https://www.cosmicjs.com/docs/functions\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Functions documentation</a>.</p><p><br></p><p>It&#39;s our hope that Cosmic Functions help you deploy code fast and efficiently, helping your team build great products. We&#39;re excited to see what you build and please let use know if you have any questions or would like to <a href=\"https://www.cosmicjs.com/schedule-demo\" rel=\"noopener noreferrer\" target=\"_blank\">schedule a demo</a>.</p><p>You can also <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">join the conversation on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>We&#39;re excited to release Cosmic Functions (public beta) to help teams build amazing modern products together with new serverless solutions.</p>"},{"value":"1db09e30-b52d-11e8-a872-d9db9fcff0a8-cosmic-lambda-functions.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/1db09e30-b52d-11e8-a872-d9db9fcff0a8-cosmic-lambda-functions.jpg","imgix_url":"https://imgix.cosmicjs.com/1db09e30-b52d-11e8-a872-d9db9fcff0a8-cosmic-lambda-functions.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-09-11T19:10:03.455Z","created_by":"5357ef811693be2118000001","created":"2018-09-11T19:10:03.455Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-09-11T13:50:07.192Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We&#39;re excited to release Cosmic Functions (public beta) to help teams build amazing modern products together with new serverless solutions.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/1db09e30-b52d-11e8-a872-d9db9fcff0a8-cosmic-lambda-functions.jpg","imgix_url":"https://imgix.cosmicjs.com/1db09e30-b52d-11e8-a872-d9db9fcff0a8-cosmic-lambda-functions.jpg"}}},{"_id":"5b966f966c2dbd0f3c8016f0","order":55,"slug":"developer-spotlight-chris-schwab-with-life-is-good","title":"Developer Spotlight: Chris Schwab with Life is Good","content":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Chris Schwab, a Front End Engineer residing in Boston who&#39;s currently helping lead the development charge at positivity-prone apparel brand <a href=\"https://www.lifeisgood.com\" rel=\"noopener noreferrer\" target=\"_blank\">Life is Good</a>. Chris and his team at Life is Good have been using the Cosmic API to manage user-generated-content for their positivity campaigns (now in their second consecutive year). Follow Chris on <a href=\"https://www.linkedin.com/in/christopherschwab/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> or <a href=\"https://twitter.com/cschwab24\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, and enjoy the Q/A.</p><h3>TL;DR:</h3><p><a href=\"https://www.cosmicjs.com/case-studies/life-is-good-shares-gratitude\" rel=\"noopener noreferrer\" target=\"_blank\">Life is Good Case Study&nbsp;</a>&nbsp;<br><a href=\"https://content.lifeisgood.com/one-positive- thought/?utm_source=cosmicjs.com&utm_medium=referral&utm_campaign=onepositivethought\" rel=\"noopener noreferrer\" target=\"_blank\">Positive Thinking Day</a></p><p><img src=\"https://cosmic-s3.imgix.net/ef41c910-b505-11e8-a872-d9db9fcff0a8-IMG_3240.jpg?w=1500\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><strong>How long have you been building software and how did you get started?</strong><br>I went to business school and didn&rsquo;t become interested in coding until a junior year marketing internship in which the start-up I was helping out needed to build a web presence. I took up the challenge and built them a basic Wix HTML site. That\r\nreally sparked my interest and I decided to pursue an IT minor. This opened up a few doors and another internship as a junior developer with Saltwater Creative Agency. The internship turned into a job offer and this is where I really learned how to code,\r\nmanage web projects, and be a part of a nimble digital marketing team. I&rsquo;m grateful for the path I took, as I believe the best way to become a developer is through working on real projects versus in the classroom. Great mentors help too, and I&rsquo;m\r\nlucky to have had a few of those during my journey.</p><p><br></p><p><strong>What is your preferred development stack?</strong><br>I&rsquo;m certainly not an expert at one particular technology, but I pride myself on having the ability to transfer skills and problem solve across a wide range of technologies. I started developing on the LAMP stack for custom websites and today I mostly\r\nwork in the Salesforce Commerce Cloud development environment. I also enjoy working on a good &lsquo;ol MERN stack React project.</p><p><br></p><p><strong>What past projects are you most proud of and why?</strong><br>Two single page application projects come to mind, because at the time, we were trailblazing with this new type of approach. One of them was simply using jQuery and AJAX to create an SPA which a bank displayed product information, specials and rates for\r\ncustomers to view on in-branch iPads instead of the traditional print materials. Another early SPA was my first React project in which I helped put together a robust tool for customizing, previewing and ordering a shed through a major home improvement\r\nstore. Users could customize and order online, or in-store with an associate on an iPad. One of the coolest parts of this project was owning the front end development and helping integrate with the back end web services of a major corporation. The technology\r\nwas the latest and greatest at the time and we had no experience with it, but sometimes it&rsquo;s best to be thrown into the fire and just figure it out. I worked with a great team and we successfully navigated the unknown.</p><p><br></p><div class=\"fr-embedly        \" data-original-embed=\"<a href='https://twitter.com/Lifeisgood/status/1036002006522114048' class='embedly-card'></a>\"><a href=\"https://twitter.com/Lifeisgood/status/1036002006522114048\" class=\"embedly-card\"></a></div><p><br></p><p><strong>Talk a little bit more about your process for building apps at Life is Good. Are they for external or internal audiences?</strong><br>We have a mix of internal and external applications at Life is Good. Most external apps are for ecommerce or brand building. Most internal apps are for monitoring business and technical KPI&rsquo;s. Cosmic has been a key technology for all of our applications\r\nthat collect user generated content. Abstracting the content collection, storage, moderation and distribution to a central source have allowed us to rapidly deploy brand building UGC apps without diverting too many resources from our primary ecommerce\r\ndevelopment needs.</p><p><br></p><p><strong>What are some technologies you are excited about that you are using today, or want to learn more about?</strong><br>As a front end developer who has some back end skills, but would like to become more full stack, I&rsquo;ve enjoyed working with Node and Python as much as possible. Luckily, being on a smaller tech team, I get the opportunity to work on projects outside\r\nof the boundaries of my role quite often and constantly expand my skill set. I&rsquo;m also interested in more exposure to data viz and voice, exploring blockchain and crypto, and the evolution of AR/VR.</p><p><br></p><p><strong>Tell us more about the recent Life is Good UGC Campaign Launch.</strong><br>After our first successful UGC campaign powered by Cosmic last November, the choice was obvious for how to approach our latest UGC campaign for Positive Thinking Day. We wanted to give people the ability to &ldquo;share one positive thought&rdquo; and post it as part of a unique community. The challenges were how to collect and store user content, moderate it, distribute it across multiple channels and do it as fast as possible with minimal custom development. We worked with Tony and Carson to choose the best Cosmic starting point project for our needs and architect a plan to achieve our goal of creating the hub of positive thoughts. Our design team put together some fantastic looking assets and I customized the <a href=\"https://www.cosmicjs.com/apps/sticky-notes\" rel=\"noopener noreferrer\" target=\"_blank\">React Sticky Notes</a> Cosmic starting point project and we were able to put together this application in days versus what could have taken weeks. Cosmic provided the scaffolding and plumbing, we just had to do the finish work to pretty it up and brand it. We were able to focus on what we do best while Comisc JS took care of the rest.</p><p><br></p><div class=\"fr-embedly      \" data-original-embed=\"<a href='https://twitter.com/cosmic_js/status/1037368888525287424' class='embedly-card'></a>\"><a href=\"https://twitter.com/cosmic_js/status/1037368888525287424\" class=\"embedly-card\"></a></div><p><br></p><p>The Cosmic Spotlight Series is dedicated to showcasing developers that are building apps using modern tools. To stay connected with us <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">join the conversation on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Chris Schwab, a Front End Engineer residing in Boston who&#39;s currently helping lead the development charge at positivity-prone apparel brand <a href=\"https://www.lifeisgood.com\" rel=\"noopener noreferrer\" target=\"_blank\">Life is Good</a>. Chris and his team at Life is Good have been using the Cosmic API to manage user-generated-content for their positivity campaigns (now in their second consecutive year). Follow Chris on <a href=\"https://www.linkedin.com/in/christopherschwab/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> or <a href=\"https://twitter.com/cschwab24\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, and enjoy the Q/A.</p>"},{"value":"0a972930-b506-11e8-a74e-0360eb996f20-IMG_3240.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0a972930-b506-11e8-a74e-0360eb996f20-IMG_3240.jpg","imgix_url":"https://imgix.cosmicjs.com/0a972930-b506-11e8-a74e-0360eb996f20-IMG_3240.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-09-10T13:20:22.356Z","created_by":"5716b504e9c686d006000073","created":"2018-09-10T13:20:22.356Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-09-10T14:47:32.535Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Chris Schwab, a Front End Engineer residing in Boston who&#39;s currently helping lead the development charge at positivity-prone apparel brand <a href=\"https://www.lifeisgood.com\" rel=\"noopener noreferrer\" target=\"_blank\">Life is Good</a>. Chris and his team at Life is Good have been using the Cosmic API to manage user-generated-content for their positivity campaigns (now in their second consecutive year). Follow Chris on <a href=\"https://www.linkedin.com/in/christopherschwab/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> or <a href=\"https://twitter.com/cschwab24\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, and enjoy the Q/A.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/0a972930-b506-11e8-a74e-0360eb996f20-IMG_3240.jpg","imgix_url":"https://imgix.cosmicjs.com/0a972930-b506-11e8-a74e-0360eb996f20-IMG_3240.jpg"}}},{"_id":"5b902a86cc3d87038d114b8a","order":56,"slug":"developer-spotlight-brandon-reid","title":"Developer Spotlight: Brandon Reid ","content":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Brandon Reid, a JavaScript developer residing in Dallas, Texas who&#39;s currently Lead Developer at <a href=\"https://simplemedia.co\" rel=\"noopener noreferrer\" target=\"_blank\">Simple Media</a>. Brandon recently launched a new React / Node website on Cosmic for <a href=\"https://thearnoldcos.com\" rel=\"noopener noreferrer\" target=\"_blank\">The Arnold Companies</a>, an energy and aviation client. Follow <a href=\"http://brandonreid.io/\" rel=\"noopener noreferrer\" target=\"_blank\">Brandon</a> on <a href=\"https://www.linkedin.com/in/brandon-reid/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> and <a href=\"https://github.com/bar0191\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, and enjoy the Q/A.</p><p><strong><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/3c65fae0-b14b-11e8-bd6f-4fc18dc9a940-my_photo.png\" style=\"width: 300px; float: left; margin-right: 20px; margin-bottom: 20px;\" class=\"fr-fic fr-dib\">Cosmic: How long have you been building software?<br></strong><strong>Brandon</strong>:\r\nPersonally, I used to create small C# scripts for a PC game I played back in high school, called Space Engineers (I know! How much more nerdier can it get right?) Professionally, I didn&rsquo;t start building production grade software until my sophomore\r\nyear during my Bachelor&#39;s degree at the University of North Texas. I was working as a research assistant at the time, back in 2015. So three years now, and I&rsquo;ve enjoyed every minute of it.</p><p data-empty=\"true\"><br></p><p dir=\"ltr\"><strong>What is your preferred development stack?</strong><br>I&rsquo;m on the JavaScript bandwagon. So, my go to has always been the CERN stack. Couchbase, Express, React, and Node. However, since working with Cosmic, I&rsquo;m going to have to switch out my &nbsp;backend preference: Couchbase for Cosmic. :wink:\r\nAs far as UI frameworks go, my go to has always been Material UI design. It&rsquo;s simple, elegant, and has a huge UI Kit for react that offers a ton of great components.&nbsp;</p><p data-empty=\"true\"><br></p><p dir=\"ltr\"><strong>What past projects are you most proud of and why?</strong><br>Hands down, one of my first production applications I ever built when I was a research assistant at The University of North Texas, working under Dr. Ram Dantu. His research lab built a mobile android application based on wearable technology, that could\r\nmonitor the quality of CPR being performed on patients in code blue emergencies. Essentially, a nurse would wear an android smartwatch synced with an android tablet that would monitor CPR movements/quality. The research was partnered with Texas Health\r\nPresbyterian at Frisco. My job was to implement an internal web application that could display live statistical data in the form of charts/histograms. The data included rates/min of pumps being performed during CPR, how many pumps/min, etc. I had to implement\r\na backend sync gateway between android devices and an internal server, working with a full stack. This project really made me feel like I was making a difference and an impact in the medical industry.</p><p data-empty=\"true\"><br></p><p dir=\"ltr\"><strong>Talk a little bit more about your process for building apps.&nbsp;</strong><br>Usually before I build an application I try to put together a few high level diagrams laying out important functionalities of the application, mostly in the form of interactive/sequence diagrams. Then I&rsquo;ll analyze what kind of global and reusable\r\ncomponents the applications will have. This helps me get a better picture of how data will flow throughout the application&rsquo;s component tree and what kind of data management I will need to implement. After that I&rsquo;ll implement some type of agile\r\nworkflow, work in development sprints, and try to get an MVP out to my clients. I like to be as transparent as possible with my clients, and include them in the agile process every step of the way. &nbsp;</p><p data-empty=\"true\"><br></p><p dir=\"ltr\"><strong>What are some technologies you are excited about that you are using today, or want to learn more about?</strong><br>Oh gosh that&rsquo;s a big list. There is so much cool stuff out there I&rsquo;ve been wanting to get into. I&rsquo;m really excited to work with some JavaScript libraries that offer 3D rendering capabilities like 3D.js. With modern browsers becoming\r\nmore powerful, I feel like we will see an increase in sites using 3D stuff. I&rsquo;m also excited about the use of AI for chatbots and other use cases, I&rsquo;ve been eager to get some time to spin up an AI server on Digital Ocean and play with it.\r\nAlso! React animation libraries. There are some really talented developers out there creating some cool animation stuff. Can&rsquo;t wait to get some time to play with those as well.&nbsp;</p><p data-empty=\"true\"><br></p><p dir=\"ltr\"><strong>You just finished building TAC, taking it from a WordPress installation to a modern API-first stack - what was that like?<br></strong>Building <a href=\"https://thearnoldcos.com\" rel=\"noopener noreferrer\" target=\"_blank\">TAC</a> was a blast! It couldn&rsquo;t have been smoother working in Cosmic to build out a super fast API backend. I was able to use Cosmic&rsquo;s React Starter kit and hit the ground running using an awesome boilerplate packed with NextJS and it&rsquo;s SSR capabilities. I never once had an issue with Cosmic and never had to contact support. That&rsquo;s how simple, easy, and elegant it is for a developer to get started on the platform. I love seeing this trend of larger companies finally getting off clunky systems like WordPress/Drupal and moving over to a more modern web stack. As a Full Stack Developer specializing in React/Node, I couldn&rsquo;t be more excited for the future of web development.&nbsp;</p><p data-empty=\"true\"><br></p><p dir=\"ltr\">TAC&rsquo;s backend is powered by Node, Next.js, and Express. Next.js is used for server side rendering capabilities for SEO optimization as well as site routing. Next.js also makes it easy to integrate with babel and webpack since they are built right\r\nin. I used Next.js routing API to rendering page templates for pages that have the same design layouts. &nbsp;TAC&rsquo;s frontend is powered by React.js and the world&#39;s most popular react UI framework, Material UI. In order to use Material UI with\r\nSSR, I had to wrap the site in a JSSProvider, and use CSSBaseline. For development I used Eslint as a linter for a cleaner and more consistent codebase. Since TAC uses ES6 javascript, I had to also implement a very small amount of polyfill to transpile\r\nES6 to ES5 in order for the site to work with IE11. Some notable node modules I used were: React-Image-Gallery for the image galleries across the site, React-Masonry-Component for the newsroom, and Fetch for API requests. For email services/API I used\r\nnodemailer and mailgun.&nbsp;</p><p dir=\"ltr\"><br></p><p data-empty=\"true\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/03d99ed0-b14a-11e8-90ff-4de0ce9f20ab-IMG_4405.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\"><br></p><p dir=\"ltr\">I started building the site by using Cosmic&rsquo;s React Starter Kit, which helped me get jump started right away. The beginning of building TAC started with implementing all globals for the site (Header, Footer, Favicon, etc). So I quickly created some\r\njavascript request functions to pull data from the cosmic buckets using Cosmic&rsquo;s Node API. I added those global components to the sites main _app layout, so every page would be wrapped and rendered with those globals. From there I analyzed what\r\npages would have reusable components across multiple pages or the site, and created component views for those pages based off my analysis. From there I was able to efficiently knock out page designs and implement object types in the cosmic bucket on the\r\nfly. As we got closer to site launch, I noticed the compatibility issues with IE11 and had to come up with a solution. At first, I was going to do a browser sniff in the code to display something that would work on IE. Instead I implemented Babel and\r\nsome polyfills to solve any compatibility issues.&nbsp;</p><p>The Cosmic Spotlight Series is dedicated to showcasing developers that are building apps using modern tools. To stay connected with us <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">join the conversation on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Brandon Reid, a JavaScript developer residing in Dallas, Texas who&#39;s currently Lead Developer at <a href=\"https://simplemedia.co\" rel=\"noopener noreferrer\" target=\"_blank\">Simple Media</a>. Brandon recently launched a new React / Node website on Cosmic for <a href=\"https://thearnoldcos.com\" rel=\"noopener noreferrer\" target=\"_blank\">The Arnold Companies</a>, an energy and aviation client. Follow <a href=\"http://brandonreid.io/\" rel=\"noopener noreferrer\" target=\"_blank\">Brandon</a> on <a href=\"https://www.linkedin.com/in/brandon-reid/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> and <a href=\"https://github.com/bar0191\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, and enjoy the Q/A.</p>"},{"value":"90c13ec0-b14a-11e8-bd6f-4fc18dc9a940-my_photo.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/90c13ec0-b14a-11e8-bd6f-4fc18dc9a940-my_photo.png","imgix_url":"https://imgix.cosmicjs.com/90c13ec0-b14a-11e8-bd6f-4fc18dc9a940-my_photo.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-09-05T19:12:06.242Z","created_by":"5716b504e9c686d006000073","created":"2018-09-05T19:12:06.242Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-09-05T20:59:30.439Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Brandon Reid, a JavaScript developer residing in Dallas, Texas who&#39;s currently Lead Developer at <a href=\"https://simplemedia.co\" rel=\"noopener noreferrer\" target=\"_blank\">Simple Media</a>. Brandon recently launched a new React / Node website on Cosmic for <a href=\"https://thearnoldcos.com\" rel=\"noopener noreferrer\" target=\"_blank\">The Arnold Companies</a>, an energy and aviation client. Follow <a href=\"http://brandonreid.io/\" rel=\"noopener noreferrer\" target=\"_blank\">Brandon</a> on <a href=\"https://www.linkedin.com/in/brandon-reid/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> and <a href=\"https://github.com/bar0191\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, and enjoy the Q/A.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/90c13ec0-b14a-11e8-bd6f-4fc18dc9a940-my_photo.png","imgix_url":"https://imgix.cosmicjs.com/90c13ec0-b14a-11e8-bd6f-4fc18dc9a940-my_photo.png"}}},{"_id":"5b7ada9ea3ec1e74082b88c7","order":57,"slug":"developer-spotlight-brandy-morgan","title":"Developer Spotlight: Brandy Morgan ","content":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with <a href=\"https://www.instagram.com/msbrandymorgan/\" rel=\"noopener noreferrer\" target=\"_blank\">Brandy Morgan</a>, a JavaScript developer residing in sunny Florida who&#39;s currently spearheading her startup <a href=\"https://www.creatorscode.co\" rel=\"noopener noreferrer\" target=\"_blank\">CreatorsCode</a>. Brandy is a creative technology influencer, speaker, and consultant with large followings of developer advocates and students alike. Follow Brandy on <a href=\"https://www.instagram.com/msbrandymorgan/\" rel=\"noopener noreferrer\" target=\"_blank\">Instagram</a>, <a href=\"https://www.linkedin.com/in/brandy-morgan-40384056/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> or <a href=\"https://twitter.com/msbrandymorgan?lang=en\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, and enjoy the Q/A.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/de0c87e0-a48c-11e8-8cfb-7b08677a5e2f-Vztl8V2o_400x400.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><strong>Cosmic: How long have you been building software?</strong><br>Brandy: I have been building software since 2015. I started attending Full Sail University for web development in 2014 and got my first paying job a year into the program. I knew that no matter what, the experience I could get actually building products would be far more useful than education alone. &nbsp;</p><p><br></p><p><strong>What is your preferred development stack?</strong><br>I love all things JavaScript. My favorite framework to build in is React Native but for web I prefer React and Node.js. Writing in JavaScript for both the frontend and backend gives you familiarity when going from backend to frontend that other stacks doesn&#39;t have.&nbsp;</p><p><br></p><p><strong>What past projects are you most proud of and why?</strong><br>My favorite project that I built was for the Powerpuff Girls, <a href=\"http://powerpuffyourself.com/\"></a><a href=\"//powerpuffyourself.com\"></a><a href=\"//powerpuffyourself.com\">powerpuffyourself.com</a>. It is a web application written in Vue.js and Node.js. This was a fast project, meaning we only had 8 weeks to build, with a hard deadline. I had never heard of Vue.js (this was in 2016). I started by reading their docs several times to become familiar with syntax. The other big hurdle was the project needed a strong understanding of AWS, more specifically Lambda.&nbsp;</p><p>During those 2 months I spent every waking moment writing code and learning AWS. On the last night at around 3am, I had created my last pull request, and the other programmer on the project approved it and I was ready to do a push to staging and have QA have a go at it before pushing to production in a few hours. I left the office and got home, showered, and had to catch a flight to NYC to be the technical lead at the Powderpuff Girls pop up shop, where our app would be the main attraction.&nbsp;</p><p>The next four days were the most intense for fixing bugs, adding features, removing features, all while explaining everything in terms the Cartoon Network team could understand. It was one of the best experiences of my life and really taught me the importance of communication and to always do your work with a smile on, no matter the level of exhaustion.</p><p><br></p><p><br></p><div class=\"fr-embedly      \" data-original-embed=\"<a href='https://www.instagram.com/p/Bl-tKtcl8Y6/?utm_source=ig_web_copy_link' class='embedly-card'></a>\"><a href=\"https://www.instagram.com/p/Bl-tKtcl8Y6/?utm_source=ig_web_copy_link\" class=\"embedly-card\"></a></div><p><br></p><p>&nbsp;</p><p><strong>Talk a little bit more about your process for building apps.</strong><br>The main thing to think about when it comes to scoping a project is, what is the &nbsp;business need behind it? You really need to understand the process in which the application is for, so you know how to solve for it. If someone comes to you with a problem they are facing and they want software to fix it.&nbsp;</p><p>We as developers need to be asking the right questions so that the software we build actually fixes the issue. A lot of times it isn&rsquo;t the initial problem we are solving for. That gets uncovered by asking questions and better understanding their processes and pain points.</p><p><br></p><p><strong>What are some technologies you are excited about right now?</strong><br>I have been fascinated with AI and machine learning for sometime. I would love to create smart software that learns the behavior of its users to create a better experience for them.&nbsp;</p><p>Join the conversation on <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> and <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Slack</a>.&nbsp;</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with <a href=\"https://www.instagram.com/msbrandymorgan/\" rel=\"noopener noreferrer\" target=\"_blank\">Brandy Morgan</a>, a JavaScript developer residing in sunny Florida who&#39;s currently spearheading her startup <a href=\"https://www.creatorscode.co\" rel=\"noopener noreferrer\" target=\"_blank\">CreatorsCode</a>. Brandy is a creative technology influencer, speaker, and consultant with large followings of developer advocates and students alike. Follow Brandy on <a href=\"https://www.instagram.com/msbrandymorgan/\" rel=\"noopener noreferrer\" target=\"_blank\">Instagram</a>, <a href=\"https://www.linkedin.com/in/brandy-morgan-40384056/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> or <a href=\"https://twitter.com/msbrandymorgan?lang=en\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, and enjoy the Q/A.</p>"},{"value":"d06ef000-a4b4-11e8-bbe0-2760c84a7c36-ice_screenshot_20180820-150816.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/d06ef000-a4b4-11e8-bbe0-2760c84a7c36-ice_screenshot_20180820-150816.png","imgix_url":"https://imgix.cosmicjs.com/d06ef000-a4b4-11e8-bbe0-2760c84a7c36-ice_screenshot_20180820-150816.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-08-20T15:13:34.539Z","created_by":"5716b504e9c686d006000073","created":"2018-08-20T15:13:34.539Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-08-20T20:08:34.868Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with <a href=\"https://www.instagram.com/msbrandymorgan/\" rel=\"noopener noreferrer\" target=\"_blank\">Brandy Morgan</a>, a JavaScript developer residing in sunny Florida who&#39;s currently spearheading her startup <a href=\"https://www.creatorscode.co\" rel=\"noopener noreferrer\" target=\"_blank\">CreatorsCode</a>. Brandy is a creative technology influencer, speaker, and consultant with large followings of developer advocates and students alike. Follow Brandy on <a href=\"https://www.instagram.com/msbrandymorgan/\" rel=\"noopener noreferrer\" target=\"_blank\">Instagram</a>, <a href=\"https://www.linkedin.com/in/brandy-morgan-40384056/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> or <a href=\"https://twitter.com/msbrandymorgan?lang=en\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, and enjoy the Q/A.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/d06ef000-a4b4-11e8-bbe0-2760c84a7c36-ice_screenshot_20180820-150816.png","imgix_url":"https://imgix.cosmicjs.com/d06ef000-a4b4-11e8-bbe0-2760c84a7c36-ice_screenshot_20180820-150816.png"}}},{"_id":"5b648bf43a617a08872d027b","order":58,"slug":"improved-metafield-modeling","title":"Improved Metafield Modeling","content":"<p>Metafields are a powerful feature of the Cosmic CMS. &nbsp;They give developers the power to build complex data models in a delightfully simple and intuitive way.</p><p>Check out the <a href=\"https://www.cosmicjs.com/getting-started\" rel=\"noopener noreferrer\" target=\"_blank\">Getting Started guide</a> for more information on the Cosmic data structure.</p><p>In an effort to make the data modeling of Metafields even easier, you can now add Metafields at the top, bottom and inline between Metafields. This should come as a welcome improvement for those that have Objects with lots of Metafields.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b2d71a70-9741-11e8-b9f1-0f74b846bba8-metafield-modeling.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>I hope you enjoy the new flexibility for adding Metafields. If you have any questions or comments, <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">join our Slack community</a>.&nbsp;</p><p>Photo by <a href=\"https://unsplash.com/photos/FKZwWLWgGyM?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Esther Jiao</a> on <a href=\"https://unsplash.com/search/photos/building-blocks?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Unsplash</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In an effort to make the data modeling of Metafields even easier, you can now add Metafields at the top, bottom and inline between Metafields.</p>"},{"value":"180ff670-974f-11e8-abe4-e9431faebfc5-esther-jiao-640129-unsplash (1).jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/180ff670-974f-11e8-abe4-e9431faebfc5-esther-jiao-640129-unsplash (1).jpg","imgix_url":"https://imgix.cosmicjs.com/180ff670-974f-11e8-abe4-e9431faebfc5-esther-jiao-640129-unsplash (1).jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-08-03T17:08:04.491Z","created_by":"5357ef811693be2118000001","created":"2018-08-03T17:08:04.491Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-08-03T18:58:46.407Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>In an effort to make the data modeling of Metafields even easier, you can now add Metafields at the top, bottom and inline between Metafields.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/180ff670-974f-11e8-abe4-e9431faebfc5-esther-jiao-640129-unsplash (1).jpg","imgix_url":"https://imgix.cosmicjs.com/180ff670-974f-11e8-abe4-e9431faebfc5-esther-jiao-640129-unsplash (1).jpg"}}},{"_id":"5b560dad0c191c080d015a03","order":59,"slug":"developer-spotlight-kyle-mathews-of-gatsby","title":"Developer Spotlight: Kyle Mathews of Gatsby","content":"<p>Since debuting the <a href=\"https://github.com/cosmicjs/gatsby-source-cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Gatsby Source Plugin</a> and Cosmic-powered <a href=\"https://www.cosmicjs.com/apps/gatsby-blog\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby Blog</a> earlier this summer, it&#39;s been one of the most popular applications in the Cosmic Apps Marketplace. Taking the hint that the Cosmic Community was crazy for Gatsby, we made the <a href=\"https://github.com/cosmicjs/gatsby-starter\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby Starter App</a> available, which lets you install a Cosmic-powered Gatsby app in seconds.&nbsp;</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/af7abb70-8eae-11e8-b621-c1637a8ff273-43a4f310-63ee-11e8-b5f7-137707533425-thumbnail.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>With all the recent Gatsby fervor, we were delighted to get to sit down with <a href=\"https://www.linkedin.com/in/kylemathews/\" rel=\"noopener noreferrer\" target=\"_blank\">Kyle Mathews</a>, founder of <a href=\"https://www.gatsbyjs.org\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby</a> and a software engineer living in San Francisco. Follow Kyle on <a href=\"https://github.com/KyleAMathews\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a> and <a href=\"https://twitter.com/kylemathews\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, and enjoy the Q/A.&nbsp;</p><p><br></p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/391ba350-8f48-11e8-8720-8df91c6c3536-gatsby-cosmic.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><br></p><p><strong>Cosmic: How long have you been building software?<br></strong><strong>Kyle</strong>: My oldest brother is a programmer and tried introducing me to qbasic when I was 10 or something. I thought it was kinda interesting but it didn&#39;t stick. I did a lot of video editing and animation in high school but I didn&#39;t program program until my sophomore year in college when I took an intro to programming class and got hooked. This led to a bunch of web projects then a startup project my last year of college and then haven&#39;t stopped since.</p><p><br></p><p><strong>What is your preferred development stack?</strong><br>I write a lot of JavaScript so React &amp; JS on the frontend and Node on the back. GraphQL is my favorite way to make APIs and I really love the event sourcing model for larger projects.&nbsp;</p><p><br></p><p><strong>What past projects are you most proud of and why?</strong><br>Pre-Gatsby &mdash; I worked at a startup called Pantheon. It was my first &quot;real&quot; job and first time working with a great engineering &amp; product team and I&#39;m really proud of the work I did there building out their dashboard tools.&nbsp;</p><p>These days of course I&#39;m working full-time on Gatsby &mdash; which I&#39;m super proud of. It&#39;s been really fun to design &amp; build something lots of people love and even more&mdash;to see it gradually become other people&#39;s project and passion&mdash;not just mine.</p><p><br></p><p><strong>Talk a little bit more about your process for building apps.&nbsp;</strong><br>I like to think about things fairly thoroughly before working on them. Try to jump through every requirement users could ever have for the project. How that&#39;d impact the UI and the technical side of things, etc. And then try to forget about all that and figure out the tiniest part of it I can build and ship immediately aka the MVP. Doing that is tricky but it helps avoid coding yourself in corners by not anticipating a big requirement but also to avoid spending lots of time solving problems that turn out to not actually be problems. When you get the balance right, you can solve some small part of the problem very quickly which will help you get a lot of great feedback from excited users and that feedback and energy combined with your foreseeing what will be needed will enable you to iterate on the rest of the problem very very quickly.</p><p><br></p><p><strong>What are some technologies you are excited about that you are using today, or want to learn more about?</strong><br>I think JavaScript, React, Node &mdash; as big as they are &mdash; are just getting started. They have massive growth still ahead of them. Beyond that, I&#39;m extremely excited by Serverless (Functions as a Service) and all the really refreshing improvements that brings to engineering productivity and server costs.</p><p><br></p><p><strong>What problems are Gatsby solving in the future? What is the plan of growth?&nbsp;</strong><br>So many! We want to ensure that whatever you build with Gatsby will always be lightning quick and that development will be fun and fast.</p><ul><li>We recently released <a href=\"https://www.gatsbyjs.org/blog/2018-07-17-announcing-gatsby-preview/\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby Preview</a> which helps content creators preview their changes on a live version of their Gatsby site &mdash; something a lot of teams have asked for</li><li>We&#39;re always working on pushing the boundaries of Gatsby. v2 of Gatsby (releasing soon) will build sites 75%+ faster</li><li>We&#39;re working on a cloud-native build system for Gatsby that&#39;ll make building sites with 100s of thousands of pages practical</li><li>We&#39;re working on a big revamp of the docs information architecture so we can add a ton more documentation &mdash; as people use Gatsby more and more, we get asked questions about all sorts of advanced use cases &mdash; so lots more doc writing to do</li><li>We&#39;re up to 930 total contributors to the project are merging literally 100s of PRs a month. We&#39;re working on ways to scale our OSS maintenance with the growth of the community so more automation and helping more people grow their contribution to Gatsby.</li></ul><p>So no shortage of things to do :-) We&#39;re very energized by the enthusiasm from the community and are excited to keep pushing forward the experience of building sites with Gatsby.</p><p>Join the conversation on <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> and <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Slack</a>.&nbsp;</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>With all the recent Gatsby fervor, we were delighted to get to sit down with <a href=\"https://www.linkedin.com/in/kylemathews/\" rel=\"noopener noreferrer\" target=\"_blank\">Kyle Mathews</a>, founder of <a href=\"https://www.gatsbyjs.org\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby</a> and a software engineer living in San Francisco. Follow Kyle on <a href=\"https://github.com/KyleAMathews\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a> and <a href=\"https://twitter.com/kylemathews\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, and enjoy the Q/A.&nbsp;</p>"},{"value":"7685e0b0-8f49-11e8-ac9b-a568525636cf-gatsby-cosmic.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/7685e0b0-8f49-11e8-ac9b-a568525636cf-gatsby-cosmic.jpg","imgix_url":"https://imgix.cosmicjs.com/7685e0b0-8f49-11e8-ac9b-a568525636cf-gatsby-cosmic.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-07-23T17:17:33.153Z","created_by":"5716b504e9c686d006000073","created":"2018-07-23T17:17:33.154Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-07-24T13:57:14.644Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>With all the recent Gatsby fervor, we were delighted to get to sit down with <a href=\"https://www.linkedin.com/in/kylemathews/\" rel=\"noopener noreferrer\" target=\"_blank\">Kyle Mathews</a>, founder of <a href=\"https://www.gatsbyjs.org\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby</a> and a software engineer living in San Francisco. Follow Kyle on <a href=\"https://github.com/KyleAMathews\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a> and <a href=\"https://twitter.com/kylemathews\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, and enjoy the Q/A.&nbsp;</p>","featured_image":{"url":"https://cdn.cosmicjs.com/7685e0b0-8f49-11e8-ac9b-a568525636cf-gatsby-cosmic.jpg","imgix_url":"https://imgix.cosmicjs.com/7685e0b0-8f49-11e8-ac9b-a568525636cf-gatsby-cosmic.jpg"}}},{"_id":"5b4c90cd0d94ad101fc120c9","order":60,"slug":"developer-spotlight-harrie-pieters","title":"Developer Spotlight: Harrie Pieters ","content":"<p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/e4408260-88f8-11e8-aaaa-a30bad3a0b21-blake-connally-373084-unsplash.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>In this installment of the Cosmic Developer Spotlight Series, we sat down with <a href=\"https://www.harriepieters.nl\" rel=\"noopener noreferrer\" target=\"_blank\">Harrie Pieters</a>, a Full Stack JavaScript developer in Amsterdam. Harrie recently was on a team collaborating to build the <a href=\"https://www.cosmicjs.com/case-studies/bookabus-builds-a-localized-transportation-website\" rel=\"noopener noreferrer\" target=\"_blank\">Bookabus project</a>, a localized transportation website that serves marketing and bus-route content to its European markets. Follow Harrie on <a href=\"https://github.com/HPieters\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, <a href=\"https://www.linkedin.com/in/harriepieters/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> or <a href=\"https://twitter.com/harriepieters\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, and enjoy the Q/A.</p><p><br></p><p><strong>How long have you been building software?</strong><br>It all started more than 15 years ago, at the time where people just started to realise using tables was a much better way to build websites than frames. At that time I just started high school and was just playing around. During my university years some 8 years later I decided to start turning my hobby into a business and have been developing websites, web applications and apps ever since.</p><p><br></p><p><strong>What is your preferred development stack?</strong><br>Currently I focus heavily on JavaScript as full stack developer, using React on the frontend, React Native for apps, and Node on the backend.&nbsp;</p><p><br></p><p><strong>What past projects are you most proud of and why?</strong><br>One of the most rewarding projects was building an app for The Ocean Cleanup to digitise ocean trash sightings research. Especially debugging the app in the middle of the Atlantic Ocean &nbsp;was a unique experience, as having no internet or cell service calls for some creative solutions.</p><p><br></p><p><strong>In talking about your process for building apps, do any recent projects come to mind?</strong><br>So early on this year I was asked to build the <a href=\"https://www.bookabus.eu/\">Bookabus</a> website from scratch, in an attempt to combine the productivity React with Server Side Rendering (SEO) I decided on giving Next.js a go. One of the requirements for the website was a CMS for the team to be able to edit content that supported multiple countries and languages in Europe. We found Cosmic to be the best solution for us at the time to act as our headless CMS.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/bd2bf910-88f9-11e8-a6dd-9522b35cef3e-DallasStandup.com.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The current stack consists of a backend API using GraphQL that serves the content to the frontend (website). The API fetches the localised content from Cosmic, makes a local cache, and serves the content based upon query parameters. The frontend does some additional caching for static content such as FAQ items and pages.&nbsp;</p><p><br></p><p>We are currently investigating the possibility of moving one step further and making a static build that already has the localised content in the project. Utilising the web hook to trigger an automatic build.</p><p><br></p><p><strong>What are some technologies you are excited about that you are using today, or want to learn more about?</strong><br>There are so many exciting things going on, currently I am excited about serverless stacks, improving products beyond our own imagination using AI, smart-contracts and moving towards functional programming.&nbsp;</p><p><br></p><p>To learn how you can contribute Apps, Articles and Extensions to the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a>, contact us at <a href=\"mailto:jobs@cosmicjs.com\"></a><a href=\"mailto:jobs@cosmicjs.com\"></a><a href=\"mailto:jobs@cosmicjs.com\"></a><a href=\"mailto:jobs@cosmicjs.com\"></a><a href=\"mailto:jobs@cosmicjs.com\"></a><a href=\"mailto:jobs@cosmicjs.com\">jobs@cosmicjs.com</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with <a href=\"https://www.harriepieters.nl\" rel=\"noopener noreferrer\" target=\"_blank\">Harrie Pieters</a>, a Full Stack JavaScript developer in Amsterdam. Harrie recently was on a team collaborating to build the <a href=\"https://www.cosmicjs.com/case-studies/bookabus-builds-a-localized-transportation-website\" rel=\"noopener noreferrer\" target=\"_blank\">Bookabus project</a>, a localized transportation website that serves marketing and bus-route content to its European markets. Follow Harrie on <a href=\"https://github.com/HPieters\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, <a href=\"https://www.linkedin.com/in/harriepieters/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> or <a href=\"https://twitter.com/harriepieters\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, and enjoy the Q/A.</p>"},{"value":"8b81d6a0-88f4-11e8-a6dd-9522b35cef3e-blake-connally-373084-unsplash.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/8b81d6a0-88f4-11e8-a6dd-9522b35cef3e-blake-connally-373084-unsplash.jpg","imgix_url":"https://imgix.cosmicjs.com/8b81d6a0-88f4-11e8-a6dd-9522b35cef3e-blake-connally-373084-unsplash.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-07-16T12:34:21.826Z","created_by":"5716b504e9c686d006000073","created":"2018-07-16T12:34:21.826Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"published_at":"2018-07-16T13:15:27.681Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with <a href=\"https://www.harriepieters.nl\" rel=\"noopener noreferrer\" target=\"_blank\">Harrie Pieters</a>, a Full Stack JavaScript developer in Amsterdam. Harrie recently was on a team collaborating to build the <a href=\"https://www.cosmicjs.com/case-studies/bookabus-builds-a-localized-transportation-website\" rel=\"noopener noreferrer\" target=\"_blank\">Bookabus project</a>, a localized transportation website that serves marketing and bus-route content to its European markets. Follow Harrie on <a href=\"https://github.com/HPieters\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, <a href=\"https://www.linkedin.com/in/harriepieters/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> or <a href=\"https://twitter.com/harriepieters\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, and enjoy the Q/A.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/8b81d6a0-88f4-11e8-a6dd-9522b35cef3e-blake-connally-373084-unsplash.jpg","imgix_url":"https://imgix.cosmicjs.com/8b81d6a0-88f4-11e8-a6dd-9522b35cef3e-blake-connally-373084-unsplash.jpg"}}},{"_id":"5b192d4a0d7160027f1a704c","order":62,"slug":"developer-spotlight-trey-huffine","title":"Developer Spotlight: Trey Huffine","content":"<p>In this Cosmic Developer Spotlight, we sat down with <a href=\"https://www.linkedin.com/in/treyhuffine/\" rel=\"noopener noreferrer\" target=\"_blank\">Trey Huffine</a>, a Software Engineer in San Francisco who currently works as a frontend engineer at <a href=\"https://postmates.com/\">Postmates</a>. Trey is also the founder of <a href=\"https://blockace.io\" rel=\"noopener noreferrer\" target=\"_blank\">BlockAce</a>, <a href=\"https://gitconnected.com/\" rel=\"noopener noreferrer\" target=\"_blank\">gitconnected</a>, and <a href=\"https://radion.co/\" rel=\"noopener noreferrer\" target=\"_blank\">Radion</a>. Check him out on <a href=\"https://twitter.com/treyhuffine\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> or <a href=\"https://levelup.gitconnected.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Medium</a>, and enjoy the Q/A.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/066cd490-796a-11e8-a100-d1e2a847d40a-3e4ebca0-7967-11e8-b0bd-bf45a4246766-banner-simplified.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><strong>How long have you been building software?</strong><br>I began building software about 10 years in during college in my engineering program which mostly consisted of Matlab and Python. I knew that I loved to code, but I was a little unsure of how to turn that into a career. I moved to Berkeley to get a master&#39;s degree, and during the program, I started to teach myself web development by starting with Ruby on Rails and JavaScript.&nbsp;</p><p><br></p><p>I became consumed by it and realized this was the area I was truly passionate about. I would spend more time focusing on building apps than my school work, and I realized that I needed to move my career in that direction. Immediately after I graduated, I applied to a JavaScript bootcamp, and I couldn&#39;t be happier with how things have turned out.</p><p><br></p><p><strong>What is your preferred development stack?</strong><br>For the client side, I almost always tend to pick React as the tool of the choice. Whether I&#39;m building a small project or a large scalable interface, React is mostly unbeatable and the community around the technology is incredible. If I need more powerful state management, I&#39;ll also add in Redux.</p><p><br></p><p>For the server, I tend to focus more on a project&#39;s need to help guide choosing the right tool. If I&#39;m focused more on development speed, I&#39;ll choose Node (JavaScript) since it allows me to write my API&#39;s very quickly. If I decide not to use Node, then Go would be my next pick. It&#39;s a minimalistic but powerful language, and it&#39;s a ton of fun to code in. There are few languages that offer the combined developer experience and performance that Go provides.</p><p><br></p><p>Recently though, I&#39;ve found myself really enjoying working in a JAMStack. On the client side, I build static markup with React using react-static and then provide API&#39;s with AWS Lambda functions written in either Node or Go. By pre-building the markup, apps feel blazing fast to users, and you don&#39;t need to wait for database calls. By using Lambdas, it forces me to keep the logic small and modular, producing better overall code quality. It also makes&nbsp;your server horizontally scalable since you&nbsp;don&#39;t manage your own CPU&#39;s. Working in this stack is also what has gotten me interested in Cosmic and thinking about how to use that to manage my data backend.</p><p><br></p><p><strong>What past projects are you most proud of and why?</strong><br>I think the project I&#39;m most proud of is <a href=\"https://gitconnected.com/\">gitconnected</a> which was created as a way to help developers connect and offer social learning community. I know first-hand that making a career change into the software engineering field can be intimidating. Many developers suffer from imposter syndrome, and it can feel very difficult to find and connect with other engineers. Gitconnected was created to help build a community as well as support collaboration and open source software development.</p><p><br></p><p>Recently I&#39;ve also been enamored with blockchain technology which made me decide to start <a href=\"https://blockace.io\">BlockAce</a> and <a href=\"https://radion.co/\">Radion</a>. I&#39;ve bought into the hype that blockchain can be transformative and disrupt the way we do many things. Since blockchain is so new, there is a disconnect between developers and companies, and BlockAce is a job platform to people get hired for careers in blockchain.</p><p><br></p><p>Another issue with blockchain is adoption. The companies that do offer blockchain software solutions expect the clients to make radical changes to their current business model, and we believe this is the wrong approach. Radion focuses on building software that allows companies to integrate blockchain immediately without needing to change any of their day-to-day operations.</p><p><br></p><p>I&#39;m also a software engineer at Postmates, and we&#39;ve been doing some very exciting things. We recently rebuilt our entire web application as well as the view layer on the mobile apps. Being part of a ground-up rewrite for a product that is used by millions of people is a learning experience that I&#39;m very grateful to have been a part of. We were able to choose the exact technologies we wanted to use and build a software stack that&#39;s great to work with as a developer and offers all the features needed to grow the company. The team itself at Postmates is very talented, and I really believe that the sky is the limit on what we&#39;re now able to achieve.</p><p><br></p><p><strong>Talk a little bit more about your process for building apps. Are you working on a team, and if so, what types of roles within the organization are you collaborating with?</strong><br>I&#39;ve both built applications individually as well as worked on larger teams where I need to collaborate all different roles - other engineers, designers, product managers, marketing, customer service, etc. I think regardless of the size of the project or number of people, I tend to find following these principles lead to successful outcomes and happy individuals.</p><p>- Focus on completeness over perfect and then iterate.<br>- Individual ownership is critical. Everyone should feel like the CEO of their own work.<br>- Get input early and often from everyone involved, and make the process of building a product a conversation among all stakeholders.<br>- Focus and prioritize the things that will make the greatest impact.<br>- Keep business objectives in mind when making decisions.<br>- Don&#39;t make assumptions. You should validate ideas.<br>- Always find ways to make the process fun - try new technologies, add your twist on ideas, work on building features with other people. If you&#39;re enjoying what you&#39;re doing, a lot of the other things will fall into place.</p><p>For me personally, I tend to start putting down code as quickly as possible. It helps me think through the entire problem and identify areas of concern or opportunities early. It also allows people to see results and provides the chance to get feedback.</p><p><br></p><p><strong>What are some technologies you are excited about that you are using today, or want to learn more about?</strong><br>The technologies I&#39;m currently using that excite me are CSS-in-JS on the client, Golang on the server, and building app architecture using &quot;serverless&quot; ideologies. Being able to style the project while being able to manage dependencies and data all in JavaScript has greatly improved by development speed. I didn&#39;t realize how painful it was to manage CSS and switching it and JS was until I returned to old projects that don&#39;t have CSS-in-JS. It&#39;s something I incorporate in all new apps. I love Go because it&#39;s very refreshing to have a typed and compiled language that&#39;s so easy to use. Serverless architecture is exciting because it has really challenged the way I think about applications and has made me a better developer. Also, by only needing to focus on the business logic and removing many of the boilerplate activities of managing a server, it speeds up development and let&#39;s you focus on the fun part.</p><p>The technology I&#39;m really excited to continue to learn more about is Blockchain, Solidity, and Hyperledger development. It&#39;s fun to be working on something that&#39;s so new to everyone and collectively finding the best way to utilize the technology in a practical context. The blockchain space has also embraced the open source mentality maybe more than any other field, and I&#39;m eager to see how things develop.</p><p><br></p><p>To learn how you can contribute Apps, Articles and Extensions to the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a>, contact us at <a href=\"mailto:jobs@cosmicjs.com\"></a><a href=\"mailto:jobs@cosmicjs.com\"></a><a href=\"mailto:jobs@cosmicjs.com\">jobs@cosmicjs.com</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In this Cosmic Developer Spotlight, we sat down with <a href=\"https://www.linkedin.com/in/treyhuffine/\" rel=\"noopener noreferrer\" target=\"_blank\">Trey Huffine</a>, a Software Engineer in San Francisco who currently works as a frontend engineer at <a href=\"https://postmates.com/\">Postmates</a>. Trey is also the founder of <a href=\"https://blockace.io\" rel=\"noopener noreferrer\" target=\"_blank\">BlockAce</a>, <a href=\"https://gitconnected.com/\" rel=\"noopener noreferrer\" target=\"_blank\">gitconnected</a>, and <a href=\"https://radion.co/\" rel=\"noopener noreferrer\" target=\"_blank\">Radion</a>. Check him out on <a href=\"https://twitter.com/treyhuffine\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> or <a href=\"https://levelup.gitconnected.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Medium</a>, and enjoy the Q/A.</p>"},{"value":"033514b0-6a6d-11e8-abf3-a7a39a3e2f3e-max-nelson-492729-unsplash.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/033514b0-6a6d-11e8-abf3-a7a39a3e2f3e-max-nelson-492729-unsplash.jpg","imgix_url":"https://imgix.cosmicjs.com/033514b0-6a6d-11e8-abf3-a7a39a3e2f3e-max-nelson-492729-unsplash.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-06-07T13:04:10.582Z","created_by":"5716b504e9c686d006000073","created":"2018-06-07T13:04:10.582Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-06-26T19:31:12.515Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this Cosmic Developer Spotlight, we sat down with <a href=\"https://www.linkedin.com/in/treyhuffine/\" rel=\"noopener noreferrer\" target=\"_blank\">Trey Huffine</a>, a Software Engineer in San Francisco who currently works as a frontend engineer at <a href=\"https://postmates.com/\">Postmates</a>. Trey is also the founder of <a href=\"https://blockace.io\" rel=\"noopener noreferrer\" target=\"_blank\">BlockAce</a>, <a href=\"https://gitconnected.com/\" rel=\"noopener noreferrer\" target=\"_blank\">gitconnected</a>, and <a href=\"https://radion.co/\" rel=\"noopener noreferrer\" target=\"_blank\">Radion</a>. Check him out on <a href=\"https://twitter.com/treyhuffine\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> or <a href=\"https://levelup.gitconnected.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Medium</a>, and enjoy the Q/A.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/033514b0-6a6d-11e8-abf3-a7a39a3e2f3e-max-nelson-492729-unsplash.jpg","imgix_url":"https://imgix.cosmicjs.com/033514b0-6a6d-11e8-abf3-a7a39a3e2f3e-max-nelson-492729-unsplash.jpg"}}},{"_id":"5b217f0a841d4022416fae08","order":63,"slug":"additional-user-permissions-now-available","title":"Additional User Permissions Now Available","content":"<p>You now have the ability to grant additional user permissions to team members working in your Bucket. &nbsp;More granular control is useful if your editors need the ability to add other editors, if your developer needs access to Bucket billing, and other admin features.</p><p>When you navigate to Your Bucket Dashboard &gt; Users, you will now notice options to add <strong>Additional Permissions</strong> for either the Developer or Editors role.<br><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/a58f98e0-6f48-11e8-b74b-97ad540b5776-user-permissions.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br>These new options include User management and access to Bucket Settings (including Billing). &nbsp;This should give your team a little more control and help your team work that much better together.<br><br>If you have any questions about the new user permissions, you can <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">join us on Slack</a> and <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>You now have the ability to grant additional user permissions to team members working in your Bucket. &nbsp;More granular control is useful if your editors need the ability to add other editors, if your developer needs access to Bucket billing, and other admin features.</p>"},{"value":"c40265a0-6f48-11e8-8c57-8dc36c228878-mcLpPD36-2k.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/c40265a0-6f48-11e8-8c57-8dc36c228878-mcLpPD36-2k.jpg","imgix_url":"https://imgix.cosmicjs.com/c40265a0-6f48-11e8-8c57-8dc36c228878-mcLpPD36-2k.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-06-13T20:31:06.329Z","created_by":"5357ef811693be2118000001","created":"2018-06-13T20:31:06.329Z","status":"published","modified_at":"2020-08-10T14:04:22.001Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-06-13T21:15:10.717Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>You now have the ability to grant additional user permissions to team members working in your Bucket. &nbsp;More granular control is useful if your editors need the ability to add other editors, if your developer needs access to Bucket billing, and other admin features.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/c40265a0-6f48-11e8-8c57-8dc36c228878-mcLpPD36-2k.jpg","imgix_url":"https://imgix.cosmicjs.com/c40265a0-6f48-11e8-8c57-8dc36c228878-mcLpPD36-2k.jpg"}}},{"_id":"5b1141d51928be5073cc76fd","order":64,"slug":"developer-spotlight-john-allen-hopper","title":"Developer Spotlight: John Allen Hopper","content":"<p><img src=\"https://cosmic-s3.imgix.net/5fd205b0-67f8-11e8-954d-87bbf92f4d65-alexandru-acea-582050-unsplash.jpg?w=1200\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>In this installment of the Cosmic <a href=\"https://www.cosmicjs.com/developers\" rel=\"noopener noreferrer\" target=\"_blank\">Developer Spotlight Series</a>, we sat down with Dallas-based Software Developer <a href=\"https://www.cosmicjs.com/johnallenhopper\" rel=\"noopener noreferrer\" target=\"_blank\">John Allen Hopper</a>. In addition to having a degree in Anthropology from the University of North Texas, John is a graduate of <a href=\"https://www.codingdojo.com\" rel=\"noopener noreferrer\" target=\"_blank\">Coding Dojo</a> and has been building applications both in advertising agencies and for freelance gigs for years. Follow John on <a href=\"https://github.com/jahopp23\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, <a href=\"https://www.linkedin.com/in/john-allen-hopper-874424aa/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> and <a href=\"https://twitter.com/jahwebulariam\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, and enjoy the Q/A.&nbsp;</p><p><br></p><p><strong>How long have you been building software?</strong><br>I began building websites and C++ programming at University of North Texas while attaining a Bachelor of Arts in anthropology. My degree actually encouraged me to pursue software development as a career because I understood programming and web applications as important tools for communication and cultural transformation. All in all, I have been coding HTML, CSS, and JavaScript for 8 years. I began to &quot;stack&quot; program while attending Coding Dojo in 2016, and have been building new applications ever since.<br><br></p><p><strong>What is your preferred development stack?</strong><br>I was taught on MEAN stack, Ruby on Rails, and Python. My preference leans towards JavaScript frameworks built on Express and Node. I am beginning to enjoy frameworks like React a lot more because of its focus on constructing UI components. I am always searching for new libraries, frameworks, and stacks, and have not really settled down on one just yet. To me the convenience of being a programmer is understanding coded language within any software application. If I had to identify my top three tools-of-the-trade, they would be 1.) Ubuntu, 2). JavaScript/Node/NPM, and 3). HTML5 w/ Bootstrap CSS.<br><br><br><strong>What past projects are you most proud of and why?</strong><br>Developing <a href=\"http://mexene.com/\" target=\"_blank\"></a><a href=\"//mexene.com\">mexene.com</a> for Johnson &amp; Sekin was an insightful and challenging experience. It was my first ad-agency project where there was not a senior developer building the site in tandem. As a &nbsp;junior front-end developer, I felt a great deal of responsibility. I studied carefully details within the original design, implemented code libraries for creating animations, and adhered to a strategic methodology. I was able to develop complex UI/UX components by way of pixel-perfect representation. This project certainly taught me the syncretic relationship between design and coding. The two forms of art should always be inclusive of each other.<br><br><br><strong>Talk a little bit more about your process for building apps. Are they for external or internal audiences?&nbsp;</strong><strong><br></strong>I love building apps for education&#39;s sake and for improving technique. Building apps for the community is a new experience for me. Coding for any purpose always proves to be rewarding because there are important problems to solve and wonderful experiences to create. I have worked on projects for external audiences, such as my developer website and a photographer&#39;s website-- as well as projects within professional roles reliant on frameworks like Laravel, AngularJS, and MongoDB. Cosmic has improved productivity tenfold because it has compiled modern code libraries into a center where people can learn, build, and grow. Now, more time can be spent on things like design, content, and progress.<br><br><br><strong>What are some technologies you are excited about that you are using today, or want to learn more about?</strong><br>Zeit Now/Next brings reliable command-line deployments. The technology allowed me to update and deploy projects on the fly. &nbsp;Bootstrap will always have a special place in my heart because of its aesthetic. I predict I will be researching and building\r\nnew applications with React, Redux, Ionic, GraphQL, Apollo, etc. These frameworks employ incredible responsiveness, methodical code structure, and seamless efficiency- allowing programmers freedom to build complex web applications through straightforward\r\nJS logic.&nbsp;</p><p><br></p><p>To learn how you can contribute Apps, Articles and Extensions to the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a>, contact us at <a href=\"mailto:jobs@cosmicjs.com\"></a><a href=\"mailto:jobs@cosmicjs.com\">jobs@cosmicjs.com</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In this installment of the Cosmic <a href=\"https://www.cosmicjs.com/developers\" rel=\"noopener noreferrer\" target=\"_blank\">Developer Spotlight Series</a>, we sat down with Dallas-based Software Developer <a href=\"https://www.cosmicjs.com/johnallenhopper\" rel=\"noopener noreferrer\" target=\"_blank\">John Allen Hopper</a>. In addition to having a degree in Anthropology, John is a graduate of Coding Dojo and has been building applications in agency environments, freelance gigs and as a contributor for years. Follow John on <a href=\"https://github.com/jahopp23\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, <a href=\"https://www.linkedin.com/in/john-allen-hopper-874424aa/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> and <a href=\"https://twitter.com/jahwebulariam\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, and enjoy the Q/A.&nbsp;</p>"},{"value":"4085c8e0-67f8-11e8-ae3d-1fcb789439d0-alexandru-acea-582050-unsplash.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/4085c8e0-67f8-11e8-ae3d-1fcb789439d0-alexandru-acea-582050-unsplash.jpg","imgix_url":"https://imgix.cosmicjs.com/4085c8e0-67f8-11e8-ae3d-1fcb789439d0-alexandru-acea-582050-unsplash.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-06-01T12:53:41.640Z","created_by":"5716b504e9c686d006000073","created":"2018-06-01T12:53:41.640Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-06-04T21:25:18.239Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this installment of the Cosmic <a href=\"https://www.cosmicjs.com/developers\" rel=\"noopener noreferrer\" target=\"_blank\">Developer Spotlight Series</a>, we sat down with Dallas-based Software Developer <a href=\"https://www.cosmicjs.com/johnallenhopper\" rel=\"noopener noreferrer\" target=\"_blank\">John Allen Hopper</a>. In addition to having a degree in Anthropology, John is a graduate of Coding Dojo and has been building applications in agency environments, freelance gigs and as a contributor for years. Follow John on <a href=\"https://github.com/jahopp23\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, <a href=\"https://www.linkedin.com/in/john-allen-hopper-874424aa/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> and <a href=\"https://twitter.com/jahwebulariam\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, and enjoy the Q/A.&nbsp;</p>","featured_image":{"url":"https://cdn.cosmicjs.com/4085c8e0-67f8-11e8-ae3d-1fcb789439d0-alexandru-acea-582050-unsplash.jpg","imgix_url":"https://imgix.cosmicjs.com/4085c8e0-67f8-11e8-ae3d-1fcb789439d0-alexandru-acea-582050-unsplash.jpg"}}},{"_id":"5b101dcda0381448a8bebaef","order":65,"slug":"developer-spotlight-joe-warren","title":"Developer Spotlight: Joe Warren","content":"<p>In this installment of the Cosmic <a href=\"https://www.cosmicjs.com/developers\" rel=\"noopener noreferrer\" target=\"_blank\">Developer Spotlight Series</a>, we sat down with Dallas-based Software Developer <a href=\"https://www.cosmicjs.com/mightyjoew\" rel=\"noopener noreferrer\" target=\"_blank\">Joe Warren</a>. Joe is a <a href=\"https://devmountain.com\" rel=\"noopener noreferrer\" target=\"_blank\">DevMountain</a> graduate and currently works on a team building applications for an SMS technology platform based in Frisco, Texas. Joe is active in the local ReactJS Community, as pictured below during a recent presentation. Follow Joe on <a href=\"https://github.com/MightyJoeW\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a> and <a href=\"https://twitter.com/MightyJoeW\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, and enjoy the Q/A.&nbsp;</p><p><img src=\"https://imgix.cosmicjs.com/7cfa3800-64ed-11e8-8661-91fed3df6220-Dct5D1dU0AAfRsT.jpg-large.jpg?w=1200\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p style=\"text-align: center;\">React JS Dallas Meetup</p><p style=\"text-align: center;\"><br></p><p><strong><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/ecf47c70-651e-11e8-99c8-8105d4dfa10a-joe-warren.jpg\" style=\"width: 300px; float: left; margin-right: 20px;\" class=\"fr-fic fr-fil fr-dii\">How long have you been building software?<br></strong>I have always been passionate about technology, but my official transition into a software engineering career began in 2016. After 6 years of work experience in a different field, I decided to shift my focus to web development. My two years of building software have included personal projects, bootcamp projects, open-source projects, and professional production experience.<br><br><strong>What is your preferred development stack?<br></strong>I&rsquo;ve really enjoyed building projects using the SERN (SQL, Express, React, Node) stack. I&rsquo;m currently working on a team that uses React, Redux, and Material-UI on the front end. Although I enjoy my current stack, Vue.js and Cosmic are two technologies that I&rsquo;m interested in picking up.<br><br><strong>What past projects are you most proud of and why?<br></strong>My favorite non work-related project is my DevMountain group project, <a href=\"http://www.fittr.us\" rel=\"noopener noreferrer\" target=\"_blank\">Fittr.us</a>. Fittr.us was created out of our team&#39;s love for fitness and desire to put useful data and features all in one place. Fittr.us syncs with Fitbit to import and visualize data based on the user&#39;s goals. We also implemented a friend system along with a badging system. Timer and stopwatch features are both available too for real-time usage during workouts.<br><br>This was a fun and challenging project as we were forced to function as a single unit, plan together, use Git &amp; GitHub effectively, and quickly figure out how to do new things.<br><strong><br></strong><strong>What are some technologies you are excited about or want to learn more about?<br></strong>I really look forward to exploring Cosmic&rsquo;s methods for handling data and file management. At the moment, I&rsquo;d like to focus most on building client applications and &nbsp;Cosmic will allow me to do so with the tools I already love using. I was also really intrigued by Tony&rsquo;s Spiro&rsquo;s <a href=\"https://www.cosmicjs.com/articles/react-vr-art-gallery-app-jh10xe75\" rel=\"noopener noreferrer\" target=\"_blank\">React VR Art Gallery&nbsp;</a>demonstration at the <a href=\"https://www.cosmicjs.com/articles/building-for-team-success-with-content-powered-apps\" rel=\"noopener noreferrer\" target=\"_blank\">ReactJS Meetup</a>, so that\r\nis another area I&rsquo;d like to eventually explore.</p><p><br></p><p>To learn how you can contribute Apps, Articles and Extensions to the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a>, contact us at <a href=\"mailto:build@cosmicjs.com\"></a><a href=\"mailto:jobs@cosmicjs.com\">jobs@cosmicjs.com</a>.</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"wfWPjaQon4","value":"5768b27f163172890e00002e","object_type":"authors","object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"F8r4QPwgC2","value":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Dallas-based React Developer Joe Warren. Joe is a DevMountain graduate and currently interning with Call-em-All, an SMS technology platform based in Frisco, Texas. Follow Joe on GitHub and Twitter, and enjoy the Q/A.&nbsp;</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"oJ0j78dAXv","value":"525275d0-64ee-11e8-8d8f-270b3131d367-william-iven-11250-unsplash.jpg","url":"https://cdn.cosmicjs.com/525275d0-64ee-11e8-8d8f-270b3131d367-william-iven-11250-unsplash.jpg","imgix_url":"https://imgix.cosmicjs.com/525275d0-64ee-11e8-8d8f-270b3131d367-william-iven-11250-unsplash.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-05-31T16:07:41.165Z","created_by":"5716b504e9c686d006000073","created":"2018-05-31T16:07:41.165Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-07-19T19:29:12.812Z","unpublish_at":null,"metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this installment of the Cosmic Developer Spotlight Series, we sat down with Dallas-based React Developer Joe Warren. Joe is a DevMountain graduate and currently interning with Call-em-All, an SMS technology platform based in Frisco, Texas. Follow Joe on GitHub and Twitter, and enjoy the Q/A.&nbsp;</p>","featured_image":{"url":"https://cdn.cosmicjs.com/525275d0-64ee-11e8-8d8f-270b3131d367-william-iven-11250-unsplash.jpg","imgix_url":"https://imgix.cosmicjs.com/525275d0-64ee-11e8-8d8f-270b3131d367-william-iven-11250-unsplash.jpg"}}},{"_id":"5b0f00f1eba5cd26c721f728","order":68,"slug":"starter-apps-now-available","title":"Starter Apps Now Available 🔥","content":"<p><img src=\"https://cosmic-s3.imgix.net/aae1ab30-6444-11e8-b271-f1299268f696-node-react-vue.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>We have new <a href=\"https://www.cosmicjs.com/getting-started#quickstart\" rel=\"noopener noreferrer\" target=\"_blank\">starter apps</a> available to help you get started building Cosmic-powered apps faster and easier. &nbsp;We currently have three starter apps available for Node.js, React and Vue.js which you can install right from the comfort of the <a href=\"https://www.npmjs.com/package/cosmic-cli\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic CLI</a>. &nbsp;</p><p>To install a starter app open your command-line tool and run the following commands:<br><br></p><div class=\"fr-embedly          \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/763d43068e7f7d77705c20a52b5a4f9f' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/763d43068e7f7d77705c20a52b5a4f9f\" class=\"embedly-card\"></a></div><p>Check out the codebase for each app:</p><p><a href=\"https://github.com/cosmicjs/node-starter\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js Starter App</a><br><a href=\"https://github.com/cosmicjs/react-starter\" rel=\"noopener noreferrer\" target=\"_blank\">React Starter App</a><br><a href=\"https://github.com/cosmicjs/vue-starter\" rel=\"noopener noreferrer\" target=\"_blank\">Vue.js Starter App</a></p><p><br></p><p>Enjoy these new starter apps to start your Cosmic-powered project faster and easier. &nbsp;If you have any questions, reach out to us <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">on Twitter</a> and join the community <a href=\"https://www.cosmicjs.com/community/\" rel=\"noopener noreferrer\" target=\"_blank\">on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>We have new Starter Apps available to help you get started building Cosmic-powered apps faster and easier.</p>"},{"value":"aae1ab30-6444-11e8-b271-f1299268f696-node-react-vue.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/aae1ab30-6444-11e8-b271-f1299268f696-node-react-vue.jpg","imgix_url":"https://imgix.cosmicjs.com/aae1ab30-6444-11e8-b271-f1299268f696-node-react-vue.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-05-30T19:52:17.353Z","created_by":"5357ef811693be2118000001","created":"2018-05-30T19:52:17.353Z","status":"published","modified_at":"2020-08-10T16:04:56.383Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-05-31T13:27:59.817Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We have new Starter Apps available to help you get started building Cosmic-powered apps faster and easier.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/aae1ab30-6444-11e8-b271-f1299268f696-node-react-vue.jpg","imgix_url":"https://imgix.cosmicjs.com/aae1ab30-6444-11e8-b271-f1299268f696-node-react-vue.jpg"}}},{"_id":"5ae74a38ac3a613ec2ada543","order":69,"slug":"automatic-backups-now-available","title":"Automatic Backups Now Available 💾","content":"<p><img src=\"https://cosmic-s3.imgix.net/498621a0-4c97-11e8-b319-b572aa0d188f-S7cyjr_3prc.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>We&#39;re excited to announce you can now add automatic daily backups to your Buckets via the Automatic Daily Backups Add-on. &nbsp;To add daily Backups to your Buckets go to <a href=\"https://www.cosmicjs.com/buckets\">Your Bucket Dashboard &gt; Settings &gt; Backups</a>.<br><br><strong>How it works</strong><br>1. Add the Automatic Daily Backups Add-on in Bucket Dashboard &gt; Settings &gt; Billing.<br>2. Every day at 12am UTC a Backup of your Bucket will be saved.<br>3. You will be able to manually save a Snapshot of your Bucket at any time as well.<br>4. All Snapshots are available for easy download and restore.<br><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/13819a30-4c9c-11e8-b2b1-2df22a7d9f0b-bucket-backups.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>We hope you enjoy using the new Automatic Bucket Backups for peace of mind to know that every day your Bucket is saved as a Snapshot for easy backup and emergency restore. &nbsp;Management of Snapshots is easy with naming, deleting and downloading available.<br><br>If you have any questions, please reach to us on <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> and on <a href=\"https://www.cosmicjs.com/community/\" rel=\"noopener noreferrer\" target=\"_blank\">Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>We are happy to announce that you can now add automatically backup your Buckets via the Automatic Daily Backups Add-on. &nbsp;To add the peace of mind of daily Backups, go to Your Bucket Dashboard &gt; Settings &gt; Backups.</p>"},{"value":"498621a0-4c97-11e8-b319-b572aa0d188f-S7cyjr_3prc.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/498621a0-4c97-11e8-b319-b572aa0d188f-S7cyjr_3prc.jpg","imgix_url":"https://imgix.cosmicjs.com/498621a0-4c97-11e8-b319-b572aa0d188f-S7cyjr_3prc.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-04-30T16:54:16.796Z","created_by":"5357ef811693be2118000001","created":"2018-04-30T16:54:16.796Z","status":"published","modified_at":"2020-08-10T16:04:56.383Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-05-01T13:55:03.620Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We are happy to announce that you can now add automatically backup your Buckets via the Automatic Daily Backups Add-on. &nbsp;To add the peace of mind of daily Backups, go to Your Bucket Dashboard &gt; Settings &gt; Backups.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/498621a0-4c97-11e8-b319-b572aa0d188f-S7cyjr_3prc.jpg","imgix_url":"https://imgix.cosmicjs.com/498621a0-4c97-11e8-b319-b572aa0d188f-S7cyjr_3prc.jpg"}}},{"_id":"5ad7644306f6203b9ec49a41","order":70,"slug":"cosmic-cli-apps-release","title":"Cosmic CLI Apps Release 🛠️🚀","content":"<p><img src=\"https://cosmic-s3.imgix.net/d5557580-2610-11e8-ab11-0fc63395db5c-cosmic-cli.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>We&#39;re excited to announce new features for the <a href=\"https://www.npmjs.com/package/cosmic-cli\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic CLI</a> which are sure to speed up your workflow using <a href=\"https://www.cosmicjs.com/apps\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Apps</a>.</p><p>To install the latest release, in your preferred command-line tool, run the following command:</p><pre>npm i cosmic-cli -g</pre><p>With this latest Cosmic CLI release (1.1.0) you can now:<br><br></p><p><span style=\"font-size: 18px;\">🔍 Search Apps</span><br>You can search available Cosmic Apps with a simple command, which will give you a list of available apps that include a given keyword.</p><pre>cosmic browse-apps -q graphql</pre><p>Viewing apps in the browser is as easy as a command as well.</p><pre>cosmic view-app portfolio-website</pre><p><br><span style=\"font-size: 18px;\">⬇️ Install and Run Apps Locally</span><br>With a simple command, you can now install an App to your Bucket and download it locally. &nbsp;(CAREFUL! This will overwrite your entire Bucket contents with the App data) You will need to use the login, and use-bucket commands first.</p><pre>cosmic login\r\ncosmic use-bucket your-bucket-slug\r\ncosmic install-app portfolio-website</pre><p><br>Then run the app. &nbsp;It will automatically be connected to your Bucket.</p><pre>cosmic start-app</pre><p><br></p><p><span style=\"font-size: 18px;\">🚀 Deploy Apps</span><br>You can also deploy the App to the Cosmic App server by running:</p><pre>cosmic deploy-app</pre><p><br></p><p>You can also view the CLI steps on each App page by clicking the button &quot;Install via CLI&quot;:<br><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/354f4790-4321-11e8-a5bb-0368858b0123-install-app-cli.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>The Cosmic CLI is a great way to use all of the powerful features of the <a href=\"https://cosmicjs.github.io/rest-api-docs/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic API</a> from the comfort of your command-line tool. &nbsp;With this release, you now have some powerful capabilities to demo and deploy Cosmic Apps for faster development and collaboration.</p><p>If you have any questions about the <a href=\"https://www.npmjs.com/package/cosmic-cli\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic CLI</a>, <a href=\"https://www.cosmicjs.com/community/\" rel=\"noopener noreferrer\" target=\"_blank\">join us on Slack</a> and <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>The Cosmic CLI is a great way to use all of the powerful features of the Cosmic API from the comfort of your command-line tool. &nbsp;With this release, you now have some powerful capabilities to demo and deploy Cosmic Apps for faster development and collaboration.</p>"},{"value":"d5557580-2610-11e8-ab11-0fc63395db5c-cosmic-cli.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/d5557580-2610-11e8-ab11-0fc63395db5c-cosmic-cli.jpg","imgix_url":"https://imgix.cosmicjs.com/d5557580-2610-11e8-ab11-0fc63395db5c-cosmic-cli.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-04-18T15:29:07.054Z","created_by":"5357ef811693be2118000001","created":"2018-04-18T15:29:07.055Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-04-18T16:20:04.364Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>The Cosmic CLI is a great way to use all of the powerful features of the Cosmic API from the comfort of your command-line tool. &nbsp;With this release, you now have some powerful capabilities to demo and deploy Cosmic Apps for faster development and collaboration.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/d5557580-2610-11e8-ab11-0fc63395db5c-cosmic-cli.jpg","imgix_url":"https://imgix.cosmicjs.com/d5557580-2610-11e8-ab11-0fc63395db5c-cosmic-cli.jpg"}}},{"_id":"5ad35d2769c6bb4292851ff3","order":71,"slug":"developer-spotlight-aaron-vail","title":"Developer Spotlight: Aaron Vail","content":"<p><img src=\"https://cosmic-s3.imgix.net/c43d0900-40b6-11e8-9919-e3487fdc7656-goran-ivos-422398-unsplash.jpg?w=1000\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>In this latest installment of the Cosmic Developer Spotlight Series, we sat down with <a href=\"https://www.cosmicjs.com/avail\" rel=\"noopener noreferrer\" target=\"_blank\">Aaron Vail</a>, a Google Analytics Implementation Analyst and Software Developer at <a href=\"https://www.mainevent.com\" rel=\"noopener noreferrer\" target=\"_blank\">Main Event Entertainment</a>&#39;s corporate headquarters in Plano, Texas. Check him out on <a href=\"https://twitter.com/Aaron_Vail\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> and <a href=\"https://www.linkedin.com/in/aaronvail/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a>, and enjoy the Q/A.</p><p><br></p><p><strong>Cosmic: How long have you been building software?<br></strong>Aaron Vail: I was first introduced to web development when I was 13. I received a book titled <em>Web Design for Teens</em> that tought the basics of HTML and CSS and how they interact with each other. I really haven&#39;t stopped learning since. As my skills grew and and my abilities got sharper I began developing websites for my friends and family. This turned into several freelance projects throughout highschool. Professionally I&#39;ve been building web experiences for 5 years.</p><p><br></p><p><strong>What is your preferred development stack?<br></strong>I love exploring new development stacks and expanding my knowledge but my main &quot;go to&quot; recently has been <a href=\"https://www.cosmicjs.com/knowledge-base/vuejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Vue</a> and <a href=\"https://www.cosmicjs.com/knowledge-base/vuejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Nuxt</a>. Though I still consider myself a novice after working with it for about 3 months, for a lot of small projects I prefer <a href=\"https://www.cosmicjs.com/blog/how-to-build-a-jamstack-website\" rel=\"noopener noreferrer\" target=\"_blank\">JAMstack</a> which is a mix of JavaScript, Markup, and an API for delivering content and functionality. This is why platforms like Cosmic are very appealing to me.</p><p><br></p><p><strong>What past projects are you most proud of and why?<br></strong>I don&#39;t really have any specific project I&#39;m most proud of. Mostly due to the fact that past projects are usually limited to what I knew at the time. For example when I see\r\na screenshot of some of the first websites I built I cringe. A lot of the professional projects I&#39;ve worked on are for internal organizations so I do not have the liberty of speaking about them.</p><p><br></p><p><strong>Talk a little bit more about your process for building apps. Are they for external or internal audiences? <br></strong>At the moment most of my work with Cosmic has been for personal projects as I learn the platform and the different methods\r\nof implementation. However, from my experience in web development it&#39;s very apparent that Cosmic has real potential to help speed up project workflows and content management tenfold. I especially like the performance of hosting images because of\r\nthe imgix implementation with Cosmic. I can actually see companies being built off of this API to more broadly serve the B2B side of things as well as the average consumer.</p><p><br></p><p><strong>What are some technologies you are excited about that you are using today, or want to learn more about?<br></strong>I&#39;m really excited about VueJS and the direction it&#39;s going, the community behind it is awesome and seeing the different\r\nthings people are building with the framework. It&#39;s a lot of fun to work with and explore the different use cases that are possible.&nbsp;</p><p>In my time using Cosmic it&#39;s been really interesting seeing how well it interacts and works with different front-end frameworks such as Vue. I love working with language agnostic APIs because it makes sense if later during the evolution of applications\r\nthey occasionally change frameworks, and if that does happen the APIs can still work meaning less technical debt in the long run.</p><p data-empty=\"true\">To learn how you can contribute Apps, Articles and Extensions to the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a>, contact us at <a href=\"mailto:support@cosmicjs.com\"></a><a href=\"mailto:build@cosmicjs.com\">build@cosmicjs.com</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In this latest installment of the Cosmic Developer Spotlight Series, we sat down with Aaron Vail, a Google Analytics Implementation Analyst and Software Developer at <a href=\"https://www.mainevent.com\" rel=\"noopener noreferrer\" target=\"_blank\">Main Event Entertainment</a>&#39;s corporate headquarters in Plano, Texas. Check him out on <a href=\"\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> and <a href=\"https://www.linkedin.com/in/aaronvail/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a>, and enjoy the Q/A.</p>"},{"value":"a25d01f0-40b6-11e8-a16d-95942e947e38-goran-ivos-422398-unsplash.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/a25d01f0-40b6-11e8-a16d-95942e947e38-goran-ivos-422398-unsplash.jpg","imgix_url":"https://imgix.cosmicjs.com/a25d01f0-40b6-11e8-a16d-95942e947e38-goran-ivos-422398-unsplash.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-04-15T14:09:43.778Z","created_by":"5716b504e9c686d006000073","created":"2018-04-15T14:09:43.778Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-04-16T14:23:36.141Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this latest installment of the Cosmic Developer Spotlight Series, we sat down with Aaron Vail, a Google Analytics Implementation Analyst and Software Developer at <a href=\"https://www.mainevent.com\" rel=\"noopener noreferrer\" target=\"_blank\">Main Event Entertainment</a>&#39;s corporate headquarters in Plano, Texas. Check him out on <a href=\"\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> and <a href=\"https://www.linkedin.com/in/aaronvail/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a>, and enjoy the Q/A.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/a25d01f0-40b6-11e8-a16d-95942e947e38-goran-ivos-422398-unsplash.jpg","imgix_url":"https://imgix.cosmicjs.com/a25d01f0-40b6-11e8-a16d-95942e947e38-goran-ivos-422398-unsplash.jpg"}}},{"_id":"5abab131c3814526f15596d8","order":72,"slug":"new-website-boilerplates","title":"New Website Boilerplates 🛠️🚀","content":"<p><img src=\"https://cosmic-s3.imgix.net/9d4bb260-3201-11e8-a2ad-a381da7b0841-next-nuxt-cosmic.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>Website boilerplates are a great way to jump-start your new development project. We&#39;re excited to announce the addition of our <a href=\"https://github.com/cosmicjs/nextjs-website-boilerplate\" rel=\"noopener noreferrer\" target=\"_blank\">Next.js</a> and <a href=\"https://github.com/cosmicjs/nuxtjs-website-boilerplate\" rel=\"noopener noreferrer\" target=\"_blank\">Nuxt.js</a> Website Boilerplates which connect to your Cosmic Bucket for easy content management. &nbsp;Check them out below:<a href=\"https://github.com/cosmicjs/nextjs-website-boilerplate\" rel=\"noopener noreferrer\" target=\"_blank\"></a><br><a href=\"https://github.com/cosmicjs/nextjs-website-boilerplate\" rel=\"noopener noreferrer\" target=\"_blank\"></a><br><a href=\"https://github.com/cosmicjs/nextjs-website-boilerplate\" rel=\"noopener noreferrer\" target=\"_blank\">Click here to view the Next.js Boilerplate</a><br><a href=\"https://github.com/cosmicjs/nuxtjs-website-boilerplate\" rel=\"noopener noreferrer\" target=\"_blank\">Click here to view the Nuxt.js Boilerplate</a><br><br></p><p>React and Vue are two of the most beloved JavaScript frameworks. And <a href=\"https://github.com/zeit/next.js/\" rel=\"noopener noreferrer\" target=\"_blank\">Next.js</a> and <a href=\"https://nuxtjs.org/\" rel=\"noopener noreferrer\" target=\"_blank\">Nuxt.js</a> add to the value these frameworks give you. &nbsp;They provide some great out-of-the-box features including built-in routing, server-side rendering and a killer developer experience.</p><p>We also also offer a Node.js website boilerplate for those that would rather stay server-side:<a href=\"https://github.com/cosmicjs/nodejs-website-boilerplate\" target=\"_blank\" rel=\"noopener noreferrer\"></a><br><a href=\"https://github.com/cosmicjs/nodejs-website-boilerplate\" rel=\"noopener noreferrer\" target=\"_blank\">Click here to view the Node.js Website Boilerplate</a></p><p>Reach out to us <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">on Twitter</a> and build with us <a href=\"https://www.cosmicjs.com/community/\" rel=\"noopener noreferrer\" target=\"_blank\">on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>We&#39;re happy to offer website boilerplates for both of these powerful frameworks that give you out-of-the-box connection to your Cosmic Bucket.</p>"},{"value":"9d4bb260-3201-11e8-a2ad-a381da7b0841-next-nuxt-cosmic.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/9d4bb260-3201-11e8-a2ad-a381da7b0841-next-nuxt-cosmic.jpg","imgix_url":"https://imgix.cosmicjs.com/9d4bb260-3201-11e8-a2ad-a381da7b0841-next-nuxt-cosmic.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-03-27T21:01:37.373Z","created_by":"5357ef811693be2118000001","created":"2018-03-27T21:01:37.373Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2018-03-28T13:54:16.275Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We&#39;re happy to offer website boilerplates for both of these powerful frameworks that give you out-of-the-box connection to your Cosmic Bucket.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/9d4bb260-3201-11e8-a2ad-a381da7b0841-next-nuxt-cosmic.jpg","imgix_url":"https://imgix.cosmicjs.com/9d4bb260-3201-11e8-a2ad-a381da7b0841-next-nuxt-cosmic.jpg"}}},{"_id":"5ab5356056cc597b400d64ca","order":73,"slug":"quick-add-object-relationships-now-available","title":"Quick Add Object Relationships Now Available","content":"<p><img src=\"https://cosmic-s3.imgix.net/896ec790-2ebf-11e8-8e5b-5d4ed5aad925-quick-add-object.png?w=1000\" style=\"width: 100%;\" class=\"fr-fil fr-dib\"><br><br>You can now quickly add Objects to your Bucket directly from Object Relationship Metafields. &nbsp;We&#39;re always looking for ways to speed up the work flow for building apps and managing content. &nbsp;And this new feature is sure to\r\nbe a time-saver for those of you who use Object Relationship Metafields.&nbsp;</p><p>The gif below shows an example of a Book Store Bucket. &nbsp;Now you can add a new Book directly to an Author Object from the &quot;Quick Add&quot; button on the Relationship Metafield. &nbsp;This saves you quite a few clicks and makes adding new Object Relationships super fast and easy!</p><p><br><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/8c7e9c70-2ebb-11e8-b33a-671bae65f84c-add-object-inline.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Here are the steps to use the Quick Add feature:</p><p>1. Add a new (or view existing) Object Relationship Metafield to any Object.<br>2. Click the &quot;Quick Add&quot; button on the Metafield.<br>3. Add your new Object via the modal form.<br>4. It will automagically add the Object to your Bucket and select the value in the Metafield.<br>(4.5. Add more Objects if you like!)<br>5. Save your Main Object.</p><p>We&#39;re always on the lookout for new features that will benefit our community of builders. &nbsp;If you have any questions, comments or suggestions, <a href=\"https://www.cosmicjs.com/community/\" rel=\"noopener noreferrer\" target=\"_blank\">join our Slack channel</a> and <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>We are always looking for ways to speed up the work flow for building apps and managing content. &nbsp;And this new feature is sure to be a time-saver for many who use Object Relationship Metafields. &nbsp;</p>"},{"value":"d8f292c0-2ebe-11e8-ac83-91ff76a973a4-lance-anderson-256077-unsplash.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/d8f292c0-2ebe-11e8-ac83-91ff76a973a4-lance-anderson-256077-unsplash.jpg","imgix_url":"https://imgix.cosmicjs.com/d8f292c0-2ebe-11e8-ac83-91ff76a973a4-lance-anderson-256077-unsplash.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-03-23T17:12:00.053Z","created_by":"5357ef811693be2118000001","created":"2018-03-23T17:12:00.053Z","status":"published","modified_at":"2020-08-10T16:04:56.383Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We are always looking for ways to speed up the work flow for building apps and managing content. &nbsp;And this new feature is sure to be a time-saver for many who use Object Relationship Metafields. &nbsp;</p>","featured_image":{"url":"https://cdn.cosmicjs.com/d8f292c0-2ebe-11e8-ac83-91ff76a973a4-lance-anderson-256077-unsplash.jpg","imgix_url":"https://imgix.cosmicjs.com/d8f292c0-2ebe-11e8-ac83-91ff76a973a4-lance-anderson-256077-unsplash.jpg"}}},{"_id":"5aa6a6c7c299803f1ade2f79","order":74,"slug":"introducing-the-cosmic-cli","title":"Introducing the Cosmic CLI 🎉","content":"<p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/d5557580-2610-11e8-ab11-0fc63395db5c-cosmic-cli.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>After much development and preparation, we are excited to announce the release of <a data-cke-saved-href=\"https://github.com/cosmicjs/cosmic-cli\" href=\"https://github.com/cosmicjs/cosmic-cli\" rel=\"noopener noreferrer\" target=\"_blank\">the official Cosmic CLI</a>.</p><p>The Cosmic CLI puts you in the cockpit of your Cosmic Dashboard, giving you access to the powerful features of the Cosmic API, all from the comfort of your command line interface.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/a10fa780-2635-11e8-a757-d316dd04a572-cosmic-cli.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>Available commands allow you to:</p><ul><li>Login to your account</li><li>Add Buckets to your account</li><li>Add Object Types to your Bucket</li><li>Add Objects to your Bucket</li><li>Get Objects from your Bucket</li><li>Add Media to your Bucket</li><li>Add Users to your Bucket</li><li>and more...</li></ul><p>To learn more and for a list of all available commands, check out <a href=\"https://github.com/cosmicjs/cosmic-cli\" rel=\"noopener noreferrer\" target=\"_blank\">the GitHub repo</a>.</p><p>We know you&#39;re going to love the new Cosmic CLI. &nbsp;This is another way that we hope to empower you and your team to build modern apps faster and easier. &nbsp;If you have any comments or suggestions <a href=\"https://www.cosmicjs.com/community/\" rel=\"noopener noreferrer\" target=\"_blank\">join our Slack community</a> and <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>The Cosmic CLI puts you in the cockpit of your Cosmic Dashboard, giving you access to the powerful features of the Cosmic API, all from the comfort of your command line interface.</p>"},{"value":"d5557580-2610-11e8-ab11-0fc63395db5c-cosmic-cli.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/d5557580-2610-11e8-ab11-0fc63395db5c-cosmic-cli.jpg","imgix_url":"https://imgix.cosmicjs.com/d5557580-2610-11e8-ab11-0fc63395db5c-cosmic-cli.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-03-13T16:11:51.846Z","created_by":"5357ef811693be2118000001","created":"2018-03-13T16:11:51.846Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>The Cosmic CLI puts you in the cockpit of your Cosmic Dashboard, giving you access to the powerful features of the Cosmic API, all from the comfort of your command line interface.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/d5557580-2610-11e8-ab11-0fc63395db5c-cosmic-cli.jpg","imgix_url":"https://imgix.cosmicjs.com/d5557580-2610-11e8-ab11-0fc63395db5c-cosmic-cli.jpg"}}},{"_id":"5a9d6ff9e74dca19e0ebfd1f","order":75,"slug":"new-dashboard-redesign","title":"New Dashboard Redesign","content":"<p><img src=\"https://cosmic-s3.imgix.net/139c1e80-2093-11e8-a436-27f675d7ccc4-scott-webb-272211-unsplash.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>We&#39;re excited to announce a big update to the <a href=\"https://www.cosmicjs.com/login\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Dashboard</a>. &nbsp;It&#39;s our mission to help you build modern apps faster and our new Dashboard redesign is\r\nsure to make your app development experience faster, more efficient and more enjoyable.</p><p>To check out the changes for yourself, <a href=\"https://www.cosmicjs.com/login\" rel=\"noopener noreferrer\" target=\"_blank\">log in to your Cosmic account</a>. &nbsp;Here are some of the improvements we&#39;ve made:<br><br><strong>Light Theme Carried Over</strong><br>The light theme is now consistent across public and private Dashboard pages.</p><p><br><img src=\"https://cosmic-s3.imgix.net/48645cb0-214f-11e8-b5e7-7d0e9cdab13a-cosmicjs-dashboard.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><p><strong>Tight and Centered</strong><br>You will notice that all Dashboard pages are now contained and centered in the screen to provide greater efficiency of motion (no more long mouse scrolls on larger screens!)</p><p><br><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/df4a85f0-2091-11e8-9d98-43fb3899a1ef-new-dashboard.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><p>Thank you to all of our <a href=\"https://www.cosmicjs.com/community\">community members</a> for feedback and help with the redesign. &nbsp;If you have any questions or comments, we&#39;d love to hear from you. &nbsp;<a href=\"https://www.cosmicjs.com/community/\" rel=\"noopener noreferrer\" target=\"_blank\">Connect with us on Slack</a> or <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">shout to us on Twitter</a>.</p><p><br></p><p>Photo by <a href=\"https://unsplash.com/photos/OxHPDs4WV8Y?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Scott Webb</a> on <a href=\"https://unsplash.com/?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Unsplash</a></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>We&#39;re excited to push a big redesign to the Cosmic Dashboard which you should immediately notice after logging in.</p>"},{"value":"139c1e80-2093-11e8-a436-27f675d7ccc4-scott-webb-272211-unsplash.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/139c1e80-2093-11e8-a436-27f675d7ccc4-scott-webb-272211-unsplash.jpg","imgix_url":"https://imgix.cosmicjs.com/139c1e80-2093-11e8-a436-27f675d7ccc4-scott-webb-272211-unsplash.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-03-06T16:27:37.421Z","created_by":"5357ef811693be2118000001","created":"2018-03-06T16:27:37.421Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We&#39;re excited to push a big redesign to the Cosmic Dashboard which you should immediately notice after logging in.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/139c1e80-2093-11e8-a436-27f675d7ccc4-scott-webb-272211-unsplash.jpg","imgix_url":"https://imgix.cosmicjs.com/139c1e80-2093-11e8-a436-27f675d7ccc4-scott-webb-272211-unsplash.jpg"}}},{"_id":"5a70b7383432953f341fb17a","order":76,"slug":"new-apps-page","title":"New Apps Page ","content":"<p><img src=\"https://cosmic-s3.imgix.net/578b6a70-05ee-11e8-977e-11d8a6308b6f-imac-apple-mockup-app-38544.jpg?w=900\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>Thanks to the Cosmic <a href=\"https://www.cosmicjs.com/developers\" rel=\"noopener noreferrer\" target=\"_blank\">Community</a>, we have some great Cosmic-powered apps available for easy install. &nbsp;Pre-built applications offer teams the ability to get started building apps even faster and we are excited to announce a big update to our <a href=\"https://www.cosmicjs.com/apps\">Apps page</a>.<br><br>Along with an updated design and layout, the Apps page now includes a super simple search at the top of the page. &nbsp; Simply type your query into the search bar, either by programming language, use case or keyword.</p><p style=\"text-align: center;\"><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/87680460-05e9-11e8-977e-11d8a6308b6f-new-apps.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>This is another way that we are helping you build apps faster and easier with Cosmic. If you have any questions or suggestions, please <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a>and join the <a href=\"https://www.cosmicjs.com/community\">Cosmic Community on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>We are excited to announce a big update to our <a href=\"https://www.cosmicjs.com/apps\">Apps page</a>.</p>"},{"value":"436fb5f0-05ee-11e8-977e-11d8a6308b6f-imac-apple-mockup-app-38544.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/436fb5f0-05ee-11e8-977e-11d8a6308b6f-imac-apple-mockup-app-38544.jpg","imgix_url":"https://imgix.cosmicjs.com/436fb5f0-05ee-11e8-977e-11d8a6308b6f-imac-apple-mockup-app-38544.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-01-30T18:19:36.679Z","created_by":"5716b504e9c686d006000073","created":"2018-01-30T18:19:36.679Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We are excited to announce a big update to our <a href=\"https://www.cosmicjs.com/apps\">Apps page</a>.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/436fb5f0-05ee-11e8-977e-11d8a6308b6f-imac-apple-mockup-app-38544.jpg","imgix_url":"https://imgix.cosmicjs.com/436fb5f0-05ee-11e8-977e-11d8a6308b6f-imac-apple-mockup-app-38544.jpg"}}},{"_id":"5a68a99fbbdcac08491ab778","order":77,"slug":"dev-spotlight-kevin-grossnicklaus","title":"Dev Spotlight: Kevin Grossnicklaus","content":"<p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/09a0afe0-008b-11e8-b0b9-f73a7cf3003d-image005.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>In this <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> Developer Spotlight, we sat down with <a href=\"https://www.linkedin.com/in/kvgros/\" rel=\"noopener noreferrer\" target=\"_blank\">Kevin Grossnicklaus</a>, Principal of <a href=\"http://architectnow.net\" rel=\"noopener noreferrer\" target=\"_blank\">ArchitectNow</a>, a St. Louis-based software development firm that specializes in helping customers design, build, and launch rich web and mobile applications across a variety of industries. &nbsp;Kevin and his team recently launched a new client project called <a href=\"https://www.vendorsurf.com\" rel=\"noopener noreferrer\" target=\"_blank\">VendorSurf</a> built using Cosmic. Check them out on <a href=\"https://twitter.com/architectnow\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> or <a href=\"https://www.linkedin.com/company/485956/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a>, and enjoy the Q/A.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/8237e9c0-011a-11e8-88be-b7a46e521905-14e3949.jpg\" style=\"width: 300px; margin-right: 25px; margin-bottom: 25px;\" align=\"left\" class=\"fr-fil fr-dii\"></p><p><strong>How long have you been building software?</strong><br>I got my start as a 12-year-old in central Nebraska back in the mid-80&rsquo;s. &nbsp;My parents got me an Apple IIgs that came with no software and a book called &ldquo;A Touch of Applesoft Basic&rdquo;. &nbsp;If I wanted the computer to do anything I was forced to tell it what and how. &nbsp;To be fair, I did start buying packaged software, but I also dove headfirst into teaching myself to code (back before it was &ldquo;cool&rdquo;). &nbsp;Oddly enough I just recently purchased another Apple IIgs as I had sold my original when I was 19 so that I could buy a guitar. I also dug up all my old floppy disks (which I had kept in storage) and was able to get access to all my original programs. With everything we do today it was a fascinating process to be able to see the original programs I had ever written. I wrote a blog post about the process which you may find interesting. &nbsp;You can find it <a href=\"http://architectnow.net/2017/11/touch-applesoft-basic/\" rel=\"noopener noreferrer\" target=\"_blank\">here</a>. <a href=\"http://architectnow.net/2017/11/touch-applesoft-basic/\"></a></p><p><br></p><p><strong>What is your preferred development stack?</strong><br>At ArchitectNow our tech stack and areas of focus have changed dramatically over the course of the last 10 years. &nbsp; The industry drives a lot of that and the capabilities of our team drives some of it. Right now, we are heavily into Angular, TypeScript, <a href=\"http://asp.net/\"></a><a href=\"//ASP.NET\"></a><a href=\"//ASP.NET\">ASP.NET</a> Core/C#, Xamarin, MongoDB, all things Azure. &nbsp;The great thing about a smaller development shop like ours is that we get the opportunity to work with a ton of languages and platforms. &nbsp;We also get to utilize 3<sup>rd</sup> party components and APIs (such as Cosmic) in a number of scenarios. &nbsp;This gives us the ability to pick and choose the best platform and tools for a given project. &nbsp;We&rsquo;ve hit a lot of homeruns in our choice of technologies and 3<sup>rd</sup> party tools but we&rsquo;ve also used some we wouldn&rsquo;t recommend. &nbsp;A key benefit we bring to our customers is the knowledge of what we&rsquo;ve found that &ldquo;works&rdquo; and what doesn&rsquo;t.</p><p><br></p><p><strong>What past projects are you most proud of and why?</strong><br>We have been very fortunate to work for a large number of great customers on some very cutting-edge projects. &nbsp; Our customers range from Fortune 500 enterprise customers (where our apps may be used either internally or as part of their external facing offerings) to startups launching either consumer facing or business-to-business applications.&nbsp;</p><p>The projects I personally enjoy the most are those that leverage new technology in a creative and clever way that isn&rsquo;t simply data-in/data-out. &nbsp; It&rsquo;s also great fun when we get the opportunity to take full advantage of mobile devices and integrate with 3<sup>rd</sup> party devices or leverage device specific functionality such as scanning or GPS in a creative way.</p><p><br></p><p><strong>Talk a little bit more about your process for building apps - who&rsquo;s using them? What purpose do they serve?</strong><br>As mentioned above we are very flexible when it comes to the platforms we utilize to build great software. &nbsp; Customers do not come to us for the &ldquo;cookie-cutter&rdquo; WordPress site or standard marketing website. &nbsp; We are engaged when people need a highly scalable and robust architecture and a rich user experience. &nbsp; Sometimes that&rsquo;s for internal enterprise apps and, in other scenarios, that is for rich consumer facing apps or websites. &nbsp; Our team is very hands on with customers in terms of managing the Agile development process, recommending alternative solutions to complex problems, and assisting them in identifying creative ways to leverage technologies we may be aware of to better build or grow their products. &nbsp;</p><p><br></p><p><strong>What are some technologies you are excited about that you are using today, or want to learn more about?</strong><br>I have focused on building a team of individuals who love to learn new technologies. &nbsp; You would be amazed at how much time some of the individual ArchitectNow team members spend in their off-hours simply focused on learning. &nbsp;I have developers who spend nearly every night and weekend focused on getting through online courses on new technologies just to get better at what they do. &nbsp; These are people passionate about what they do and who are excited about what technologies are available today.</p><p>In terms of the things we are growing into at ArchitectNow that lean towards the cutting edge of technology I would say that the Internet of Things (IoT) is very exciting. &nbsp;We have some customers really looking at creative ways to leverage hardware, software, and the ubiquitous computing power and scale of the Cloud to grow their capabilities. &nbsp;Those are really fun things to think about and work on. &nbsp;</p><p>That said, for me personally, I&rsquo;m excited about a lot of the things I see in the game space. &nbsp;I&rsquo;m a big fan of Unity lately and am working with some of my friends and coworkers to get a few Unity/C# games out in the app stores. &nbsp; When I was younger I wanted to be a game developer. &nbsp;I even went to college to achieve that goal. &nbsp; Nowadays it&rsquo;s more of a hobby but one that I&rsquo;m focused pretty heavily on recently. &nbsp; There isn&rsquo;t much difference between the process of designing and building a large Angular/MongoDB application for a startup and the design and implementation of a game in Unity. &nbsp; It&rsquo;s the same skills with a slightly different audience. &nbsp;</p><p>Learn more about ArchitectNow and its VendorSurf project by reading the Case Study:</p><p><br></p><div class=\"fr-embedly \" data-original-embed=\"<a href='https://www.cosmicjs.com/case-studies/architectnow-builds-a-vendor-search-engine' class='embedly-card'></a>\"><a href=\"https://www.cosmicjs.com/case-studies/architectnow-builds-a-vendor-search-engine\" class=\"embedly-card\"></a></div><p>To learn how you can contribute Apps, Articles and Extensions to the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a>, contact us at <a href=\"mailto:build@cosmicjs.com\">build@cosmicjs.com</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In this Cosmic Developer Spotlight, we sat down with Kevin Grossnicklaus, Principal of ArchitectNow, a St. Louis-based software development firm that specializes in helping customers design, build, and launch rich web and mobile applications across a variety of industries.</p>"},{"value":"e98be280-0696-11e8-8c83-91b31c84f95d-architect-now.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e98be280-0696-11e8-8c83-91b31c84f95d-architect-now.jpg","imgix_url":"https://imgix.cosmicjs.com/e98be280-0696-11e8-8c83-91b31c84f95d-architect-now.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-01-24T15:43:27.495Z","created_by":"5716b504e9c686d006000073","created":"2018-01-24T15:43:27.495Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this Cosmic Developer Spotlight, we sat down with Kevin Grossnicklaus, Principal of ArchitectNow, a St. Louis-based software development firm that specializes in helping customers design, build, and launch rich web and mobile applications across a variety of industries.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/e98be280-0696-11e8-8c83-91b31c84f95d-architect-now.jpg","imgix_url":"https://imgix.cosmicjs.com/e98be280-0696-11e8-8c83-91b31c84f95d-architect-now.jpg"}}},{"_id":"5a6748a9c834da78ab7e9558","order":78,"slug":"developer-spotlight-brian-ray","title":"Developer Spotlight: Brian Ray","content":"<p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/e7a40240-004c-11e8-83e1-33ca065dc2a4-Screen Shot 2018-01-23 at 8.50.18 AM.png?w=1200\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p dir=\"ltr\">In this <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> Developer Spotlight, we sat down with <a href=\"https://www.cosmicjs.com/brays\" rel=\"noopener noreferrer\" target=\"_blank\">Brian Ray</a>, an Austin-based web developer who focuses on building applications on modern stacks with his agency <a href=\"https://github.com/nomad-javascript\" rel=\"noopener noreferrer\" target=\"_blank\">Nomad JS</a>. &nbsp;Check him out on <a href=\"https://twitter.com/b_f_ray\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> or <a href=\"https://github.com/b-rays\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, and enjoy the Q/A.</p><p dir=\"ltr\"><br></p><p dir=\"ltr\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/b86552d0-004d-11e8-9f74-c182a209ec69-6308027.jpg\" style=\"width: 300px; margin-right: 25px; margin-bottom: 25px;\" align=\"left\" class=\"fr-fic fr-dii fr-fil\"></p><p dir=\"ltr\"><strong>How long have you been building software?</strong><br>As a kid, I was very interested in Gaming PCs, &nbsp;RAM, Graphics Card, CPU processing speeds and Computer Games. At my last sales role, we built web scrapers and always used the latest marketing automation software. After a trip around Southeast Asia, I decided to become a web developer full time. &nbsp;Over the past two years, I&rsquo;ve built various web applications from start ups to hackathon projects and developed a passion for web development. &nbsp;Most recently, I launched an agency, <a href=\"https://github.com/nomad-javascript\" rel=\"noopener noreferrer\" target=\"_blank\">Nomad JS</a>, focused on JavaScript web development and freelancing. &nbsp;<br><br><strong>What is your preferred development stack?</strong><br>My preferred stack is JavaScript, Node and React. On the backend: &nbsp;MongoDB or CosmicJS.<br><br><strong>What past projects are you most proud of and why?</strong><br><strong><a href=\"https://www.cosmicjs.com/apps/react-blog\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic React Blog</a></strong><strong>:</strong> I decided to build a blogging platform and underestimated the time and effort required. You have to build a text editor, &nbsp;database, authentication system, etc. and it&rsquo;s a lot of work for something so simple. I abandoned my project, threw it on GitHub, and found Cosmic. You&rsquo;ve heard it before, don&rsquo;t reinvent the wheel. Cosmic has an authentication system, JSON Buckets, an awesome text editor, so you don&rsquo;t have to waste development building your own CMS. Cosmic &amp; React Blog allowed me to spend more time on design and front end development. The support and appreciation I&rsquo;ve received from Carson, Tony, and the Cosmic community really makes <a href=\"https://www.cosmicjs.com/apps/react-blog\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic React Blog</a> stand out.</p><p dir=\"ltr\"><strong>RooferX:&nbsp;</strong>My friend, Kyle, and I met as Commercial Roofing Salesmen and a few years later decided to launch a web app in the industry. We had a rough idea of where we wanted to go with the RooferX but lacked software experience. Looking back at our old code, it was an awesome learning experience. &nbsp;RooferX never really took off, but we had a great time trying.<br><br><strong>Talk a little bit more about your process for building apps. Are they for clients or internal audiences?&nbsp;</strong><br>It&rsquo;s roughly a 50/50 split between client and internal audiences. For personal apps, I try to find a repetitive task and automate it. From a web development standpoint, I like to build out the apps architecture, functionality, and then add design.&nbsp;</p><p dir=\"ltr\"><a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> speeds up my development time by taking care of Databases and REST APIs, so I can spend more time in the browser. As we learned with Cosmic React Blog, you can save yourself a lot time not reinventing the wheel with the every new project!<br><br><strong>What are some technologies you are excited about that you are using today, or want to learn more about?</strong><br>Vue and Elm would be at the top of my Front End Developer list for 2018. &nbsp;</p><p>To learn how you can contribute Apps, Articles and Extensions to the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a>, contact us at <a href=\"mailto:support@cosmicjs.com\"></a><a href=\"mailto:support@cosmicjs.com\">support@cosmicjs.com</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In this Cosmic Developer Spotlight, we sat down with Brian Ray, an Austin-based web developer who focuses on building applications on modern stacks with his agency Nomad JS.</p>"},{"value":"ca71cbd0-004c-11e8-9f74-c182a209ec69-Screen Shot 2018-01-23 at 8.50.18 AM.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/ca71cbd0-004c-11e8-9f74-c182a209ec69-Screen Shot 2018-01-23 at 8.50.18 AM.png","imgix_url":"https://imgix.cosmicjs.com/ca71cbd0-004c-11e8-9f74-c182a209ec69-Screen Shot 2018-01-23 at 8.50.18 AM.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-01-23T14:37:29.013Z","created_by":"5716b504e9c686d006000073","created":"2018-01-23T14:37:29.013Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this Cosmic Developer Spotlight, we sat down with Brian Ray, an Austin-based web developer who focuses on building applications on modern stacks with his agency Nomad JS.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/ca71cbd0-004c-11e8-9f74-c182a209ec69-Screen Shot 2018-01-23 at 8.50.18 AM.png","imgix_url":"https://imgix.cosmicjs.com/ca71cbd0-004c-11e8-9f74-c182a209ec69-Screen Shot 2018-01-23 at 8.50.18 AM.png"}}},{"_id":"5a6244968512291e99511912","order":79,"slug":"code-snippets-now-available","title":"Code Snippets Now Available","content":"<p><img src=\"https://cosmic-s3.imgix.net/2fd0f2c0-fd60-11e7-8b84-c965fbec65c1-dmitri-popov-69419.jpg?w=1300\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>Earlier this week we released our <a href=\"https://www.cosmicjs.com/blog/new-rest-api-docs-and-npm-module\" rel=\"noopener noreferrer\" target=\"_blank\">new NPM module and REST API docs</a> and the <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">response has been amazing</a>. <span class=\"fr-emoticon fr-deletable\">😄</span>&nbsp;<br><br>To make it even easier to get familiar with the new NPM module API, and faster to add dynamic content to your apps, you now have code snippets available in your Dashboard.<br><br>To find the snippets, simply click the code icon on the API endpoint and choose between JavaScript or cURL (more languages coming soon!). &nbsp;The code works as is!</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/0de33010-fd60-11e7-8b84-c965fbec65c1-cosmic-code-snippets.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p>This is another way that we are helping you build apps faster and easier with Cosmic. If you have any questions or suggestions, please <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a>and join the <a href=\"https://www.cosmicjs.com/community\">Cosmic Community on Slack</a>.</p><p>Photo by <a href=\"https://unsplash.com/photos/2F3qMiL_iXI?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Dmitri Popov</a> on <a href=\"https://unsplash.com/search/photos/blue%20architecture?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Unsplash</a></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>Earlier this week we released our new NPM module and REST API docs and the response has been amazing\n😄&nbsp;</p>"},{"value":"2fd0f2c0-fd60-11e7-8b84-c965fbec65c1-dmitri-popov-69419.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2fd0f2c0-fd60-11e7-8b84-c965fbec65c1-dmitri-popov-69419.jpg","imgix_url":"https://imgix.cosmicjs.com/2fd0f2c0-fd60-11e7-8b84-c965fbec65c1-dmitri-popov-69419.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-01-19T19:18:46.868Z","created_by":"5357ef811693be2118000001","created":"2018-01-19T19:18:46.868Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>Earlier this week we released our new NPM module and REST API docs and the response has been amazing\n😄&nbsp;</p>","featured_image":{"url":"https://cdn.cosmicjs.com/2fd0f2c0-fd60-11e7-8b84-c965fbec65c1-dmitri-popov-69419.jpg","imgix_url":"https://imgix.cosmicjs.com/2fd0f2c0-fd60-11e7-8b84-c965fbec65c1-dmitri-popov-69419.jpg"}}},{"_id":"5a5ce592a71775802b00003c","order":80,"slug":"new-rest-api-docs-and-npm-module","title":"New REST API Docs and NPM Module 🎉","content":"<p><img src=\"https://cosmic-s3.imgix.net/0bd63910-fb9f-11e7-a07e-698b15f627c9-carl-cerstrand-132373.jpg?w=900\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>We are excited to announce that we have completely rebuilt both our <a href=\"https://cosmicjs.github.io/rest-api-docs\" rel=\"noopener noreferrer\" target=\"_blank\">REST API docs</a> and <a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">NPM module</a> from the ground up. &nbsp; This comes after weeks of development and gathering feedback from the Cosmic Community. &nbsp;Thank you to everyone who helped us with this big release!</p><p><br></p><h3>New REST API Docs</h3><p>Our new REST API docs now live at <a href=\"https://cosmicjs.github.io/rest-api-docs\"></a><a href=\"https://cosmicjs.github.io/rest-api-docs\" rel=\"noopener noreferrer\" target=\"_blank\">https://cosmicjs.github.io/rest-api-docs</a>. &nbsp;The new design makes it a lot easier to find what you need, allowing you to toggle between bash and JavaScript code (more languages coming soon!). &nbsp;We&#39;ve also added more detail for powerful features such as <a href=\"https://cosmicjs.github.io/rest-api-docs/#metafields\" rel=\"noopener noreferrer\" target=\"_blank\">Metafields</a>, <a href=\"https://cosmicjs.github.io/rest-api-docs/?javascript#webhooks\" rel=\"noopener noreferrer\" target=\"_blank\">Webhooks</a> and <a href=\"https://cosmicjs.github.io/rest-api-docs/?javascript#extensions\" rel=\"noopener noreferrer\" target=\"_blank\">Extensions</a>.</p><p><img data-action=\"zoom\" src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/f70fd6b0-fa1f-11e7-b613-9b20c7b6f27a-rest-api-docs.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><h3><br></h3><h3>New NPM Module</h3><p>Our new NPM module can be found at <a href=\"https://cosmicjs.github.io/rest-api-docs\"></a>\r\n<a href=\"https://cosmicjs.github.io/rest-api-docs\"></a><a href=\"https://www.npmjs.com/package/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">https://www.npmjs.com/package/cosmicjs</a>. &nbsp;It has been bumped to version 3.0 and features new Promise-based methods:</p><p><strong>Authenticate</strong></p><div class=\"fr-embedly                  \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/4dc2900f8c9498a507206a65d40efb2a' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/4dc2900f8c9498a507206a65d40efb2a\" class=\"embedly-card\"></a></div><p><strong>Add Bucket</strong></p><div class=\"fr-embedly                  \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/26cdf23182aaee555feec9b439e3c399' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/26cdf23182aaee555feec9b439e3c399\" class=\"embedly-card\"></a></div><p><strong>Add Object</strong></p><div class=\"fr-embedly              \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/8571f70e9f50da2d79f55ef799be7c00' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/8571f70e9f50da2d79f55ef799be7c00\" class=\"embedly-card\"></a></div><p><strong>Get Objects</strong></p><div class=\"fr-embedly                  \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/b6b750de6e65c06ab58c8c1e39eaaf50' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/b6b750de6e65c06ab58c8c1e39eaaf50\" class=\"embedly-card\"></a></div><p><strong>Add Media</strong></p><div class=\"fr-embedly              \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/3d1484f4a130e972ddd1bcfc5bab206b' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/3d1484f4a130e972ddd1bcfc5bab206b\" class=\"embedly-card\"></a></div><p>View more methods available with the <a href=\"https://cosmicjs.github.io/rest-api-docs/?javascript\" rel=\"noopener noreferrer\" target=\"_blank\">updated NPM module</a>.</p><p>It is our goal to help teams build apps faster, and with these updates, we are happy to provide teams even more powerful tools for an even better developer experience.</p><p>Photo by <a href=\"https://unsplash.com/photos/kWnBAe5O3ug?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Carl Cerstrand</a> on <a href=\"https://unsplash.com/search/photos/blue%20architecture?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Unsplash</a></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>After many weeks of development we are excited to announce a couple of big updates. &nbsp;We have completely rebuilt both our REST API docs and NPM module.</p>"},{"value":"0bd63910-fb9f-11e7-a07e-698b15f627c9-carl-cerstrand-132373.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0bd63910-fb9f-11e7-a07e-698b15f627c9-carl-cerstrand-132373.jpg","imgix_url":"https://imgix.cosmicjs.com/0bd63910-fb9f-11e7-a07e-698b15f627c9-carl-cerstrand-132373.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-01-17T17:32:02.451Z","created_by":"5357ef811693be2118000001","created":"2018-01-17T17:32:02.451Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>After many weeks of development we are excited to announce a couple of big updates. &nbsp;We have completely rebuilt both our REST API docs and NPM module.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/0bd63910-fb9f-11e7-a07e-698b15f627c9-carl-cerstrand-132373.jpg","imgix_url":"https://imgix.cosmicjs.com/0bd63910-fb9f-11e7-a07e-698b15f627c9-carl-cerstrand-132373.jpg"}}},{"_id":"5a4d4d18b06da69d1d00009e","order":81,"slug":"single-sign-on-now-available-for-larger-teams","title":"Single Sign-On Now Available for Larger Teams","content":"<p style=\"text-align: center;\"><img src=\"https://cosmic-s3.imgix.net/75b1c380-f498-11e7-b948-afa0abf2fc70-cosmicjs-sso.jpg\" style=\"width: 100%; max-width: 450px;\" class=\"fr-fic fr-dib\"></p><p>We&#39;re on a mission to help teams of all sizes collaborate to build apps faster and easier. &nbsp;In some cases, incorporating a new solution into a workflow for larger teams involves challenges for user onboarding and management.</p><p>To help alleviate these user management challenges, we&#39;re excited to introduce Single Sign On.</p><p style=\"text-align: center;\"><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/1d78d9d0-f4a5-11e7-95df-4fd6007b93a1-sso-login.gif\" style=\"width: 100%; max-width: 450px;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><strong>How it works:</strong></p><p>1. <a href=\"mailto:sales@cosmicjs.com\">Contact our sales department</a> and let them know you are interested in using Cosmic SSO for your organization.<br>2. We will get you set up with Cosmic login using your IdP.<br>3. All of the employees in your organization that have an account with your IdP will now be able to login using the SSO Login option on the <a href=\"https://www.cosmicjs.com/login\">login page</a>.<br>4. You can manage user access to Cosmic via your IdP.</p><p><br></p><p>We support OneLogin, Okta and other popular Identity Providers using the SAML 2.0 protocol. &nbsp;This is another way that we are making Cosmic the best solution to build apps faster for small to large organizations.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>We&#39;re on a mission to help teams of all sizes collaborate to build apps faster and easier. &nbsp;In some cases incorporating a new solution into a workflow for larger team involves challenges for user onboarding and management.</p>"},{"value":"75b1c380-f498-11e7-b948-afa0abf2fc70-cosmicjs-sso.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/75b1c380-f498-11e7-b948-afa0abf2fc70-cosmicjs-sso.jpg","imgix_url":"https://imgix.cosmicjs.com/75b1c380-f498-11e7-b948-afa0abf2fc70-cosmicjs-sso.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2018-01-09T21:37:28.594Z","created_by":"5357ef811693be2118000001","created":"2018-01-09T21:37:28.594Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We&#39;re on a mission to help teams of all sizes collaborate to build apps faster and easier. &nbsp;In some cases incorporating a new solution into a workflow for larger team involves challenges for user onboarding and management.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/75b1c380-f498-11e7-b948-afa0abf2fc70-cosmicjs-sso.jpg","imgix_url":"https://imgix.cosmicjs.com/75b1c380-f498-11e7-b948-afa0abf2fc70-cosmicjs-sso.jpg"}}},{"_id":"5a427ba998e25f1257000116","order":82,"slug":"a-cosmic-year-in-review","title":"A Cosmic Year in Review","content":"<p><img src=\"https://cosmic-s3.imgix.net/949adcb0-ea5b-11e7-b217-d72143811043-nordwood-themes-467442.jpg?w=1000\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>As 2017 comes to a close and we look forward to the new year, I wanted to share my gratitude and excitement for what we&#39;ve accomplished at Cosmic over the past year and what&#39;s to come in 2018.<br><br>Cosmic is built on a bold idea: API-driven micro service applications will power our future digital world. &nbsp;And Cosmic is the place where your team comes together to build these applications faster and easier. &nbsp;To continue to be your team&#39;s\r\napplication management dashboard, we are remaining focused on a few key priorities:</p><p><br></p><p><strong>1. Core Platform Experience</strong><br><br><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/33938310-eb17-11e7-a759-f9eda9745d97-build-faster.png\" class=\"fr-fic fr-dii\" style=\"width: 100%;\"></p><p style=\"text-align: center;\"><a href=\"https://www.cosmicjs.com/blog/blazing-fast-response-times-and-new-status-page\" rel=\"noopener noreferrer\" target=\"_blank\">See how we made the core platform 10x faster</a></p><p>Our goal is to make the developer and content editor experience faster, easier and more enjoyable. &nbsp;The content management dashboard and CMS API are constantly being updated with updates and new features to help your team build apps faster.&nbsp;</p><p>In 2017 we shipped new fixes and features on average 5 times a day. &nbsp;We also improved API response times <a href=\"https://www.cosmicjs.com/blog/blazing-fast-response-times-and-new-status-page\" rel=\"noopener noreferrer\" target=\"_blank\">by a factor of 10</a>. &nbsp;In 2018 we have an ambitious roadmap that includes updated documentation, releasing a new API version, more developer SDKs for different programming languages, and offerings for our larger customers such as Single Sign-On and on-premise deployment.<br><br></p><p><strong>2. Education</strong></p><p><strong><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/d08ff880-ea57-11e7-a757-8d9e3afc4e66-91e5cf60-cb0d-11e7-8977-434a79150a3c-Screen%20Shot%202017-11-16%20at%201.59.39%20PM.png\" class=\"fr-fic fr-dii\"></strong></p><p style=\"text-align: center;\"><a href=\"https://www.cosmicjs.com/case-studies/life-is-good-shares-gratitude\" rel=\"noopener noreferrer\" target=\"_blank\">Read about how Life is Good used a Cosmic App to launch a campaign for gratitude</a></p><p>Education is an important part of our company and I believe a big part of why we are in this industry. &nbsp;As an industry, we are excited about learning the best ways to build cool new products. &nbsp;With this in mind, we have new applications being added to <a href=\"https://www.cosmicjs.com/apps\" rel=\"noopener noreferrer\" target=\"_blank\">our Apps page</a> on a regular basis to show you how to build apps with the Cosmic platform. &nbsp;</p><p>In 2017 we saw over 30 apps built and we released the option to offer <a href=\"https://www.cosmicjs.com/blog/premium-apps\" rel=\"noopener noreferrer\" target=\"_blank\">Premium Apps for purchase and developer revenue share</a>. In 2018 we plan to continue to push for education for common use cases as well as exploring how Cosmic can be your control center for new areas of tech including VR, blockchain and AI.<br><br><strong>3. Community</strong><br><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/ea7092f0-ea57-11e7-a757-8d9e3afc4e66-Screen%20Shot%202017-12-26%20at%2010.14.41%20AM.png\" class=\"fr-fic fr-dii\"></p><p style=\"text-align: center;\"><a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Join our growing community</a></p><p>Our community is growing fast and is more active than ever. &nbsp;Community members from all over the world are helping to educate new developers on the best ways to build modern apps using Cosmic.</p><p>In 2017 we released profile pages (<a href=\"https://www.cosmicjs.com/tony\" rel=\"noopener noreferrer\" target=\"_blank\">see mine here</a>) to help developers showcase their work and connect with others interested in working with them on development projects.\r\n In 2018 we plan to continue to engage our community to build Apps, Extensions and write tutorials to showcase their skills building modern apps using the latest technology.</p><p><br></p><p>It is our hope that in the new year, more teams use Cosmic to build faster, more light-weight modern applications. &nbsp;We started Cosmic to solve our own problem with application development and it brings us joy to see more and more teams use Cosmic as their application development solution. &nbsp;We are grateful to you, our customers and hope you have a very happy new year.<br><br>Cheers,<br>Tony Spiro and the Cosmic team.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>As 2017 comes to a close and we look forward to a new year, I wanted to share my gratitude and excitement for what we&#39;ve accomplished at Cosmic over the past year and what&#39;s to come in 2018.</p>"},{"value":"949adcb0-ea5b-11e7-b217-d72143811043-nordwood-themes-467442.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/949adcb0-ea5b-11e7-b217-d72143811043-nordwood-themes-467442.jpg","imgix_url":"https://imgix.cosmicjs.com/949adcb0-ea5b-11e7-b217-d72143811043-nordwood-themes-467442.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-12-28T16:41:13.563Z","created_by":"5357ef811693be2118000001","created":"2017-12-28T16:41:13.563Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>As 2017 comes to a close and we look forward to a new year, I wanted to share my gratitude and excitement for what we&#39;ve accomplished at Cosmic over the past year and what&#39;s to come in 2018.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/949adcb0-ea5b-11e7-b217-d72143811043-nordwood-themes-467442.jpg","imgix_url":"https://imgix.cosmicjs.com/949adcb0-ea5b-11e7-b217-d72143811043-nordwood-themes-467442.jpg"}}},{"_id":"5a2461b3f914d5981d000079","order":83,"slug":"developer-spotlight-devin-otway","title":"Developer Spotlight: Devin Otway","content":"<p><img src=\"https://cosmic-s3.imgix.net/c03647e0-de8c-11e7-919e-157e684f9a31-pexels-photo-270694.jpg?w=1000\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>In this <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> Developer Spotlight, we sat down with Devin Otway, a Software Engineer in San Francisco who currently works as a frontend engineer at <a href=\"https://postmates.com\" rel=\"noopener noreferrer\" target=\"_blank\">Postmates</a>. Devin recently launched a blog called <a href=\"http://www.hackingdepression.com\" rel=\"noopener noreferrer\" target=\"_blank\">Hacking Depression</a> built using Cosmic. Check him out on <a href=\"https://twitter.com/djotts\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> or <a href=\"https://www.linkedin.com/in/devinotway/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a>, and enjoy the Q/A.</p><p><br></p><div class=\"fr-embedly     \" data-original-embed=\"<a href='https://github.com/TroutZen' class='embedly-card'></a>\"><a href=\"https://github.com/TroutZen\" class=\"embedly-card\"></a></div><p><strong>How long have you been building software?</strong><br>I have been building software for about 5 years, but got into frontend development 3 years ago. Coding was an accidental passion. In graduate school for environmental engineering, I got my first taste developing dynamic models in matlab and found the development process so much fun. I then started learning <a href=\"https://www.cosmicjs.com/knowledge-base/python-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Python</a> and <a href=\"https://www.cosmicjs.com/knowledge-base/javascript-cms\" rel=\"noopener noreferrer\" target=\"_blank\">JavaScript</a> on my own and would find myself working into the morning on fun little projects when I should have been looking for jobs after finishing grad school. I knew I had found my passion. It tickled both the creative and analytical sides of my brain.</p><p><br></p><p><strong>What is your preferred development stack?</strong><br>I come from more of a JS background, so I am a bit biased towards those language options. Right now it is <a href=\"https://www.cosmicjs.com/knowledge-base/react-cms\" rel=\"noopener noreferrer\" target=\"_blank\">React</a>, <a href=\"https://www.cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js</a> and any lightweight db that fits my project needs. I have also been playing around with Golang recently. I love its simplicity and expressiveness and have plans to rewrite my blog&rsquo;s web server using it.</p><p><br></p><p><strong>What past projects are you most proud of and why?</strong><br>Well, two recent projects come to mind. First is &nbsp;<a href=\"//www.hackingdepression.com\">www.hackingdepression.com</a> , which is the blog I just finished building (now the article writing starts!). I built this project using React, Node/Express, and Cosmic as the cms/backend. Aside from being an extremely fun project it&rsquo;s very meaningful to me on a personal level.</p><p>Depression affects 6.7% of adults (including me!) and is the leading cause of disability among people ages 15-44 and most people don&rsquo;t like to talk about it. But in many ways it&rsquo;s no different than other health issues like diabetes. It has\r\ncauses and conditions and as a result there are things that you can do that give you an edge over the illness and things that you can do that make it worse. It&rsquo;s this edge between what helps and what doesn&rsquo;t that I hope to discuss and quantify\r\non my blog.</p><p>Secondly, I currently work as a frontend engineer at Postmates. We are in the process of wrapping up a huge rewrite of our web client. Rebuilding something from the ground up with a company that already has a large user base has been an amazing opportunity.\r\nFrom performance, to scalability, to seo, we have to consider it all. Also, everyday I get to work with insanely talented engineers, designers, and leaders to build a world class experience for our customers. I am very proud of the work we are doing.</p><p><br></p><p><strong>Talk a little bit more about your process for building apps - who&rsquo;s using them? What purpose do they serve?</strong><br>Well in terms of my side projects, <a href=\"http://www.hackingdepression.com\" rel=\"noopener noreferrer\" target=\"_blank\">Hacking Depression</a> is the first that I have put in front of users. My process was really driven by my own desire to 1) play with new technologies and 2) do something that would help me solve a challenge/problem that I was experiencing. You could say that it was quite selfish! I wanted to learn, grow, and become healthier! Those were easy motivators to align with. In terms of purpose, I expect that to evolve. Right now I am focused on it serving me first, and hopefully the more that happens, the more it can serve my future readers.</p><p><br></p><p><strong>What are some technologies you are excited about that you are using today, or want to learn more about?</strong><br>On the language side, Golang. More broadly speaking, I am interested in learning more about cloud based service architectures and have plans to build some small services to support my blog and help me do things like quantify mood in relation to activities\r\n(exercise, diet, etc). More immediately, however, CSS-in-JS has been a client side technology that I feel has revolutionized my development. Giving CSS easy access to your JS context is a game changer!</p><p>To learn how you can contribute Apps, Articles and Extensions to the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a>, contact us at <a href=\"mailto:build@cosmicjs.com\">build@cosmicjs.com</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In this <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> Developer Spotlight, we sat down with Devin Otway, a Software Engineer in San Francisco who currently works as a frontend engineer at <a href=\"https://postmates.com\" rel=\"noopener noreferrer\" target=\"_blank\">Postmates</a>. Devin recently launched a blog called <a href=\"http://www.hackingdepression.com\" rel=\"noopener noreferrer\" target=\"_blank\">Hacking Depression</a> on Cosmic. Check him out on &nbsp;<a href=\"https://twitter.com/djotts\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>&nbsp; or &nbsp;<a href=\"https://www.linkedin.com/in/devinotway/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> , and enjoy the Q/A.</p>"},{"value":"ebffa8e0-de9a-11e7-bdb9-afef163e47ef-devin-ottway.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/ebffa8e0-de9a-11e7-bdb9-afef163e47ef-devin-ottway.jpg","imgix_url":"https://imgix.cosmicjs.com/ebffa8e0-de9a-11e7-bdb9-afef163e47ef-devin-ottway.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-12-03T20:42:27.444Z","created_by":"5716b504e9c686d006000073","created":"2017-12-03T20:42:27.444Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> Developer Spotlight, we sat down with Devin Otway, a Software Engineer in San Francisco who currently works as a frontend engineer at <a href=\"https://postmates.com\" rel=\"noopener noreferrer\" target=\"_blank\">Postmates</a>. Devin recently launched a blog called <a href=\"http://www.hackingdepression.com\" rel=\"noopener noreferrer\" target=\"_blank\">Hacking Depression</a> on Cosmic. Check him out on &nbsp;<a href=\"https://twitter.com/djotts\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>&nbsp; or &nbsp;<a href=\"https://www.linkedin.com/in/devinotway/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> , and enjoy the Q/A.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/ebffa8e0-de9a-11e7-bdb9-afef163e47ef-devin-ottway.jpg","imgix_url":"https://imgix.cosmicjs.com/ebffa8e0-de9a-11e7-bdb9-afef163e47ef-devin-ottway.jpg"}}},{"_id":"5a26c6a704aa846e4f00003a","order":86,"slug":"developer-spotlight-jazib-sawar","title":"Developer Spotlight: Jazib Sawar ","content":"<p><img src=\"https://cosmic-s3.imgix.net/00a42ab0-d9e0-11e7-8867-71f6e4966a20-3523ab00-d876-11e7-9dcf-bd18c1639b0f-agency-app-banner2.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>In this Cosmic Developer Spotlight, we sat down with <a href=\"https://www.cosmicjs.com/jazibsawar\" rel=\"noopener noreferrer\" target=\"_blank\">Jazib Sawar</a>, a full stack web developer at <a href=\"https://www.bitbytes.io\" rel=\"noopener noreferrer\" target=\"_blank\">BitBytes</a>. &nbsp;Jazib has a Bachelor&#39;s Degree in Computer Science from the National University of Computer and Emerging Sciences and has led teams on interactive projects for several years. &nbsp;Jazib is the mastermind behind the Cosmic <a href=\"https://www.cosmicjs.com/apps/sticky-notes\" rel=\"noopener noreferrer\" target=\"_blank\">Sticky Notes App</a> that was recently adapted by Life is Good for their <a href=\"https://www.cosmicjs.com/case-studies/life-is-good-shares-gratitude\" rel=\"noopener noreferrer\" target=\"_blank\">Gratitude Wall</a>.&nbsp;</p><p>Jazib is a member of the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a>, contributing Apps, Articles and Extensions. &nbsp;Check out his contributions on <a href=\"https://www.cosmicjs.com/jazibsawar\" rel=\"noopener noreferrer\" target=\"_blank\">his Cosmic profile page</a>. &nbsp;Jazib and his team recently launched a new <a href=\"https://www.cosmicjs.com/apps/agency-website\" rel=\"noopener noreferrer\" target=\"_blank\">Premium App</a> for agencies on Cosmic. &nbsp;Check him out on <a href=\"https://twitter.com/jazibsawar\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://www.linkedin.com/in/jazib-sawar/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a>, and enjoy the Q/A.</p><p><br></p><div class=\"fr-embedly     \" data-original-embed=\"<a href='https://github.com/jazibsawar' class='embedly-card'></a>\"><a href=\"https://github.com/jazibsawar\" class=\"embedly-card\"></a></div><p><br></p><p><strong>How long have you been building software?</strong><br>I have been in the software development business for about 3 years. It was always my dream to build a startup company primarily focused in web and cloud technologies. Six months ago, I, along with a couple of my friends, was able to fulfill that dream and start a software company called <a href=\"https://www.bitbytes.io\" rel=\"noopener noreferrer\" target=\"_blank\">BitBytes</a>. We mainly deal in cloud and web development.<br><br><strong>What is your preferred development stack?<br></strong>MERN (MongoDB, Express, React and Node.js)<br><br><strong>What past projects are you most proud of and why?<br></strong>During the past few years, I&rsquo;ve worked on quite a few interesting projects. The one that stands out from the rest is Crowdsquad: an intelligent lead system that we built based on social networks. The system uses modern technology stack like React, Express, IBM Bluemix API Connect, Cloudant and interactive UI. Currently, we are working on integrating Continuous Deployment and IBM Watson into the project which makes it even more challenging and hence, we are most proud of it.<br><br><strong>Talk a little bit more about your process for building apps. How has Cosmic sped up your time to&nbsp;</strong><strong>market? Has it improved collaboration among your team members?&nbsp;</strong><br>Everyone at <a href=\"https://www.bitbytes.io\" rel=\"noopener noreferrer\" target=\"_blank\">BitBytes</a> follows the agile methodology for software development. At the start of each project, we try to gather as much information related to the project as we can. Collaborative environment within the company allows everyone to work as a team. As far as tools are concerned, we use Trello and Plutio for the management and assignment of tasks. And for version control, the obvious choice is Github.&nbsp;</p><p dir=\"ltr\">We used to rely heavily on WordPress and Magento but since the introduction of Cosmic, everything is much better. Unlike other platforms, we can make use of only those features that we need. PWA (progressive web applications) are trending these days and like everyone else, we are more concerned with speed and reliability. Cosmic has allowed us to focus more on UI than backend and as a result, we can build very fast and interactive websites in almost half the time. Unsurprisingly, we will be using more of Cosmic in our upcoming projects.<br><br><strong>What are some technologies you are excited about that you are using today, or want to learn more about?</strong><br>I want to learn more about the latest technologies such as <a href=\"https://www.cosmicjs.com/docs/graphql\" rel=\"noopener noreferrer\" target=\"_blank\">GraphQL</a>, Cloud and Big Data. Also, I want to explore Artificial Intelligence and Machine Learning so that I can make a positive impact in this world by providing solutions to different problems.<br><br><strong>What&#39;s your best piece of advice to a Developer wanting to build their next app on Cosmic?</strong><br>We have been building applications using Cosmic for about 3-4 months. It has been a great experience so far. If any developer is looking for a quick turnaround and wants to build super fast applications, I would recommend using Cosmic. The best part is that the developer doesn&rsquo;t need to build the back-end or API for the applications which saves a lot of time. My only advice is to use Cosmic and focus more on the UI/UX. Happy Coding!</p><p>To learn how you can contribute Apps, Articles and Extensions to the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a>, contact us at <a href=\"mailto:support@cosmicjs.com\"></a><a href=\"mailto:support@cosmicjs.com\">support@cosmicjs.com</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>In this Cosmic Developer Spotlight, we sat down with <a href=\"https://www.cosmicjs.com/jazibsawar\" rel=\"noopener noreferrer\" target=\"_blank\">Jazib Sawar</a>, a full stack web developer at <a href=\"https://www.bitbytes.io\" rel=\"noopener noreferrer\" target=\"_blank\">Bitbytes</a>. &nbsp;Jazib has a Bachelor&#39;s Degree in Computer Science from the National University of Computer and Emerging Sciences and has led teams on interactive projects for several years. &nbsp;Jazib is the mastermind behind the Cosmic <a href=\"https://www.cosmicjs.com/apps/sticky-notes\" rel=\"noopener noreferrer\" target=\"_blank\">Sticky Notes App</a> that was recently adapted by Life is Good for their <a href=\"https://www.cosmicjs.com/case-studies/life-is-good-shares-gratitude\" rel=\"noopener noreferrer\" target=\"_blank\">Gratitude Wall</a>.&nbsp;</p>"},{"value":"00a42ab0-d9e0-11e7-8867-71f6e4966a20-3523ab00-d876-11e7-9dcf-bd18c1639b0f-agency-app-banner2.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/00a42ab0-d9e0-11e7-8867-71f6e4966a20-3523ab00-d876-11e7-9dcf-bd18c1639b0f-agency-app-banner2.png","imgix_url":"https://imgix.cosmicjs.com/00a42ab0-d9e0-11e7-8867-71f6e4966a20-3523ab00-d876-11e7-9dcf-bd18c1639b0f-agency-app-banner2.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-12-05T16:17:43.175Z","created_by":"5716b504e9c686d006000073","created":"2017-12-05T16:17:43.175Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this Cosmic Developer Spotlight, we sat down with <a href=\"https://www.cosmicjs.com/jazibsawar\" rel=\"noopener noreferrer\" target=\"_blank\">Jazib Sawar</a>, a full stack web developer at <a href=\"https://www.bitbytes.io\" rel=\"noopener noreferrer\" target=\"_blank\">Bitbytes</a>. &nbsp;Jazib has a Bachelor&#39;s Degree in Computer Science from the National University of Computer and Emerging Sciences and has led teams on interactive projects for several years. &nbsp;Jazib is the mastermind behind the Cosmic <a href=\"https://www.cosmicjs.com/apps/sticky-notes\" rel=\"noopener noreferrer\" target=\"_blank\">Sticky Notes App</a> that was recently adapted by Life is Good for their <a href=\"https://www.cosmicjs.com/case-studies/life-is-good-shares-gratitude\" rel=\"noopener noreferrer\" target=\"_blank\">Gratitude Wall</a>.&nbsp;</p>","featured_image":{"url":"https://cdn.cosmicjs.com/00a42ab0-d9e0-11e7-8867-71f6e4966a20-3523ab00-d876-11e7-9dcf-bd18c1639b0f-agency-app-banner2.png","imgix_url":"https://imgix.cosmicjs.com/00a42ab0-d9e0-11e7-8867-71f6e4966a20-3523ab00-d876-11e7-9dcf-bd18c1639b0f-agency-app-banner2.png"}}},{"_id":"5a1e5594c57d0f9663000012","order":87,"slug":"blazing-fast-response-times-and-new-status-page","title":"Blazing Fast Response Times and New Status Page","content":"<p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/d69d2e70-d4d4-11e7-987f-63705e47eb9e-redis-status.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>I am deeply sorry for the performance and uptime issues that we experienced several hours of the day on Tuesday, November 21 and in the days following. &nbsp;The initial issue was caused by a friendly-fire DDOS attack that caused our servers to become slow or unresponsive and continued due to increased traffic on the platform.<br><br>We quickly diagnosed the problem and have been working around the clock to fix it and try to prevent the issue from happening again. &nbsp;And in the process, we&#39;ve made significant improvements in overall speed and reliability. &nbsp;Here&#39;s what we did:<br><br></p><ol><li>We&#39;ve deployed a new high-speed caching layer for all API requests which has dramatically improved API response times (by a factor of 10+)! &nbsp;You will now notice blazing fast response times across the web dashboard and API endpoints.</li><li>We&#39;ve upgraded our infrastructure capacity to scale with increasing&nbsp;traffic and perform reliably with sudden&nbsp;spikes in traffic.</li><li>We have a <a data-cke-saved-href=\"http://cosmicstatus.com/\" href=\"http://cosmicstatus.com/\" rel=\"noopener noreferrer\" target=\"_blank\">new status page</a> dedicated to communicating to you any performance or uptime issues.</li></ol><p><br>We are grateful for your business and hold ourselves accountable when there&#39;s any issue with providing you the best possible service.<br><br>Thank you for your patience and support as we strive to help you build apps fast, now even faster. &nbsp;Please feel free to reach out to me personally if you have any questions or comments.<br><br>Sincerely,</p><p>Tony Spiro<br>CEO Cosmic<br><a href=\"mailto:tony@cosmicjs.com\">tony@cosmicjs.com</a></p><p><br></p><p><br></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>We have been working around the clock to fix the issues and have taking steps to prevent this issue from happening again. &nbsp;And in the process, we&#39;ve made significant improvements in speed and reliability.</p>"},{"value":"49183a40-d51a-11e7-9e36-db834fcbe6fe-redis-status.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/49183a40-d51a-11e7-9e36-db834fcbe6fe-redis-status.jpg","imgix_url":"https://imgix.cosmicjs.com/49183a40-d51a-11e7-9e36-db834fcbe6fe-redis-status.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-11-29T06:37:08.876Z","created_by":"5357ef811693be2118000001","created":"2017-11-29T06:37:08.876Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We have been working around the clock to fix the issues and have taking steps to prevent this issue from happening again. &nbsp;And in the process, we&#39;ve made significant improvements in speed and reliability.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/49183a40-d51a-11e7-9e36-db834fcbe6fe-redis-status.jpg","imgix_url":"https://imgix.cosmicjs.com/49183a40-d51a-11e7-9e36-db834fcbe6fe-redis-status.jpg"}}},{"_id":"5a09a933cc9127e804000dec","order":88,"slug":"markdown-metafield-now-available","title":"Markdown Metafield Now Available","content":"<p style=\"text-align: center;\"><br></p><p style=\"text-align: center;\"><img src=\"https://cosmic-s3.imgix.net/337ce5e0-c87d-11e7-9a3c-5fec67617bf7-Markdown-mark.svg.png\" style=\"width: 300px;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Markdown is a great tool in the developer&#39;s tool belt that offers a quick and easy alternative to HTML text formatting. &nbsp;We are happy to let you know that you now have a Markdown Metafield to use for your Cosmic Objects.</p><p><a href=\"https://www.cosmicjs.com/login\">Login</a> or <a href=\"https://www.cosmicjs.com/signup\">sign up</a> to begin using Markdown.</p><p>Simply go to add a new Object or edit an existing Object and click &quot;+ Add Metafield&quot; and notice the latest Markdown option. &nbsp;You have the ability to preview the Markdown as well by clicking the Preview tab.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/e3796360-c87d-11e7-8d35-b9e83a15ddf3-markdown.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>Let me know if you have any questions about this new option in <a href=\"https://www.cosmicjs.com/community\">our community</a> and <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">on Twitter</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>We are happy to let you know that now have a Markdown Metafield to use in your Cosmic Objects.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"337ce5e0-c87d-11e7-9a3c-5fec67617bf7-Markdown-mark.svg.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/337ce5e0-c87d-11e7-9a3c-5fec67617bf7-Markdown-mark.svg.png","imgix_url":"https://imgix.cosmicjs.com/337ce5e0-c87d-11e7-9a3c-5fec67617bf7-Markdown-mark.svg.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-11-13T14:16:19.459Z","created_by":"5357ef811693be2118000001","created":"2017-11-13T14:16:19.459Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We are happy to let you know that now have a Markdown Metafield to use in your Cosmic Objects.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/337ce5e0-c87d-11e7-9a3c-5fec67617bf7-Markdown-mark.svg.png","imgix_url":"https://imgix.cosmicjs.com/337ce5e0-c87d-11e7-9a3c-5fec67617bf7-Markdown-mark.svg.png"}}},{"_id":"5a0346140027573b13000b9b","order":89,"slug":"introducing-the-builder-bucket-referral-program","title":"Introducing the Builder Bucket Referral Program","content":"<p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/761bc440-c556-11e7-bcbf-794d69923463-builder-bucket-program.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>Developers need time to build. &nbsp;And content editors need time to test-drive a project as it&#39;s being built. &nbsp;For these reasons, we&#39;re rolling out our new Builder Bucket Referral Program which gives you more trial time on your Free Builder Bucket when you invite friends and colleagues to join Cosmic. &nbsp;It works like this:<br><br></p><ol><li>Set up your Builder Bucket which includes a free 14-day trial</li><li>At any point during your 14-day trial, you have the option to upgrade to any paid plan OR send your personal referral link to a friend or colleague</li><li>Once they sign up, you get 14 more days to use your Builder Bucket<br><br></li></ol><p>You can invite as many people as you want and there is no limit to the number of Free trial days you can earn from referrals.</p><p><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/2163cec0-c4c5-11e7-a035-37d8e491d558-Screen Shot 2017-11-08 at 1.32.49 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>For more details and to get your referral link, <a href=\"https://www.cosmicjs.com/login\">login</a> and go to <a href=\"https://www.cosmicjs.com/account/referrals\">Account Settings &gt; Referrals</a>.</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/8396d3e0-c4c9-11e7-b3af-7f5642d0f40b-free-bucket-referral-program.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br>It is our mission to help teams build apps faster together, and we&#39;re happy to roll out this program to give you more time to get your projects ready for production. &nbsp;If you have any questions about the Builder Bucket Referral Program or anything else, <a href=\"https://www.cosmicjs.com/community\">join our Community</a> and <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>Developers need time to build. &nbsp;And content editors need time to test-drive a project as it&#39;s being built. &nbsp;For these reasons, we&#39;re rolling out our new Builder Bucket Referral Program.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"761bc440-c556-11e7-bcbf-794d69923463-builder-bucket-program.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/761bc440-c556-11e7-bcbf-794d69923463-builder-bucket-program.jpg","imgix_url":"https://imgix.cosmicjs.com/761bc440-c556-11e7-bcbf-794d69923463-builder-bucket-program.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-11-09T17:59:48.173Z","created_by":"5357ef811693be2118000001","created":"2017-11-09T17:59:48.173Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>Developers need time to build. &nbsp;And content editors need time to test-drive a project as it&#39;s being built. &nbsp;For these reasons, we&#39;re rolling out our new Builder Bucket Referral Program.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/761bc440-c556-11e7-bcbf-794d69923463-builder-bucket-program.jpg","imgix_url":"https://imgix.cosmicjs.com/761bc440-c556-11e7-bcbf-794d69923463-builder-bucket-program.jpg"}}},{"_id":"59f8bf47ff2bcc134f000ffd","order":90,"slug":"introducing-object-revision-history","title":"Introducing Object Revision History ","content":"<p><img src=\"https://cosmic-s3.imgix.net/d20bc9a0-c374-11e7-84d7-69582fe69304-back-to-the-future-white.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>We&#39;re excited to announce that Revision History is now available for all of your Cosmic Objects. This means that you now have the power to go back in time to previous versions, save new versions without publishing live and more (click on screenshots to zoom):</p><p><br><strong>1. Objects remain published while you save changes to draft</strong><br>You now have the ability to keep your published Objects while saving new versions to Draft. &nbsp;Many have requested this and we&#39;re happy to now make this possible <span class=\"fr-emoticon fr-deletable\">😀</span> . &nbsp;To unpublish the Object, click the new &quot;Unpublish&quot; button.<br><br><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/63929930-c0cd-11e7-abac-51c52486cebb-revisions-1.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br><strong>2. View prior changes</strong><br>You can view all prior revisions on Objects (since this release date) by clicking the Revision History modal link.<br><br><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/01debce0-c0ce-11e7-81b0-47ca78c54390-revisions-2.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><p><strong>3. Rollback to prior changes</strong><br>To roll back to a prior version simply click on a revision and Save Draft or Publish in the Edit Object revision view.<br><br></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/13cdcd60-c0ce-11e7-8997-97f89cbe6ac3-revisions-3.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-action=\"zoom\"></p><p><br></p><p>We&#39;re excited about rolling this out as it makes collaboration between developers and editors that more comfortable. &nbsp;No need to worry about mistakes when the revert button is just a click away.</p><p>If you would like to join our mission to help teams collaborate around building great products together, <a href=\"https://www.cosmicjs.com/community\">join our Community</a> and <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">follow us on Twitter</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>We&#39;re excited to announce that Revision History is now available for all of your Cosmic Objects.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"d20bc9a0-c374-11e7-84d7-69582fe69304-back-to-the-future-white.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/d20bc9a0-c374-11e7-84d7-69582fe69304-back-to-the-future-white.png","imgix_url":"https://imgix.cosmicjs.com/d20bc9a0-c374-11e7-84d7-69582fe69304-back-to-the-future-white.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-11-07T18:21:59.659Z","created_by":"5716b504e9c686d006000073","created":"2017-11-07T18:21:59.659Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We&#39;re excited to announce that Revision History is now available for all of your Cosmic Objects.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/d20bc9a0-c374-11e7-84d7-69582fe69304-back-to-the-future-white.png","imgix_url":"https://imgix.cosmicjs.com/d20bc9a0-c374-11e7-84d7-69582fe69304-back-to-the-future-white.png"}}},{"_id":"59f9cbaa1536ad374e0027c5","order":91,"slug":"developer-spotlight-yew-wee-chua","title":"Developer Spotlight: Yew Wee Chua","content":"<p><img src=\"https://cosmic-s3.imgix.net/b5c88d00-bf14-11e7-929e-e520afee8cd7-secondwind.png?w=1200\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>In this <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> Developer Spotlight, we sat down with Yew Wee Chua, Chief Technology Officer of <a href=\"http://www.secondwindnation.com\" rel=\"noopener noreferrer\" target=\"_blank\">Second Wind Nation</a> whose team has largely focused on data analytics and web development over the last several years. They&#39;re currently building out content-driven applications for teams of content editors with specific areas of focus to contribute content to a more comprehensive publication site. Read the <a href=\"https://www.cosmicjs.com/case-studies/second-wind-nation\" rel=\"noopener noreferrer\" target=\"_blank\">Second Wind Nation Case Study</a>. Check Yew out on <a href=\"https://twitter.com/weewey_\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> or <a href=\"https://www.linkedin.com/in/yew-wee-chua-7a987495/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a>, and enjoy the Q/A.<br><br></p><p><strong>1. How long have you been building software?<br></strong>My team and I have been building software for about 2-3 years. Our background is primarily in data analytics and web development.</p><p><br></p><p><strong>2. What is your preferred development stack?<br></strong>MERN. MERN stands for Mongo DB, Express.js, React and Node.js. To see all of the tools that Cosmic works well with and supports, check out the <a href=\"https://www.cosmicjs.com/knowledge-base\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Knowledge Base</a>.&nbsp;</p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/5864c430-bf05-11e7-b4e6-bb80e0778af9-1741229_1.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><img src=\"https://s3-us-west-2.amazonaws.com/cosmicjs/025cf2b0-bf0f-11e7-929e-e520afee8cd7-Screen Shot 2017-11-01 at 9.14.28 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><strong>3. What past projects are you most proud of and why?<br></strong>Building a web-based search application for a large mining company. We developed and brought it into production within 2 weeks. Additionally it has cool features such as a recommendation\r\nengine based on the user&#39;s search history. I&#39;m proud of it because we only had 2 weeks to bring it to production.</p><p><br></p><p><strong>4. Talk a little bit more about your process for building apps. &nbsp;How has Cosmic sped up your time to market for project delivery deadlines?<br></strong>We typically work using the agile scrum method, getting the software requirements from\r\nthe business, prioritizing features on the product backlogs, sprint planning and so on. Cosmic has freed us from worrying about the backend CMS and now we spend more time on building the front-end as well as deploying the application.&nbsp;</p><p>Previously we were using WordPress. WordPress was limiting as whenever we needed new features to be added onto the application, we were required to add additional plugins which result in the clunkiness of the application. Thus we moved away from WordPress\r\nand found Cosmic as our solution for a headless CMS.</p><p><br></p><p><strong>5. What are some technologies you are excited about that you are using today, or want to learn more about?<br></strong>We will want to learn more about containerizing our application and employ a continuous deployment of our containerized application\r\non the cloud.</p><p><br></p><p>To learn how you can contribute Apps, Articles and Extensions to the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a>, contact us at <a href=\"mailto:support@cosmicjs.com\"></a>\r\n<a href=\"mailto:support@cosmicjs.com\"></a><a href=\"mailto:support@cosmicjs.com\">support@cosmicjs.com</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>Cosmic has allowed us to enter the market quicker. We managed to build a Proof of Concept and deploy it within one week thanks to the well-documented APIs and easy-to-use User Interface for our Content Editors.&nbsp;</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"4f537490-bf14-11e7-958b-232a3f62ac7b-secondwind.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/4f537490-bf14-11e7-958b-232a3f62ac7b-secondwind.png","imgix_url":"https://imgix.cosmicjs.com/4f537490-bf14-11e7-958b-232a3f62ac7b-secondwind.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-11-01T13:27:06.118Z","created_by":"5716b504e9c686d006000073","created":"2017-11-01T13:27:06.118Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>Cosmic has allowed us to enter the market quicker. We managed to build a Proof of Concept and deploy it within one week thanks to the well-documented APIs and easy-to-use User Interface for our Content Editors.&nbsp;</p>","featured_image":{"url":"https://cdn.cosmicjs.com/4f537490-bf14-11e7-958b-232a3f62ac7b-secondwind.png","imgix_url":"https://imgix.cosmicjs.com/4f537490-bf14-11e7-958b-232a3f62ac7b-secondwind.png"}}},{"_id":"59ee6a80140bd002640009b9","order":92,"slug":"premium-apps","title":"Premium Apps","content":"<p>We&#39;re excited to announce that we are now expanding our Developer Program to include Premium Apps and Extensions. &nbsp;To kick things off, our first Premium App is now available: &nbsp;<a href=\"https://www.cosmicjs.com/apps/bootstrap-landing-page\">Bootstrap Landing Page</a>.</p><p style=\"text-align: center;\"><br><a href=\"https://www.cosmicjs.com/apps/bootstrap-landing-page\"><img src=\"https://cosmicjs.imgix.net/6c2ab7e0-b8c0-11e7-9a91-1fa445eca758-bootstrap-landing-page.jpg\" style=\"max-width: 500px;\" class=\"fr-fic fr-dib\"></a></p><p><br></p><p>We know first-hand the problem of building websites and apps on a time crunch. &nbsp;And it&#39;s always nice to find something pre-built that you can simply pull &quot;off-the-shelf&quot; and customize to fit your needs. &nbsp;The cost savings on development hours makes it a great option and we&#39;re excited to add this option to help teams get projects finished faster.<br><br>If you are interested in contributing Apps to sell in our Marketplace we would love to work with you. &nbsp;This is an opportunity to get paid recurring revenue every time your App is purchased.<br><br>To get started offering your Premium Apps and Extensions, login to your account, go to Account Settings &gt; Developer Program and request access.</p><p>To learn more about the opportunity please email us at <a href=\"mailto:build@cosmicjs.com\">build@cosmicjs.com</a>.<br><br>We&#39;re excited to see what you build!</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>We know first hand the problem of building websites and apps on a time crunch. &nbsp;And it&#39;s always nice to find something pre-built that you can simply pull &quot;off-the-shelf&quot; and customize to fit your needs.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"d442e3e0-b8be-11e7-b121-e93c833840db-premium-apps.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/d442e3e0-b8be-11e7-b121-e93c833840db-premium-apps.jpg","imgix_url":"https://imgix.cosmicjs.com/d442e3e0-b8be-11e7-b121-e93c833840db-premium-apps.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-10-23T22:17:35.829Z","created_by":"5357ef811693be2118000001","created":"2017-10-23T22:17:35.829Z","status":"published","modified_at":"2020-08-10T14:04:22.001Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We know first hand the problem of building websites and apps on a time crunch. &nbsp;And it&#39;s always nice to find something pre-built that you can simply pull &quot;off-the-shelf&quot; and customize to fit your needs.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/d442e3e0-b8be-11e7-b121-e93c833840db-premium-apps.jpg","imgix_url":"https://imgix.cosmicjs.com/d442e3e0-b8be-11e7-b121-e93c833840db-premium-apps.jpg"}}},{"_id":"59e623bb4242f45d4700016c","order":93,"slug":"navigation-update","title":"Navigation Update","content":"<p>Helping you get where you need to go faster is a top priority for Cosmic. &nbsp;That&#39;s why you&#39;ll notice we recently updated our navigation (main menu and footer links) to help you get to Cosmic products, resources and information faster and easier.</p><p><br></p><p><img src=\"https://www.cosmicjs.com/uploads/f8dc5950-b352-11e7-838a-497b4764a634-new-nav.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Our simplified main navigation includes our most popular and most important pages: Products, Developers, Pricing and Company. &nbsp;<br><br>We&#39;ve also added a new hub for our developer documentation:<br><a href=\"https://www.cosmicjs.com/docs\">https://www.cosmicjs.com/docs</a><br><img src=\"https://www.cosmicjs.com/uploads/04a40370-b351-11e7-aa88-17d06cb0accf-Screen Shot 2017-10-17 at 10.36.42 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>And finally in the footer, we&#39;ve organized links in a more thoughtful way to help you find what you need faster (see them below).</p><p>Please let me know if you have any questions. &nbsp;We&#39;re always available to help in <a href=\"https://www.cosmicjs.com/community\">our Slack channel</a> and <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">on Twitter</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>We&#39;ve rolled out a few new navigation items to get you where you need to go faster.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"af139060-b350-11e7-838a-497b4764a634-frank-mckenna-282487.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/af139060-b350-11e7-838a-497b4764a634-frank-mckenna-282487.jpg","imgix_url":"https://imgix.cosmicjs.com/af139060-b350-11e7-838a-497b4764a634-frank-mckenna-282487.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-10-17T15:37:31.431Z","created_by":"5357ef811693be2118000001","created":"2017-10-17T15:37:31.431Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We&#39;ve rolled out a few new navigation items to get you where you need to go faster.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/af139060-b350-11e7-838a-497b4764a634-frank-mckenna-282487.jpg","imgix_url":"https://imgix.cosmicjs.com/af139060-b350-11e7-838a-497b4764a634-frank-mckenna-282487.jpg"}}},{"_id":"59d269c5632917c44300001d","order":94,"slug":"preview-link-now-available","title":"Preview Link Now Available","content":"<p>You can now add a link for your writers to be able to preview Object content. &nbsp;By setting up your Preview links on your Object Types, your writers will easily be able to preview changes to content in draft or published state. &nbsp;To add preview\r\nbuttons to your Objects, simply:</p><p>1. Go to Your Bucket &gt; Object Type Settings &gt; Preview Link.<br>2. Add your Preview Link (dynamically add the object slug with the [object_slug] shortcode). &nbsp;If you would like to view Draft status Objects, you will need to make sure your web app queries the endpoint with ?status=all. &nbsp;View the <a href=\"https://www.cosmicjs.com/docs/rest\">API documentation</a> for more information on how to access your Objects in draft status.</p><p><img src=\"https://www.cosmicjs.com/uploads/df9ea630-a83c-11e7-ab7e-25f46d4715c2-preview-link-mark.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>3. Click the Preview button located at the top right in the Edit Object page.</p><p><img src=\"https://www.cosmicjs.com/uploads/e535ec70-a83c-11e7-ab7e-25f46d4715c2-preview-btn-mark.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Then preview the content:<br><img src=\"https://www.cosmicjs.com/uploads/3a22ea70-a7b7-11e7-b956-b3101583a440-Screen Shot 2017-10-02 at 4.17.51 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>Here it is in Gif format:<br><img src=\"https://www.cosmicjs.com/uploads/abc8bb60-a83d-11e7-a69f-b9edbf41fd94-preview-link.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>It is our hope that this feature will further help developers and editors collaborate to create great apps and write compelling content. &nbsp;If you have any questions about this feature or other ways to build apps faster and easier using Cosmic <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\">join our Slack community</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>You can now add a link for your writers to be able to preview Object content. &nbsp;By setting up your Preview links on your Object Types, your writers will easily be able to preview changes to content in draft or published state.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"c00dd790-a842-11e7-accf-27ec26fef6ca-preview.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/c00dd790-a842-11e7-accf-27ec26fef6ca-preview.jpg","imgix_url":"https://imgix.cosmicjs.com/c00dd790-a842-11e7-accf-27ec26fef6ca-preview.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-10-02T16:31:01.771Z","created_by":"5357ef811693be2118000001","created":"2017-10-02T16:31:01.771Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>You can now add a link for your writers to be able to preview Object content. &nbsp;By setting up your Preview links on your Object Types, your writers will easily be able to preview changes to content in draft or published state.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/c00dd790-a842-11e7-accf-27ec26fef6ca-preview.jpg","imgix_url":"https://imgix.cosmicjs.com/c00dd790-a842-11e7-accf-27ec26fef6ca-preview.jpg"}}},{"_id":"59cd0065c6bfb9652b00175e","order":95,"slug":"product-updates-localization-repeater-items-and-more","title":"Product Updates: Localization, Repeater Items and more","content":"<p>We&#39;ve rolled out a few updates that were requested by members of our community. &nbsp;Check them out below:</p><p><strong>1. Localization</strong><strong><br></strong>We&#39;ve consolidated Objects with multiple locales to appear on the same row with links to each localized Object in the Objects table view.</p><p style=\"text-align: center;\"><strong><img src=\"https://www.cosmicjs.com/uploads/8390fe60-a486-11e7-81e6-db0f42c0a9f7-localization.png\" style=\"width: 80%;\" class=\"fr-fic fr-dib\"></strong></p><p><br></p><p><strong>2. Repeater Item Sorting</strong><br>You can now drag and drop sort your repeating items.</p><p style=\"text-align: center;\"><strong><img src=\"https://www.cosmicjs.com/uploads/6f5073e0-a472-11e7-81e6-db0f42c0a9f7-Screen Shot 2017-09-28 at 11.28.49 AM.png\" style=\"width: 300px;\" class=\"fr-fic fr-dib\"></strong></p><p><br></p><p><strong>3. Embedly</strong><br>We&#39;ve added <a href=\"http://embed.ly/\" rel=\"noopener noreferrer\" target=\"_blank\">Embedly</a> functionality to our HTML editor to allow you to easily add GitHub Gists, Twitter cards <a href=\"http://embed.ly/providers\">and more</a>.</p><p>Add a link to the resource using the Embedly icon in the editor:</p><p><br></p><p style=\"text-align: center;\"><strong><img src=\"https://www.cosmicjs.com/uploads/ddd3c600-a472-11e7-9213-cd6969b1c63d-Screen Shot 2017-09-28 at 12.31.02 PM.png\" style=\"width: 80%;\" class=\"fr-fic fr-dib\"></strong></p><p><br></p><p>Wherever this content goes, you will need to make sure you have the <a href=\"http://docs.embed.ly/docs/platformjs\" rel=\"noopener noreferrer\" target=\"_blank\">Embedly script</a> installed on your webpage.</p><p>And it will look something like this:</p><div class=\"fr-embedly         \" data-original-embed=\"<a href='https://twitter.com/CharlieMack7301/status/912774348750053376' class='embedly-card'></a>\"><a href=\"https://twitter.com/CharlieMack7301/status/912774348750053376\" class=\"embedly-card\"></a></div>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>We&#39;ve rolled out a few updates that were requested by members of our community.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"0afa7760-76be-11e7-a00c-4fed1ad8a55e-guillaume-bolduc-259596.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0afa7760-76be-11e7-a00c-4fed1ad8a55e-guillaume-bolduc-259596.jpg","imgix_url":"https://imgix.cosmicjs.com/0afa7760-76be-11e7-a00c-4fed1ad8a55e-guillaume-bolduc-259596.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-09-28T14:00:05.512Z","created_by":"5357ef811693be2118000001","created":"2017-09-28T14:00:05.512Z","status":"published","modified_at":"2020-08-10T14:04:22.001Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We&#39;ve rolled out a few updates that were requested by members of our community.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/0afa7760-76be-11e7-a00c-4fed1ad8a55e-guillaume-bolduc-259596.jpg","imgix_url":"https://imgix.cosmicjs.com/0afa7760-76be-11e7-a00c-4fed1ad8a55e-guillaume-bolduc-259596.jpg"}}},{"_id":"59c0242aa67fea8d4b001c6e","order":96,"slug":"introducing-the-developer-program","title":"Introducing the Developer Program","content":"<p><img src=\"https://cosmicjs.imgix.net/573585d0-9d41-11e7-9022-cf144d5fea2d-goran-ivos-307271.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>We are excited to announce our Developer Program (in private beta) which gives developers the opportunity to join us in our mission to help others build apps faster using Cosmic.<br><br>If you would like to contribute <a href=\"https://www.cosmicjs.com/apps\">Apps</a>, <a href=\"https://www.cosmicjs.com/extensions\">Extensions</a> and <a href=\"https://www.cosmicjs.com/blog\">Articles</a> to help others learn and build using Cosmic, you can request access to join the Developer Program in Your Account Settings &gt; Developer Dashboard area. &nbsp;Once added to our developer community, you will be able to contribute content to show off the cool things you can build using Cosmic and get compensated for quality contributions. &nbsp;More active developers will have the opportunity to work on various projects that come our way.<br><br>We look forward to seeing what you build and learning about how you build apps faster using Cosmic! &nbsp;For more information, please reach out to us in <a href=\"https://www.cosmicjs.com/community\">our Slack community</a>, <a href=\"https://twitter.com/cosmic_js\">on Twitter</a>, or by emailing us at <a href=\"mailto:build@cosmicjs.com\">build@cosmicjs.com</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>We are excited to announce our Developer Program (in private beta) and we invite developers to join us in our mission to help our community learn more about how to build apps faster using Cosmic.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"573585d0-9d41-11e7-9022-cf144d5fea2d-goran-ivos-307271.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/573585d0-9d41-11e7-9022-cf144d5fea2d-goran-ivos-307271.jpg","imgix_url":"https://imgix.cosmicjs.com/573585d0-9d41-11e7-9022-cf144d5fea2d-goran-ivos-307271.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-09-18T19:53:13.965Z","created_by":"5357ef811693be2118000001","created":"2017-09-18T19:53:13.965Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We are excited to announce our Developer Program (in private beta) and we invite developers to join us in our mission to help our community learn more about how to build apps faster using Cosmic.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/573585d0-9d41-11e7-9022-cf144d5fea2d-goran-ivos-307271.jpg","imgix_url":"https://imgix.cosmicjs.com/573585d0-9d41-11e7-9022-cf144d5fea2d-goran-ivos-307271.jpg"}}},{"_id":"59baf102bed717b62f0004f4","order":97,"slug":"developer-spotlight-ben-packer","title":"Developer Spotlight: Ben Packer","content":"<p><img src=\"https://cosmicjs.imgix.net/60ba6a80-674a-11e7-a522-2b0861658cb0-Brand_New_Congress_logo.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>In this <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> Developer Spotlight, we sat down with Ben Packer, a web developer who focused on natural language processing prior to turning his talents toward web development for non-profit initiatives. Ben serves as the Director of Technology for <a href=\"https://brandnewcongress.org\" rel=\"noopener noreferrer\" target=\"_blank\">Brand New Congress</a>, an initiative aiming to elect 535 new members of Congress. &nbsp;Check him out on <a href=\"https://twitter.com/ben_pr_packer\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> or <a href=\"https://www.linkedin.com/in/benpaulryanpacker/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a>, and enjoy the Q/A.<br><br><strong>How long have you been building software?</strong><br>I&#39;ve been programming for 4 years now, but only full-time professionally for 3 months since I graduated college. I&#39;ve done a bit of everything, previously focusing on natural language processing before turning to web development.<br><br><strong>What is your preferred development stack?<br></strong>I&#39;ve used lots of MERN (MongoDB, Express, React, Node), but have recently made the switch to Elixir + Phoenix + Postgres, which is what I&#39;ve done all of my Cosmic based development with. Despite the JS in the Cosmic name, Elixir&#39;s been a great fit due to its built-in in-memory storage solution, called &quot;ets&quot; (Erlang Term Storage). This, combined with Cosmic&#39;s web-hooks, has let me serve Cosmic-based pages very quickly out of a cache without managing a separate external Redis or Memcached instance. You can find our Elixir Cosmic wrapper and cache solution <a href=\"https://github.com/BrandNewCongress/cosmic_ex\">here</a>.<br><br><strong>What past projects are you most proud of and why?<br></strong>My work with <a href=\"https://brandnewcongress.org\" rel=\"noopener noreferrer\" target=\"_blank\">Brand New Congress</a> and <a href=\"https://justicedemocrats.com\" rel=\"noopener noreferrer\" target=\"_blank\">Justice Democrats</a> has been building the tools required to effectively run a large scale and modern grassroots political campaign. I feel very fortunate that I get to focus and do this political work full-time, rather than volunteer and split my headspace as many developers do. Before working with Brand New Congress and Justice Democrats, I developed an open source online meeting platform called <a href=\"https://github.com/ben-pr-p/assemble\" rel=\"noopener noreferrer\" target=\"_blank\">assemble</a>, which uses WebRTC technology to bring the experience of breakout groups common in physical meetings to your browser.<br><br><strong>Talk a little bit more about your process for building apps. How is building apps for political or idealogical causes different than other client work? </strong><br>I&#39;m also very happy that I&#39;m able to develop all of these solutions in the open with an A-GPL license attached. Once our tools are mature and ready to be re-purposed, we&#39;ll have reduced the costs of running grassroots political campaigns for other organizations and future campaigns, who will be able to self-host what we&#39;ve developed at a fraction of the cost of traditional campaign software services.<br><br><strong>What are some technologies you are excited about that you are using today, or want to learn more about?<br></strong>Cosmic has made it much easier for me to enable the non-programming parts of our organization to configure the software I make, and to edit the content on our websites. Our use of it has evolved beyond a CMS to a general admin interface &ndash; we use it to <a href=\"https://github.com/BrandNewCongress/cosmic-shortener\">manage a url shortener</a>, as a user whitelist for internal tools, to specify changing webhooks, etc. With Cosmic, after I recognize that a particular component of our website or process will need to change, I can implement a mechanism for that component to be edited or configured in a matter of minutes.</p><p>I don&#39;t think that development for political causes is too different than more typical development &ndash; we move quickly, things break sometimes, etc. What may be different is that we have volunteers who contribute their own amount of time and/or expertise. If you have experience with Elixir, React, Node.js, or setting up AWS-based workflows and you want to help elect a congress full of individuals who support medicare for all, massive investment in our infrastructure and renewable energy, and refuse to take corporate money, send me an email at <a href=\"mailto:ben@justicedemocrats.com\">ben@justicedemocrats.com</a> and we&#39;ll find the best way for you to help.</p><p>Our internal tools are built using React, Ant.Design (a React UI toolkit), and communicate with our server over Phoenix Channels (websockets), creating a snappy user experience. Staff members and volunteers will end up spending a lot of their time in these tools, contacting our supporters, managing events, etc., and so it&#39;s important that they&#39;re performant, with as few pain points as possible.</p><p>For our world facing websites, I&#39;d like to bring as much of the new web as I can to the political space. A lot of the things we&#39;re encouraging supporters to do are collective action problems &ndash; individually ineffective, but collectively powerful, and it&#39;s one&#39;s belief that you&#39;re all working alongside others that gives you the confidence to try. However, people are also overworked and worried about the future, including not only the future of our political system but also their next two weeks.</p><p>So, it&#39;s my hope that in the coming months we&#39;ll be able to design experiences that not only inspire a sense of participation and belonging in collective political action, but that we&#39;ll be able to deliver those experiences while you&#39;re riding a bus and surfing the web on your friend&#39;s old Android phone.</p><p>To learn how you can contribute Apps, Articles and Extensions to the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a>, contact us at <a href=\"mailto:support@cosmicjs.com\">support@cosmicjs.com</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>In this Developer Spotlight we sit down with Ben Packer, a web developer who&#39;s writing code for a cause.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"9c1b9d70-9c7d-11e7-b535-f98e7a50bba9-bnc.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/9c1b9d70-9c7d-11e7-b535-f98e7a50bba9-bnc.jpg","imgix_url":"https://imgix.cosmicjs.com/9c1b9d70-9c7d-11e7-b535-f98e7a50bba9-bnc.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-09-14T21:13:38.399Z","created_by":"5716b504e9c686d006000073","created":"2017-09-14T21:13:38.399Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this Developer Spotlight we sit down with Ben Packer, a web developer who&#39;s writing code for a cause.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/9c1b9d70-9c7d-11e7-b535-f98e7a50bba9-bnc.jpg","imgix_url":"https://imgix.cosmicjs.com/9c1b9d70-9c7d-11e7-b535-f98e7a50bba9-bnc.jpg"}}},{"_id":"59b95345b31fba6012000a02","order":98,"slug":"developer-spotlight-matt-cain","title":"Developer Spotlight: Matt Cain","content":"<p><img src=\"https://www.cosmicjs.com/uploads/16fabe30-9a1d-11e7-8074-299a9406903d-web-design-and-development.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>In our latest installment of the <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> Developer Spotlight Series, we sat down with Matt Cain, a web developer who took a physics undergrad and spring-boarded into the world of Java, Rails and ultimately, programming language agnostic APIs. In addition to his day job of being a web application developer and writing code, Matt is a <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Contributor</a> and responsible for several apps and blogs in our ecosystem. Check him out on his <a href=\"http://mattcain.io/\" rel=\"noopener noreferrer\" target=\"_blank\">portfolio site</a> or <a href=\"https://www.linkedin.com/in/mattcainpgh/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a>, and enjoy the Q/A.<br><br><strong>How long have you been building software?<br></strong>I&#39;ve been seriously building software for about a year. When I was a kid I liked to play around building static sites in Frontpage (the good old days) but moved away from it. Still, I continued to follow the web development world in the background and about a year ago, around last October, I decided to dive in and get my hands dirty. With the Java and <a href=\"https://www.cosmicjs.com/knowledge-base/python-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Python</a> skills I picked up from my physics undergrad I was able to pick up <a href=\"https://www.cosmicjs.com/knowledge-base/javascript-cms\" rel=\"noopener noreferrer\" target=\"_blank\">JavaScript</a> and <a href=\"https://www.cosmicjs.com/knowledge-base/ruby-on-rails-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Rails</a> pretty quickly and started working with &nbsp;their respective frameworks.<br><br><strong>What is your preferred development stack?</strong><br>I love full stack <a href=\"https://www.cosmicjs.com/knowledge-base/javascript-cms\" rel=\"noopener noreferrer\" target=\"_blank\">JavaScript</a> with NoSQL. I love language agnostic APIs. If I can get away with it, I prefer using services like <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> as a database rather than something like MongoDB. I realize there are flaws inherent to those preferences but I&#39;m typically working by myself or in small teams, so keeping code in one language and data remote really reduces cognitive strain.<br><br><strong>What past projects are you most proud of and why?</strong><br>I always like to say my first real project is my favorite. I had spent a couple weeks learning Rails and some fundamental CS stuff and really wanted to build my own app. So I decided on a map data visualization app. I used Rails, jQuery, and hosted the maps with MapBox and basically learned everything as I went. The code&#39;s sloppy, it doesn&#39;t look great, but it was something that made me proud and encouraged me to keep going. Check the live website out here: <a href=\"http://pghmaps.mattcain.io/\" rel=\"noopener noreferrer\" target=\"_blank\">http://pghmaps.mattcain.io/</a>. &nbsp;More recently, I was pretty satisfied with the <a href=\"https://www.cosmicjs.com/apps/premium-content-blog\" rel=\"noopener noreferrer\" target=\"_blank\">Premium User Blog app</a> I built for <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a>.<br><br><strong>Talk a little bit more about your process for building apps, who they&#39;re for, and how Cosmic has helped.&nbsp;</strong><br>I&#39;ve been building a lot of small apps and prototypes for mostly small businesses and entrepreneuers. So I like to deliver things fast. <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> being essentially a simple to use, one-stop-shop for everything I need to deploy is a blessing.<br><br><strong>What are some technologies you are excited about that you are using today, or want to learn more about?</strong><br>I&#39;m excited about using PWA&#39;s and integrating bots in sites more. I&#39;m very much looking foward to where AR goes.</p><p>To learn how you can contribute Apps, Articles and Extensions to the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a>, contact us at <a href=\"mailto:support@cosmicjs.com\">support@cosmicjs.com</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>In our latest installment of the <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> Developer Spotlight Series, we sat down with Matt Cain, a physics major turned Creative Director and Developer.&nbsp;</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"fbe180e0-9a15-11e7-b3ce-37829f00d429-web-design-and-development.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/fbe180e0-9a15-11e7-b3ce-37829f00d429-web-design-and-development.jpg","imgix_url":"https://imgix.cosmicjs.com/fbe180e0-9a15-11e7-b3ce-37829f00d429-web-design-and-development.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-09-13T15:48:21.444Z","created_by":"5716b504e9c686d006000073","created":"2017-09-13T15:48:21.444Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In our latest installment of the <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> Developer Spotlight Series, we sat down with Matt Cain, a physics major turned Creative Director and Developer.&nbsp;</p>","featured_image":{"url":"https://cdn.cosmicjs.com/fbe180e0-9a15-11e7-b3ce-37829f00d429-web-design-and-development.jpg","imgix_url":"https://imgix.cosmicjs.com/fbe180e0-9a15-11e7-b3ce-37829f00d429-web-design-and-development.jpg"}}},{"_id":"59b9531a9410590110000a1f","order":99,"slug":"garrett-sibinga","title":"Developer Spotlight: Garrett Sibinga","content":"<p>In our latest installment of the <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> Developer Spotlight Series, we sat down with Garrett Sibinga, a web application designer and developer focusing on HTML, CSS and JavaScript. In addition to designing and writing code, Garrett travels and actually wrote this piece from a cafe on a ferry on the North Sea (pictured below). Check him out on his site <a href=\"http://garrett.is/\" target=\"_blank\">Garrett.is</a> or <a href=\"https://www.linkedin.com/in/jgsibinga/\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a>, and enjoy the Q/A.</p><p><img src=\"https://www.cosmicjs.com/uploads/92020f30-9963-11e7-bb10-1d2d57c848bf-unnamed.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><strong>How long have you been developing software?</strong><br>I&#39;ve been working in web development since 2013, so four years now. In most industries this isn&#39;t a whole lot of time, but when I think about some of the web technologies that we were excited about in 2013 I can&#39;t believe how outdated they sound. It&#39;s a landscape that is constantly changing, and with the exception of a few things the industry basically rewrites itself every few years.<br><br><strong>What drew you to Cosmic?</strong><br>Well, I think it was sort of precisely this thing -- the necessity for a certain amount of flexibility in an industry where the only thing that is certain is change. A programming language agnostic CMS seemed like a really appealing idea. I think I&#39;ve always sort of thought of myself as a language agnostic developer. It&#39;s not that I don&#39;t read certain languages better or feel more comfortable writing with the syntax of some languages, but I think as a general approach it is best not to get too attached. That&#39;s why I love the idea of a platform that works with a wide range of languages, where you can use the best languages or libraries depending on the project.<br><br><strong>What is your preferred development stack?</strong><br>I started out programming in Java, learned Python for some courses and projects I took on, picked up some Ruby along the way, and worked with a MAMP stack with WordPress for a while. Even if you fall in love with a language there are no guarantees that it will be widely used in 2 years, or even 2 months. I think you learn to adapt as a developer, and these experiences add to your baseline for learning and understanding new languages. It&#39;s all part of an exercise improving your code literacy in my view. I&#39;m new to Node.js, but I&#39;ve really been enjoying the flexibility and speed that it allows so far, and look forward to seeing where this new adventure leads.<br><br><strong>What projects are you most proud of and why?</strong><br>For development projects, I built a world clock app that used the Flickr API to pull images based on your location. It is part of an art piece which has showed at a couple of museums, and just closed out a show at the <a href=\"http://cphco.org/en/\" rel=\"noopener noreferrer\" target=\"_blank\">Copenhagen Contemporary in Denmark</a>. This was one of my first experiences working with API&#39;s in a JavaScript environment, and I really enjoyed working with external data so I guess in a way it was a precursor to working with Cosmic.<br><br><strong>How does Cosmic improve your process for building software?</strong><br>Cosmic is great for me because it allows me to entirely separate my code from my content. This is a wonderful feature because it really streamlines the process of creating web apps that aren&#39;t tied to one particular instance. I have also really enjoyed using <a href=\"http://www.cosmic-staging.com/features\" rel=\"noopener noreferrer\" target=\"_blank\">Imgix</a> to serve different sizes of images -- being able to add query strings for size to your image url&#39;s straight into your template is awesome and really powerful. It&#39;s a great way to build applications that perform really well at a wide range of screen sizes by serving only the content sizes that you need. The added bonus of integrated version control through <a href=\"https://github.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a> means that you are able to work very quickly to develop clean and concise codebases.<br><br><strong>What technologies are you excited about right now?</strong><br>I&#39;m excited about npm and Node because they are new to me, but really they are exciting because they open up a whole new realm of possibilities with npm&#39;s libraries and frameworks. Most notably among these is React, because of the added speed\r\nbonus of being able to develop for multiple platforms at the same time. I&#39;m also looking forward to integrating asynchronous javascript into more of my projects because it&#39;s scary fast.</p><p>When Garrett&#39;s not building new apps on the Cosmic platform he occasionally updates his website: <a href=\"http://garrett.is/\" target=\"_blank\">Garrett.is</a>. If you are interested in connecting you can find him on <a href=\"http://linkedin.com/in/jgsibinga\" rel=\"noopener noreferrer\" target=\"_blank\">LinkedIn</a> or hit him up with an <a href=\"mailto:garrett.sibinga@gmail.com\" rel=\"noopener noreferrer\" target=\"_blank\">email</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>In our latest installment of the <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> Developer Spotlight Series, we sat down with Garrett Sibinga, a web application designer and developer focusing on HTML, CSS and JavaScript</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"afd683a0-9964-11e7-8195-ebc4f8e92f76-john-salzarulo-342868.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/afd683a0-9964-11e7-8195-ebc4f8e92f76-john-salzarulo-342868.jpg","imgix_url":"https://imgix.cosmicjs.com/afd683a0-9964-11e7-8195-ebc4f8e92f76-john-salzarulo-342868.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-09-13T15:47:38.589Z","created_by":"5716b504e9c686d006000073","created":"2017-09-13T15:47:38.589Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In our latest installment of the <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> Developer Spotlight Series, we sat down with Garrett Sibinga, a web application designer and developer focusing on HTML, CSS and JavaScript</p>","featured_image":{"url":"https://cdn.cosmicjs.com/afd683a0-9964-11e7-8195-ebc4f8e92f76-john-salzarulo-342868.jpg","imgix_url":"https://imgix.cosmicjs.com/afd683a0-9964-11e7-8195-ebc4f8e92f76-john-salzarulo-342868.jpg"}}},{"_id":"59b801a7b87c84fe09000670","order":100,"slug":"build-an-appointment-scheduler-using-react-twilio-and-cosmic-js","title":"Build an Appointment Scheduler Using React, Twilio and Cosmic","content":"<p><img src=\"https://www.cosmicjs.com/uploads/7f0989a0-97d1-11e7-aeb7-99586de38c8d-cal.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><h2>TL;DR</h2><p><a href=\"https://www.cosmicjs.com/apps/appointment-scheduler/demo\" rel=\"noopener noreferrer\">View the demo</a><br><a href=\"https://www.cosmicjs.com/apps/appointment-scheduler\">Install the App</a><br><a href=\"https://github.com/cosmicjs/appointment-scheduler\" rel=\"noopener noreferrer\" target=\"_blank\">View the codebase</a><br><br></p><p>Your time is valuable but you can&#39;t waste a second of it. People need to see you because work needs to get done and there are collaborations to be made. Instead of letting people communicate with you directly to schedule their use of your time - which only wastes it more - we&#39;ll use Cosmic to build an appointment scheduler. That way, the people who need to talk to you only have to once.</p><p>Cosmic is an API-first CMS, meaning it is language independent, database independent, and practically everything-else independent. This is great for a small project like this one because we can extend it quickly with any language or framework in the future and we can define data structures that are only as complex as we need them to be.</p><p>Our Appointment Scheduler will let users select a day and a one-hour time slot between 9AM and 5PM to meet with us. We&#39;ll then integrate our app with Twilio to send them a confirmation text that their appointment has been scheduled. Finally, we&#39;ll build a Cosmic Extension so we can manage the appointments right from within the Cosmic dashboard.</p><p>We&#39;ll complete our project in 3 major sections:</p><ol><li>Building out the front-end in React and Webpack, with the help of the Material UI component library</li><li>Wiring it up to a simple Express backend that will serve to make API calls to Twilio and to expose our Appointment objects to the front-end (in the spirit of keeping our Cosmic bucket keys out of our frontend code)</li><li>Building the Extension in React, again using the Material UI library</li></ol><p>But, before any of that, we need to get our Cosmic bucket ready to store and serve data.</p><h2>Part 0: Setting Up Cosmic</h2><p>We&#39;ll use two types of Objects to store our data: one for appointments and one for site configurations. In Cosmic, first create the <code>Appointments</code> object type with the specified metafields. Then, we&#39;ll create a <code>Configs</code> object type with no default metafields and a <code>Site</code> object in which we&#39;ll define object-specific metafields.</p><p><strong>Appointments</strong></p><table><thead><tr><th>Metafield Name</th><th>Type</th></tr></thead><tbody><tr><td>email</td><td>text</td></tr><tr><td>phone</td><td>text</td></tr><tr><td>date</td><td>text</td></tr><tr><td>slot</td><td>text</td></tr></tbody></table><p><br></p><p>Here, <code>email</code> and <code>phone</code> will be the user&#39;s metadata &mdash; we&#39;ll use their name as the Appointment object&#39;s title. <code>Date</code>will hold the appointment date in <code>YYYY-DD-MM</code> format and <code>slot</code> will be how many hours away the appointment is from 9AM.</p><p><strong>Configs</strong>/<strong>Site</strong></p><table><thead><tr><th>Metafield Name</th><th>Type</th><th>Value</th></tr></thead><tbody><tr><td>site_title</td><td>text</td><td>Cosmic Appointment Scheduler</td></tr><tr><td>about_page_url</td><td>text</td><td><a href=\"https://www.cosmicjs.com/about\">https://www.cosmicjs.com/about</a></td></tr><tr><td>contact_page_url</td><td>text</td><td><a href=\"https://www.cosmicjs.com/contact\">https://www.cosmicjs.com/contact</a></td></tr><tr><td>home_page_url</td><td>text</td><td><a href=\"https://www.cosmicjs.com/\">https://www.cosmicjs.com</a></td></tr></tbody></table><p><br></p><p>We&#39;re using the <code>Config</code> object to define details about the app that we want to be able to change on the fly, rather than having to redeploy for.</p><p>And with our simple data scheme in place, we&#39;re ready to get building.</p><h2>Part 1: Building the Front End</h2><h3>1. Boilerplate setup</h3><ol><li>First, we&#39;ll make our <code>appointment-scheduler</code> directory, run <code>yarn init</code> (feel free to use npm), and set up the project structure as follows:</li></ol><pre><code>appointment-scheduler\r\n|\r\n|--dist\r\n|--src\r\n|. |--Components\r\n|. |. |--App.js\r\n|. |--index.html\r\n|. |--index.js\r\n|--.babelrc\r\n|--.gitignore\r\n|--package.json\r\n|--webpack.config.js\r\n</code></pre><ol start=\"2\"><li>Then, we&#39;ll make our HTML template:</li></ol><pre>&lt;!-- ./src/index.html --&gt;\r\n\r\n&lt;!DOCTYPE html&gt;\r\n&lt;html&gt;\r\n  &lt;head&gt;\r\n    &lt;meta charset=&quot;utf-8&quot;&gt;\r\n    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1, maximum-scale=1&quot;&gt;\r\n    &lt;link href=&quot;https://fonts.googleapis.com/css?family=Roboto&quot; rel=&quot;stylesheet&quot;&gt;\r\n    &lt;title&gt;Appointment Scheduler&lt;/title&gt;\r\n  &lt;/head&gt;\r\n  &lt;body&gt;\r\n    &lt;div id=&quot;root&quot;&gt;&lt;/div&gt;\r\n  &lt;/body&gt;\r\n&lt;/html&gt;</pre><ol start=\"3\"><li>Next, we&#39;ll install the packages we need. Of interest, alongside any standard packages needed to develop a React app in ES6, we&#39;ll be using:<ul><li><code>async</code> for an easy way to make ajax calls in series</li><li><code>axios</code> as a useful ajax utility</li><li><code>babel-preset-stage-3</code> to make use of the <code>const { property } = object</code> destructuring pattern</li><li><code>material-ui</code> for a convenient set of React-built Material Design components</li><li><code>moment</code> for parsing times</li><li><code>normalize.css</code> to clear browser-default styles</li><li><code>react-tap-event-plugin</code> - a necessary companion to <code>material-ui</code></li></ul></li><li>To install everything we need, run <code>yarn add async axios babel-preset-stage-3 material-ui moment normalze.css react react-dom react-tap-event-plugin</code>, and for our dev-dependencies, <code>yarn add babel-core babel-loader babel-preset-env babel-preset-react css-loader eslint file-loader html-webpack-plugin path style-loader webpack</code></li><li>Having installed the Babel packages we need, we&#39;ll tell Babel to use them in it&#39;s config file and we&#39;ll tell git to ignore everyhing we just installed:<pre>// ./.babelrc\r\n\r\n{ &quot;presets&quot;: [&quot;env&quot;, &quot;react&quot;, &quot;stage-3&quot;] }</pre><pre><code># ./.gitignore\r\n\r\nnode_modules\r\n</code></pre></li><li>Finally, we&#39;ll set up Webpack so everything&#39;s in place for build time<pre>const path = require(&#39;path&#39;)\r\nconst HtmlWebpackPlugin = require(&#39;html-webpack-plugin&#39;)\r\nconst webpack = require(&#39;webpack&#39;)\r\n\r\nmodule.exports = {\r\n  entry: &#39;./src/index.js&#39;,\r\n  output: {\r\n    path: path.resolve(&#39;dist&#39;),\r\n    filename: &#39;bundle.js&#39;,\r\n    sourceMapFilename: &#39;bundle.map.js&#39;\r\n  },\r\n  devtool: &#39;source-map&#39;,\r\n  devServer: {\r\n    port: 8080\r\n  },\r\n  module: {\r\n    rules: [{\r\n      test: /\\.js$/,\r\n      use: { loader: &#39;babel-loader&#39; },\r\n      exclude: path.resolve(&#39;node_modules&#39;)\r\n    }, {\r\n      test: [/\\.scss$/,/\\.css$/],\r\n      loader: [&#39;style-loader&#39;, &#39;css-loader&#39;, &#39;sass-loader&#39;]\r\n    }, {\r\n      test: /\\.(png|jpg|gif|svg)$/,\r\n      use: [\r\n        { loader: &#39;file-loader&#39; }\r\n      ]\r\n    }]\r\n  },\r\n  plugins: [\r\n    new HtmlWebpackPlugin({\r\n      template: &#39;./src/index.html&#39;,\r\n      filename: &#39;index.html&#39;,\r\n      inject: true,\r\n      xhtml: true\r\n    }),\r\n    new webpack.DefinePlugin({\r\n      PRODUCTION: process.env.NODE_ENV === &#39;production&#39;\r\n    })\r\n  ]\r\n}</pre></li></ol><p>We&#39;ve configured Webpack to output <code>bundle.js</code>, it&#39;s source map, and <code>index.html</code> (according to the template in <code>src</code>) to <code>dist</code> on building. You also have the option to use SCSS throughout the project and have access to your Node environment via <code>window.PRODUCTION</code> at build-time.</p><h3>2. Create an Entry Point</h3><p>Before we go any further we need to define an entry point for our app. Here, we&#39;ll import any necessary global libraries or wrapper components. We&#39;ll also use it as the render point for our React app. This will be our <code>src/index.js</code> file and it will look like this:</p><pre>// ./src/index.js\r\n\r\nimport React from &#39;react&#39;\r\nimport ReactDom from &#39;react-dom&#39;\r\nimport App from &#39;./Components/App&#39;\r\nimport MuiThemeProvider from &#39;material-ui/styles/MuiThemeProvider&#39;\r\n\r\nimport &#39;normalize.css&#39;\r\n\r\nrequire(&#39;./scss/app.scss&#39;)\r\n\r\nwindow.React = React\r\n\r\nReactDom.render(\r\n  &lt;MuiThemeProvider&gt;\r\n    &lt;App /&gt;\r\n  &lt;/MuiThemeProvider&gt;,\r\n  document.getElementById(&#39;root&#39;)\r\n)\r\n\r\n// MuiThemeProvider is a wrapper component for MaterialUI&#39;s components</pre><h3>3. Work out a Skeleton</h3><p>Having eveything in place to get our app working, we have a few things to consider and a few choices to make about how we want our app to work before we start building it. To help us think, we&#39;ll build out a basic skeleton of how we need it to look:</p><pre>// ./src/Components/App.js\r\n\r\nimport { Component } from &#39;react&#39;\r\nimport injectTapEventPlugin from &#39;react-tap-event-plugin&#39;\r\n\r\ninjectTapEventPlugin()\r\n\r\nexport default class App extends Component {\r\n    constructor() {\r\n    super()\r\n      this.state = {\r\n            // initial state\r\n        }\r\n        \r\n  //method bindings\r\n    }\r\n  \r\n  //component methods?\r\n  \r\n  //lifecycle methods\r\ncomponentWillMount() {\r\n        //fetch data from cosmic, watch window width\r\n    }\r\n  componentWillUnmount() {\r\n        //remove window width event listener\r\n    }\r\n  render() {\r\n     //define variables\r\n      return (\r\n        &lt;div&gt;\r\n          &lt;/div&gt;\r\n        )\r\n    }\r\n}</pre><p>To start, we need to think about what the app&#39;s state will look like. Here are some considerations:</p><ul><li>The app loads data from an external server, so it would be useful to show our user&#39;s when that&#39;s happening</li><li>Material Design implements a drawer-style navigation, so we need to track when that&#39;s open</li><li>To confirm the user&#39;s appointment details before submitting, we&#39;ll show them a confirmation modal and for other notifactions we&#39;ll use Material Design&#39;s snackbar, which displays small notifications at the bottom of the page. We&#39;ll need to track the open state of both of these.</li><li>Our appointment scheduling process we&#39;ll take place in three steps: selecting a date, selecting a time slot, and filling out personal information. We need to track which step the user is on, the date and time they&#39;ve selected, their contact details, and we also need to validate their email address and phone number.</li><li>We&#39;ll be loading configuration data and a schedule appointments that we&#39;d benefit from cacheing in the state.</li><li>As our user procedes through the 3 scheduling steps, we&#39;ll show a friendly sentence tracking their progress. (Example: &quot;Scheduling a 1 hour appointment at 3pm on&hellip;&quot;). We need to know if that should be displayed.</li><li>When the user is selecting an appoitment slot, they&#39;ll be able to filter by AM/PM, so we need to track which they&#39;re looking for.</li><li>Finally, we&#39;ll add some responsiveness to our styling and we need to keep track of the screen width.</li></ul><p>We then arrive at this as our initial state:</p><pre>// ./src/Components/App.js\r\n\r\n// ...\r\nthis.state = {\r\n  loading: true,\r\n  navOpen: false,\r\n  confirmationModalOpen: false,\r\n  confirmationTextVisible: false,\r\n  stepIndex: 0,\r\n  appointmentDateSelected: false,\r\n  appointmentMeridiem: 0,\r\n  validEmail: false,\r\n  validPhone: false,\r\n  smallScreen: window.innerWidth &lt; 768,\r\n  confirmationSnackbarOpen: false\r\n}</pre><p>Note that <code>appointmentMeridiem</code> takes on <code>0</code> or <code>1</code>, such that <code>0 =&gt; &#39;AM&#39;</code> and <code>1 =&gt; &#39;PM&#39;</code>.</p><h3>4. Draft Out Functionality</h3><p>We&#39;ve defined an initial state for our app, but before we build out a view with Material components we&#39;ll find it useful to brainstorm what needs done with our data. Our app will boil down to the following functionality:</p><ul><li>As decided in the previous step, our navitgation will be in a drawer so we need a <code>handleNavToggle()</code> method to display/hide it</li><li>The three scheduling steps are revealed to the user in succession upon completing a previous step, so we need a <code>handleNextStep()</code> method to handle the flow of user input</li><li>We&#39;ll user a Material UI date picker to set our appointment date and we need a <code>handleSetAppointmentDate()</code>method to process data from that component. Likewise, we need a <code>handleSetAppointmentSlot()</code> and <code>handleSetAppointmentMeridiem()</code> method. We don&#39;t want the date picker to show unavailable days (including <code>today</code>) so we need to pass a <code>checkDisableDate()</code> method to it.</li><li>In the <code>componentWillMount()</code> lifecycle method we&#39;ll fetch our data from our backend, then handle that data with a separate <code>handleFetch()</code> method. For a fetching error, we&#39;ll need a <code>handleFetchError()</code> method.</li><li>Upon submitting the appointment data, we&#39;ll use <code>handleSubmit()</code> to send it to our backend. We&#39;ll need a <code>validateEmail()</code> and <code>validatePhone()</code> method for when the user is filling out contact information.</li><li>The user-friendly string above the form will be rendered in a separate method with <code>renderConfirmationString()</code>. So will available appointment times and the confirmation modal with <code>renderAppointmentTimes()</code> and <code>renderAppointmentConfirmation()</code> respectively.</li><li>Finally, we&#39;ll use a handy <code>resize()</code> method to respond to the browser window changing in width</li></ul><p>All in all, unwritten methods included, our <code>App.js</code> now looks like this (method bindings included):</p><pre>// ./src/Components/App.js\r\n\r\nimport { Component } from &#39;react&#39;\r\nimport injectTapEventPlugin from &#39;react-tap-event-plugin&#39;\r\n\r\ninjectTapEventPlugin()\r\n\r\nexport default class App extends Component {\r\n    constructor() {\r\n    super()\r\n      this.state = {\r\n          loading: true,\r\n          navOpen: false,\r\n          confirmationModalOpen: false,\r\n          confirmationTextVisible: false,\r\n          stepIndex: 0,\r\n          appointmentDateSelected: false,\r\n          appointmentMeridiem: 0,\r\n          validEmail: false,\r\n          validPhone: false,\r\n          smallScreen: window.innerWidth &lt; 768,\r\n          confirmationSnackbarOpen: false\r\n        }\r\n       \r\n      //method bindings\r\n      this.handleNavToggle = this.handleNavToggle.bind(this)\r\n      this.handleNextStep = this.handleNextStep.bind(this)\r\n      this.handleSetAppointmentDate = this.handleSetAppointmentDate.bind(this)\r\n      this.handleSetAppointmentSlot = this.handleSetAppointmentSlot.bind(this)\r\n      this.handleSetAppointmentMeridiem = this.handleSetAppointmentMeridiem.bind(this)\r\n      this.handleSubmit = this.handleSubmit.bind(this)\r\n      this.validateEmail = this.validateEmail.bind(this)\r\n      this.validatePhone = this.validatePhone.bind(this)\r\n      this.checkDisableDate = this.checkDisableDate.bind(this)\r\n      this.renderAppointmentTimes = this.renderAppointmentTimes.bind(this)\r\n      this.renderConfirmationString = this.renderConfirmationString.bind(this)\r\n      this.renderAppointmentConfirmation = this.renderAppointmentConfirmation.bind(this)\r\n      this.resize = this.resize.bind(this)\r\n    }\r\n  \r\n  handleNavToggle() {\r\n        \r\n   }\r\n  \r\n  handleNextStep() {\r\n        \r\n    }\r\n  \r\n  handleSetAppointmentDate(date) {\r\n        \r\n    }\r\n  \r\n  handleSetAppointmentSlot(slot) {\r\n        \r\n    }\r\n  \r\n  handleSetAppointmentMeridiem(meridiem) {\r\n        \r\n    }\r\n  \r\n  handleFetch(response) {\r\n        \r\n    }\r\n  \r\n  handleFetchError(err) {\r\n        \r\n    }\r\n  \r\n  handleSubmit() {\r\n        \r\n    }\r\n  \r\n  validateEmail(email) {\r\n        \r\n    }\r\n  \r\n  validatePhone(phoneNumber) {\r\n        \r\n    }\r\n  \r\n  checkDisableDate(date) {\r\n        \r\n    }\r\n  \r\n  renderConfirmationString() {\r\n        \r\n    }\r\n  \r\n  renderAppointmentTimes() {\r\n        \r\n    }\r\n  \r\n  renderAppointmentConfirmation() {\r\n        \r\n    }\r\n  \r\n  resize() {\r\n        \r\n    }\r\n  \r\n  //lifecycle methods\r\ncomponentWillMount() {\r\n        //fetch data from cosmic, watch window width\r\n    }\r\n  componentWillUnmount() {\r\n        //remove window width event listener\r\n    }\r\n  render() {\r\n     //define variables\r\n      return (\r\n        &lt;div&gt;\r\n          &lt;/div&gt;\r\n        )\r\n    }\r\n}</pre><h3>5. Build Out the View</h3><p>Having a basic idea of how our app is going to function, we can start building out its UI. Besides a couple of wrappers and a few custom styles, the majority of our app will be constructed with pre-packaged Material UI components.</p><p>In order, we need:</p><ul><li>An <code>AppBar</code> which acts as the primary toolbar</li><li>A <code>Drawer</code>, which is opened from the <code>AppBar</code>&#39;s primary button and serves as the app&#39;s navigation, following Material Design.</li><li>Within the <code>Drawer</code>, <code>MenuItem</code>s to display links</li><li>A <code>Card</code> as the primary content container</li><li>A <code>Stepper</code> to break the scheduling process into 3 discreet steps. The active step will be expanded while the others are collapsed. The first step will be disabled if <code>state.loading</code> is true and the last two will be disabled as long as the user hasn&#39;t filled out the previous step.</li><li>Nested in the <code>Stepper</code>, three <code>Steps</code> which contain <code>StepButton</code> and <code>StepContent</code> components.</li><li>In the first <code>Step</code>, we&#39;ll use a <code>DatePicker</code> to let the user choose an appointment date. Unavailable days will be disabled according to the return value of <code>checkDisableDate()</code>. Selection of a date will be handled with <code>handleSetAppointmentDate()</code></li><li>In the second <code>Step</code>, we want the user to be able to pick a time slot for their selected day from the slots available. We also want them to be able to filter times according to AM/PM. We&#39;ll use a <code>SelectField</code> for the filter and a <code>RadioButtonGroup</code> to hold the time slot buttons. We need extra logic to render the radio buttons, so will do that in the <code>renderAppointmentTimes()</code> method. That will return a set of <code>RadioButton</code>s.</li><li>The last <code>Step</code> will ask the user to input their name, email address, and phone number using <code>TextField</code>components. A <code>RaisedButton</code> will be used a submit button to open the confirmation <code>Dialog</code>. The users inputted phone number and email address will be validated with <code>validatePhone()</code> and <code>validateEmail()</code> respectively.</li><li>Finally, we&#39;ll include a convenient <code>SnackBar</code> to display notifcations about the loading state and submission at the bottom of the page.<br>All in all, after having written out the <code>render()</code> method, our app will look like this:</li></ul><pre>// ./src/Components/App.js\r\n\r\n// .. previous imports\r\n\r\nimport AppBar from &#39;material-ui/AppBar&#39;\r\nimport Drawer from &#39;material-ui/Drawer&#39;\r\nimport Dialog from &#39;material-ui/Dialog&#39;\r\nimport Divider from &#39;material-ui/Divider&#39;\r\nimport MenuItem from &#39;material-ui/MenuItem&#39;\r\nimport Card from &#39;material-ui/Card&#39;\r\nimport DatePicker from &#39;material-ui/DatePicker&#39;\r\nimport TimePicker from &#39;material-ui/TimePicker&#39;\r\nimport TextField from &#39;material-ui/TextField&#39;\r\nimport SelectField from &#39;material-ui/SelectField&#39;\r\nimport SnackBar from &#39;material-ui/Snackbar&#39;\r\nimport {\r\n  Step,\r\n  Stepper,\r\n  StepLabel,\r\n  StepContent,\r\n  StepButton\r\n} from &#39;material-ui/stepper&#39;\r\nimport {\r\n  RadioButton,\r\n  RadioButtonGroup\r\n} from &#39;material-ui/RadioButton&#39;\r\nimport RaisedButton from &#39;material-ui/RaisedButton&#39;;\r\nimport FlatButton from &#39;material-ui/FlatButton&#39;\r\nimport logo from &#39;./../../dist/assets/logo.svg&#39;\r\n\r\nexport default class App extends Component {\r\n    // ... component methods, lifecycle methods\r\n  render() {\r\n    const { stepIndex, loading, navOpen, smallScreen, confirmationModalOpen, confirmationSnackbarOpen, ...data } = this.state\r\n    const contactFormFilled = data.firstName &amp;&amp; data.lastName &amp;&amp; data.phone &amp;&amp; data.email &amp;&amp; data.validPhone &amp;&amp; data.validEmail\r\n    const modalActions = [\r\n      &lt;FlatButton\r\n        label=&quot;Cancel&quot;\r\n        primary={false}\r\n        onClick={() =&gt; this.setState({ confirmationModalOpen : false})} /&gt;,\r\n      &lt;FlatButton\r\n        label=&quot;Confirm&quot;\r\n        primary={true}\r\n        onClick={() =&gt; this.handleSubmit()} /&gt;\r\n    ]\r\n    return (\r\n      &lt;div&gt;\r\n        &lt;AppBar\r\n          title={data.siteTitle}\r\n          onLeftIconButtonTouchTap={() =&gt; this.handleNavToggle() }/&gt;\r\n        &lt;Drawer\r\n          docked={false}\r\n          width={300}\r\n          open={navOpen}\r\n          onRequestChange={(navOpen) =&gt; this.setState({navOpen})} &gt;\r\n          &lt;img src={logo}\r\n               style={{\r\n                 height: 70,\r\n                 marginTop: 50,\r\n                 marginBottom: 30,\r\n                 marginLeft: &#39;50%&#39;,\r\n                 transform: &#39;translateX(-50%)&#39;\r\n               }}/&gt;\r\n          &lt;a style={{textDecoration: &#39;none&#39;}} href={this.state.homePageUrl}&gt;&lt;MenuItem&gt;Home&lt;/MenuItem&gt;&lt;/a&gt;\r\n          &lt;a style={{textDecoration: &#39;none&#39;}} href={this.state.aboutPageUrl}&gt;&lt;MenuItem&gt;About&lt;/MenuItem&gt;&lt;/a&gt;\r\n          &lt;a style={{textDecoration: &#39;none&#39;}} href={this.state.contactPageUrl}&gt;&lt;MenuItem&gt;Contact&lt;/MenuItem&gt;&lt;/a&gt;\r\n\r\n          &lt;MenuItem disabled={true}\r\n                    style={{\r\n                      marginLeft: &#39;50%&#39;,\r\n                      transform: &#39;translate(-50%)&#39;\r\n                    }}&gt;\r\n            {&quot;&copy; Copyright &quot; + moment().format(&#39;YYYY&#39;)}&lt;/MenuItem&gt;\r\n        &lt;/Drawer&gt;\r\n        &lt;section style={{\r\n            maxWidth: !smallScreen ? &#39;80%&#39; : &#39;100%&#39;,\r\n            margin: &#39;auto&#39;,\r\n            marginTop: !smallScreen ? 20 : 0,\r\n          }}&gt;\r\n          {this.renderConfirmationString()}\r\n          &lt;Card style={{\r\n              padding: &#39;10px 10px 25px 10px&#39;,\r\n              height: smallScreen ? &#39;100vh&#39; : null\r\n            }}&gt;\r\n            &lt;Stepper\r\n              activeStep={stepIndex}\r\n              linear={false}\r\n              orientation=&quot;vertical&quot;&gt;\r\n              &lt;Step disabled={loading}&gt;\r\n                &lt;StepButton onClick={() =&gt; this.setState({ stepIndex: 0 })}&gt;\r\n                  Choose an available day for your appointment\r\n                &lt;/StepButton&gt;\r\n                &lt;StepContent&gt;\r\n                  &lt;DatePicker\r\n                      style={{\r\n                        marginTop: 10,\r\n                        marginLeft: 10\r\n                      }}\r\n                      value={data.appointmentDate}\r\n                      hintText=&quot;Select a date&quot;\r\n                      mode={smallScreen ? &#39;portrait&#39; : &#39;landscape&#39;}\r\n                      onChange={(n, date) =&gt; this.handleSetAppointmentDate(date)}\r\n                      shouldDisableDate={day =&gt; this.checkDisableDate(day)}\r\n                       /&gt;\r\n                  &lt;/StepContent&gt;\r\n              &lt;/Step&gt;\r\n              &lt;Step disabled={ !data.appointmentDate }&gt;\r\n                &lt;StepButton onClick={() =&gt; this.setState({ stepIndex: 1 })}&gt;\r\n                  Choose an available time for your appointment\r\n                &lt;/StepButton&gt;\r\n                &lt;StepContent&gt;\r\n                  &lt;SelectField\r\n                    floatingLabelText=&quot;AM or PM&quot;\r\n                    value={data.appointmentMeridiem}\r\n                    onChange={(evt, key, payload) =&gt; this.handleSetAppointmentMeridiem(payload)}\r\n                    selectionRenderer={value =&gt; value ? &#39;PM&#39; : &#39;AM&#39;}&gt;\r\n                    &lt;MenuItem value={0}&gt;AM&lt;/MenuItem&gt;\r\n                    &lt;MenuItem value={1}&gt;PM&lt;/MenuItem&gt;\r\n                  &lt;/SelectField&gt;\r\n                  &lt;RadioButtonGroup\r\n                    style={{ marginTop: 15,\r\n                             marginLeft: 15\r\n                           }}\r\n                    name=&quot;appointmentTimes&quot;\r\n                    defaultSelected={data.appointmentSlot}\r\n                    onChange={(evt, val) =&gt; this.handleSetAppointmentSlot(val)}&gt;\r\n                    {this.renderAppointmentTimes()}\r\n                  &lt;/RadioButtonGroup&gt;\r\n                &lt;/StepContent&gt;\r\n              &lt;/Step&gt;\r\n              &lt;Step disabled={ !Number.isInteger(this.state.appointmentSlot) }&gt;\r\n                &lt;StepButton onClick={() =&gt; this.setState({ stepIndex: 2 })}&gt;\r\n                  Share your contact information with us and we&#39;ll send you a reminder\r\n                &lt;/StepButton&gt;\r\n                &lt;StepContent&gt;\r\n                  &lt;section&gt;\r\n                    &lt;TextField\r\n                      style={{ display: &#39;block&#39; }}\r\n                      name=&quot;first_name&quot;\r\n                      hintText=&quot;First Name&quot;\r\n                      floatingLabelText=&quot;First Name&quot;\r\n                      onChange={(evt, newValue) =&gt; this.setState({ firstName: newValue })}/&gt;\r\n                    &lt;TextField\r\n                      style={{ display: &#39;block&#39; }}\r\n                      name=&quot;last_name&quot;\r\n                      hintText=&quot;Last Name&quot;\r\n                      floatingLabelText=&quot;Last Name&quot;\r\n                      onChange={(evt, newValue) =&gt; this.setState({ lastName: newValue })}/&gt;\r\n                    &lt;TextField\r\n                      style={{ display: &#39;block&#39; }}\r\n                      name=&quot;email&quot;\r\n                      hintText=&quot;name@mail.com&quot;\r\n                      floatingLabelText=&quot;Email&quot;\r\n                      errorText={data.validEmail ? null : &#39;Enter a valid email address&#39;}\r\n                      onChange={(evt, newValue) =&gt; this.validateEmail(newValue)}/&gt;\r\n                    &lt;TextField\r\n                      style={{ display: &#39;block&#39; }}\r\n                      name=&quot;phone&quot;\r\n                      hintText=&quot;(888) 888-8888&quot;\r\n                      floatingLabelText=&quot;Phone&quot;\r\n                      errorText={data.validPhone ? null: &#39;Enter a valid phone number&#39;}\r\n                      onChange={(evt, newValue) =&gt; this.validatePhone(newValue)} /&gt;\r\n                    &lt;RaisedButton\r\n                      style={{ display: &#39;block&#39; }}\r\n                      label={contactFormFilled ? &#39;Schedule&#39; : &#39;Fill out your information to schedule&#39;}\r\n                      labelPosition=&quot;before&quot;\r\n                      primary={true}\r\n                      fullWidth={true}\r\n                      onClick={() =&gt; this.setState({ confirmationModalOpen: !this.state.confirmationModalOpen })}\r\n                      disabled={!contactFormFilled || data.processed }\r\n                      style={{ marginTop: 20, maxWidth: 100}} /&gt;\r\n                  &lt;/section&gt;\r\n                &lt;/StepContent&gt;\r\n              &lt;/Step&gt;\r\n            &lt;/Stepper&gt;\r\n          &lt;/Card&gt;\r\n          &lt;Dialog\r\n            modal={true}\r\n            open={confirmationModalOpen}\r\n            actions={modalActions}\r\n            title=&quot;Confirm your appointment&quot;&gt;\r\n            {this.renderAppointmentConfirmation()}\r\n          &lt;/Dialog&gt;\r\n          &lt;SnackBar\r\n            open={confirmationSnackbarOpen || loading}\r\n            message={loading ? &#39;Loading... &#39; : data.confirmationSnackbarMessage || &#39;&#39;}\r\n            autoHideDuration={10000}\r\n            onRequestClose={() =&gt; this.setState({ confirmationSnackbarOpen: false })} /&gt;\r\n        &lt;/section&gt;\r\n      &lt;/div&gt;\r\n    )\r\n  }\r\n}</pre><p>Before moving on, notice that, because they take some extra logic to render, we&#39;ll be handing the radio buttons for the time slots and the confirmation strings in their own methods.</p><p>With the view components in place, our last big step will be to write all of the functionality we&#39;ve mapped out.</p><h3>6. Component Lifecycle Methods</h3><h4><code>componentWillMount()</code></h4><p>The first step in adding functionality will be to write out the <code>componentWillMount()</code> method. In <code>componentWillMount()</code> we&#39;ll use <code>axios</code> to fetch our configuration and appointments data from our backend. Again, we&#39;re using our backend as a middleman so we can selectively expose data to our front end and omit things like users&#39; contact information.</p><pre>// ./src/Components/App.js\r\n\r\n// previous imports\r\nimport async from &#39;async&#39;\r\nimport axios from &#39;axios&#39;\r\n\r\nexport default class App extends Component {\r\nconstructor() {}\r\n  \r\n  componentWillMount() {\r\n    async.series({\r\n        configs(callback) {\r\n          axios.get(HOST + &#39;api/config&#39;).then(res =&gt;\r\n            callback(null, res.data.data)\r\n          )\r\n        },\r\n        appointments(callback) {\r\n          axios.get(HOST + &#39;api/appointments&#39;).then(res =&gt; {\r\n            callback(null, res.data.data)\r\n          })\r\n       }\r\n      }, (err,response) =&gt; {\r\n        err ? this.handleFetchError(err) : this.handleFetch(response)\r\n    })\r\n    addEventListener(&#39;resize&#39;, this.resize)\r\n    }\r\n  \r\n // rest...\r\n}</pre><p>We use <code>async</code> to make our <code>axios</code> calls in series, and name them so we have access to them as <code>response.configs</code>and <code>response.appointments</code> in <code>handleFetch()</code>. We also use <code>componentWillMount</code> to start tracking the window width with <code>resize()</code>.</p><h4><code>componentWillUnmount()</code></h4><p>Practicing good form, we&#39;ll remove the event listener in <code>componentWillUnmount()</code>.</p><pre>// ./src/Components/App.js\r\n\r\n// previous imports\r\nimport async from &#39;async&#39;\r\nimport axios from &#39;axios&#39;\r\n\r\nexport default class App extends Component {\r\nconstructor() {}\r\n  \r\n  componentWillUnmount() {\r\nremoveEventListener(&#39;resize&#39;, this.resize)\r\n    }\r\n  \r\n // rest...\r\n}</pre><h3>7. Processing Data</h3><p>Having fetched the data we need, we&#39;ll process a successful fetch with <code>handleFetch()</code> and an error with <code>handleFetchError()</code>. In <code>handleFetch()</code> we&#39;ll build a schedule of appointmens to store in the state, such that <code>schedule = { appointmentDate: [slots] }</code>. We also use this method to store the app&#39;s configuration data in the state.</p><h4><code>handleFetch()</code></h4><pre>handleFetch(response) {\r\nconst { configs, appointments } = response\r\n    const initSchedule = {}\r\n    const today = moment().startOf(&#39;day&#39;)\r\n    initSchedule[today.format(&#39;YYYY-DD-MM&#39;)] = true\r\n    const schedule = !appointments.length ? initSchedule : appointments.reduce((currentSchedule, appointment) =&gt; {\r\n      const { date, slot } = appointment\r\n      const dateString = moment(date, &#39;YYYY-DD-MM&#39;).format(&#39;YYYY-DD-MM&#39;)\r\n      !currentSchedule[date] ? currentSchedule[dateString] = Array(8).fill(false) : null\r\n      Array.isArray(currentSchedule[dateString]) ?\r\n        currentSchedule[dateString][slot] = true : null\r\n      return currentSchedule\r\n    }, initSchedule)\r\n\r\n    for (let day in schedule) {\r\n      let slots = schedule[day]\r\n      slots.length ? (slots.every(slot =&gt; slot === true)) ? schedule[day] = true : null : null\r\n    }\r\n\r\n    this.setState({\r\n      schedule,\r\n      siteTitle: configs.site_title,\r\n      aboutPageUrl: configs.about_page_url,\r\n      contactPageUrl: configs.contact_page_url,\r\n      homePageUrl: configs.home_page_url,\r\n      loading: false\r\n    })\r\n  }</pre><h4><code>handleFetchError()</code></h4><p>For handling errors, we&#39;ll simply show the users an error message in the <code>SnackBar</code>.</p><pre>handleFetchError(err) {\r\nconsole.log(&#39;Error fetching data:&#39; + err)\r\n    this.setState({ confirmationSnackbarMessage: &#39;Error fetching data&#39;, confirmationSnackbarOpen: true })\r\n}</pre><h3>8. Handle UI Changes</h3><p>We need to manage the state whenever the user opens the <code>Drawer</code>, moves onto another step, or if the browser width changes. First we&#39;ll handle the drawer toggle.</p><pre>handleNavToggle() {\r\n  return this.setState({ navOpen: !this.state.navOpen })\r\n}</pre><p>Then, as long as the user isn&#39;t on the last step, we&#39;ll handle incrementing the step.</p><pre>handleNextStep() {\r\n  const { stepIndex } = this.state\r\n  return (stepIndex &lt; 3) ? this.setState({ stepIndex: stepIndex + 1}) : null\r\n}</pre><p>Finally, we&#39;ll simply change the state on resize if the window width is less than 768px.</p><pre>resize() {\r\n  this.setState({ smallScreen: window.innerWidth &lt; 768 })\r\n}</pre><h3>9. Handle Setting Appointment Data</h3><p>When the user selects appointment options in steps one and two, we need three simple setters to change the state to reflect those selections.</p><pre>handleSetAppointmentDate(date) {\r\n  this.handleNextStep()\r\n  this.setState({ appointmentDate: date, confirmationTextVisible: true })\r\n}\r\n\r\nhandleSetAppointmentSlot(slot) {\r\n  this.handleNextStep()\r\n  this.setState({ appointmentSlot: slot })\r\n}\r\n\r\nhandleSetAppointmentMeridiem(meridiem) {\r\n  this.setState({ appointmentMeridiem: meridiem})\r\n}</pre><h3>10. Handle Validations</h3><p>We need to validate the user&#39;s inputted email address, phone number, and we need to feed the <code>DatePicker</code>component a function to check which days should be disabled. Although naive, we&#39;ll be using regex&#39;s to check the inputs for simplicities sake.</p><pre>validateEmail(email) {\r\n  const regex = /^(([^&lt;&gt;()\\[\\]\\.,;:\\s@\\&quot;]+(\\.[^&lt;&gt;()\\[\\]\\.,;:\\s@\\&quot;]+)*)|(\\&quot;.+\\&quot;))@(([^&lt;&gt;()[\\]\\.,;:\\s@\\&quot;]+\\.)+[^&lt;&gt;()[\\]\\.,;:\\s@\\&quot;]{2,})$/i\r\n  return regex.test(email) ? this.setState({ email: email, validEmail: true }) : this.setState({ validEmail: false })\r\n}\r\n\r\nvalidatePhone(phoneNumber) {\r\n  const regex = /^(1\\s|1|)?((\\(\\d{3}\\))|\\d{3})(\\-|\\s)?(\\d{3})(\\-|\\s)?(\\d{4})$/\r\n  return regex.test(phoneNumber) ? this.setState({ phone: phoneNumber, validPhone: true }) : this.setState({ validPhone: false })\r\n}</pre><p>For checking if a date should be disabled, we need to check if the date passed by <code>DatePicker</code> is either in <code>state.schedule</code> or is today.</p><pre>  checkDisableDate(day) {\r\n    const dateString = moment(day).format(&#39;YYYY-DD-MM&#39;)\r\n    return this.state.schedule[dateString] === true || moment(day).startOf(&#39;day&#39;).diff(moment().startOf(&#39;day&#39;)) &lt; 0\r\n  }</pre><h3>11. Build the Render Methods for the confirmation strings and the time slot radio buttons</h3><p>In our <code>render()</code> lifecycle method we abstracted out the logic for displaying the dynamic confirmation string above the <code>Card</code>, the confirmation details we&#39;ll show in the confirmation modal, and the radio buttons for selecting a time slot.</p><p>Starting with the confirmation string, we&#39;ll display the parts of it that correspond to inputted data only as it&#39;s entered.</p><pre>renderConfirmationString() {\r\n  const spanStyle = {color: &#39;#00bcd4&#39;}\r\n  return this.state.confirmationTextVisible ? &lt;h2 style={{ textAlign: this.state.smallScreen ? &#39;center&#39; : &#39;left&#39;, color: &#39;#bdbdbd&#39;, lineHeight: 1.5, padding: &#39;0 10px&#39;, fontFamily: &#39;Roboto&#39;}}&gt;\r\n    { &lt;span&gt;\r\n     Scheduling a\r\n\r\n     &lt;span style={spanStyle}&gt; 1 hour &lt;/span&gt;\r\n\r\nappointment {this.state.appointmentDate &amp;&amp; &lt;span&gt;\r\n  on &lt;span style={spanStyle}&gt;{moment(this.state.appointmentDate).format(&#39;dddd[,] MMMM Do&#39;)}&lt;/span&gt;\r\n             &lt;/span&gt;} {Number.isInteger(this.state.appointmentSlot) &amp;&amp; &lt;span&gt;at &lt;span style={spanStyle}&gt;{moment().hour(9).minute(0).add(this.state.appointmentSlot, &#39;hours&#39;).format(&#39;h:mm a&#39;)}&lt;/span&gt;&lt;/span&gt;}\r\n             &lt;/span&gt;}\r\n             &lt;/h2&gt; : null\r\n}</pre><p>Then, similarly, we&#39;ll let the user verify their data before confirming submission.</p><pre>renderAppointmentConfirmation() {\r\n  const spanStyle = { color: &#39;#00bcd4&#39; }\r\n  return &lt;section&gt;\r\n    &lt;p&gt;Name: &lt;span style={spanStyle}&gt;{this.state.firstName} {this.state.lastName}&lt;/span&gt;&lt;/p&gt;\r\n      &lt;p&gt;Number: &lt;span style={spanStyle}&gt;{this.state.phone}&lt;/span&gt;&lt;/p&gt;\r\n        &lt;p&gt;Email: &lt;span style={spanStyle}&gt;{this.state.email}&lt;/span&gt;&lt;/p&gt;\r\n          &lt;p&gt;Appointment: &lt;span style={spanStyle}&gt;{moment(this.state.appointmentDate).format(&#39;dddd[,] MMMM Do[,] YYYY&#39;)}&lt;/span&gt; at &lt;span style={spanStyle}&gt;{moment().hour(9).minute(0).add(this.state.appointmentSlot, &#39;hours&#39;).format(&#39;h:mm a&#39;)}&lt;/span&gt;&lt;/p&gt;\r\n  &lt;/section&gt;\r\n}</pre><p>Finally, we&#39;ll write the method to render the appointment slot radio buttons. To do this we first have to filter the slots by availabity and by whether AM or PM is selected. Both are simple checks; for the first we see if it exists in <code>state.schedule</code>, for the later, we check the meridiem part with <code>moment().format(&#39;a&#39;)</code>. To compute the time string in 12 hour format, we add the slot to 9AM in units of hours.</p><pre>renderAppointmentTimes() {\r\n  if (!this.state.loading) {\r\n    const slots = [...Array(8).keys()]\r\n    return slots.map(slot =&gt; {\r\n      const appointmentDateString = moment(this.state.appointmentDate).format(&#39;YYYY-DD-MM&#39;)\r\n      const t1 = moment().hour(9).minute(0).add(slot, &#39;hours&#39;)\r\n      const t2 = moment().hour(9).minute(0).add(slot + 1, &#39;hours&#39;)\r\n      const scheduleDisabled = this.state.schedule[appointmentDateString] ? this.state.schedule[moment(this.state.appointmentDate).format(&#39;YYYY-DD-MM&#39;)][slot] : false\r\n      const meridiemDisabled = this.state.appointmentMeridiem ? t1.format(&#39;a&#39;) === &#39;am&#39; : t1.format(&#39;a&#39;) === &#39;pm&#39;\r\n      return &lt;RadioButton\r\n      label={t1.format(&#39;h:mm a&#39;) + &#39; - &#39; + t2.format(&#39;h:mm a&#39;)}\r\n      key={slot}\r\n      value={slot}\r\n      style={{marginBottom: 15, display: meridiemDisabled ? &#39;none&#39; : &#39;inherit&#39;}}\r\n                     disabled={scheduleDisabled || meridiemDisabled}/&gt;\r\n                     })\r\n  } else {\r\n    return null\r\n  }\r\n}</pre><h3>13. Handle the Form Submission</h3><p>Once we show the user the confirmation modal, upon final submission we&#39;ll send the data to our backend with an <code>axios</code> POST. We&#39;ll notifty them of either a success or an error.</p><pre>  handleSubmit() {\r\n    const appointment = {\r\n      date: moment(this.state.appointmentDate).format(&#39;YYYY-DD-MM&#39;),\r\n      slot: this.state.appointmentSlot,\r\n      name: this.state.firstName + &#39; &#39; + this.state.lastName,\r\n      email: this.state.email,\r\n      phone: this.state.phone\r\n    }\r\n    axios.post(HOST + &#39;api/appointments&#39;, )\r\n    axios.post(HOST + &#39;api/appointments&#39;, appointment)\r\n    .then(response =&gt; this.setState({ confirmationSnackbarMessage: &quot;Appointment succesfully added!&quot;, confirmationSnackbarOpen: true, processed: true }))\r\n    .catch(err =&gt; {\r\n      console.log(err)\r\n      return this.setState({ confirmationSnackbarMessage: &quot;Appointment failed to save.&quot;, confirmationSnackbarOpen: true })\r\n    })\r\n  }</pre><h3>14. Conclusion: Seeing it All Together</h3><p>Before moving on to building the backend, here&#39;s what we have as our final product.</p><pre>// ./src/Components/App.js\r\n\r\nimport { Component } from &#39;react&#39;\r\nimport injectTapEventPlugin from &#39;react-tap-event-plugin&#39;\r\nimport axios from &#39;axios&#39;\r\nimport async from &#39;async&#39;\r\nimport moment from &#39;moment&#39;\r\nimport AppBar from &#39;material-ui/AppBar&#39;\r\nimport Drawer from &#39;material-ui/Drawer&#39;\r\nimport Dialog from &#39;material-ui/Dialog&#39;\r\nimport Divider from &#39;material-ui/Divider&#39;\r\nimport MenuItem from &#39;material-ui/MenuItem&#39;\r\nimport Card from &#39;material-ui/Card&#39;\r\nimport DatePicker from &#39;material-ui/DatePicker&#39;\r\nimport TimePicker from &#39;material-ui/TimePicker&#39;\r\nimport TextField from &#39;material-ui/TextField&#39;\r\nimport SelectField from &#39;material-ui/SelectField&#39;\r\nimport SnackBar from &#39;material-ui/Snackbar&#39;\r\nimport {\r\n  Step,\r\n  Stepper,\r\n  StepLabel,\r\n  StepContent,\r\n  StepButton\r\n} from &#39;material-ui/stepper&#39;\r\nimport {\r\n  RadioButton,\r\n  RadioButtonGroup\r\n} from &#39;material-ui/RadioButton&#39;\r\nimport RaisedButton from &#39;material-ui/RaisedButton&#39;;\r\nimport FlatButton from &#39;material-ui/FlatButton&#39;\r\nimport logo from &#39;./../../dist/assets/logo.svg&#39;\r\n\r\ninjectTapEventPlugin()\r\nconst HOST = PRODUCTION ? &#39;/&#39; : &#39;http://localhost:3000/&#39;\r\n\r\nexport default class App extends Component {\r\n  constructor() {\r\n    super()\r\n    this.state = {\r\n      loading: true,\r\n      navOpen: false,\r\n      confirmationModalOpen: false,\r\n      confirmationTextVisible: false,\r\n      stepIndex: 0,\r\n      appointmentDateSelected: false,\r\n      appointmentMeridiem: 0,\r\n      validEmail: true,\r\n      validPhone: true,\r\n      smallScreen: window.innerWidth &lt; 768,\r\n      confirmationSnackbarOpen: false\r\n    }\r\n\r\n    this.handleNavToggle = this.handleNavToggle.bind(this)\r\n    this.handleNextStep = this.handleNextStep.bind(this)\r\n    this.handleSetAppointmentDate = this.handleSetAppointmentDate.bind(this)\r\n    this.handleSetAppointmentSlot = this.handleSetAppointmentSlot.bind(this)\r\n    this.handleSetAppointmentMeridiem = this.handleSetAppointmentMeridiem.bind(this)\r\n    this.handleSubmit = this.handleSubmit.bind(this)\r\n    this.validateEmail = this.validateEmail.bind(this)\r\n    this.validatePhone = this.validatePhone.bind(this)\r\n    this.checkDisableDate = this.checkDisableDate.bind(this)\r\n    this.renderAppointmentTimes = this.renderAppointmentTimes.bind(this)\r\n    this.renderConfirmationString = this.renderConfirmationString.bind(this)\r\n    this.renderAppointmentConfirmation = this.renderAppointmentConfirmation.bind(this)\r\n    this.resize = this.resize.bind(this)\r\n  }\r\n\r\n  handleNavToggle() {\r\n    return this.setState({ navOpen: !this.state.navOpen })\r\n  }\r\n\r\n  handleNextStep() {\r\n    const { stepIndex } = this.state\r\n    return (stepIndex &lt; 3) ? this.setState({ stepIndex: stepIndex + 1}) : null\r\n  }\r\n\r\n  handleSetAppointmentDate(date) {\r\n    this.handleNextStep()\r\n    this.setState({ appointmentDate: date, confirmationTextVisible: true })\r\n  }\r\n\r\n  handleSetAppointmentSlot(slot) {\r\n    this.handleNextStep()\r\n    this.setState({ appointmentSlot: slot })\r\n  }\r\n\r\n  handleSetAppointmentMeridiem(meridiem) {\r\n    this.setState({ appointmentMeridiem: meridiem})\r\n  }\r\n\r\n  handleFetch(response) {\r\n    const { configs, appointments } = response\r\n    const initSchedule = {}\r\n    const today = moment().startOf(&#39;day&#39;)\r\n    initSchedule[today.format(&#39;YYYY-DD-MM&#39;)] = true\r\n    const schedule = !appointments.length ? initSchedule : appointments.reduce((currentSchedule, appointment) =&gt; {\r\n      const { date, slot } = appointment\r\n      const dateString = moment(date, &#39;YYYY-DD-MM&#39;).format(&#39;YYYY-DD-MM&#39;)\r\n      !currentSchedule[date] ? currentSchedule[dateString] = Array(8).fill(false) : null\r\n      Array.isArray(currentSchedule[dateString]) ?\r\n        currentSchedule[dateString][slot] = true : null\r\n      return currentSchedule\r\n    }, initSchedule)\r\n\r\n    for (let day in schedule) {\r\n      let slots = schedule[day]\r\n      slots.length ? (slots.every(slot =&gt; slot === true)) ? schedule[day] = true : null : null\r\n    }\r\n\r\n    this.setState({\r\n      schedule,\r\n      siteTitle: configs.site_title,\r\n      aboutPageUrl: configs.about_page_url,\r\n      contactPageUrl: configs.contact_page_url,\r\n      homePageUrl: configs.home_page_url,\r\n      loading: false\r\n    })\r\n  }\r\n\r\n  handleFetchError(err) {\r\n    console.log(&#39;Error fetching data:&#39; + err)\r\n    this.setState({ confirmationSnackbarMessage: &#39;Error fetching data&#39;, confirmationSnackbarOpen: true })\r\n  }\r\n\r\n  handleSubmit() {\r\n    const appointment = {\r\n      date: moment(this.state.appointmentDate).format(&#39;YYYY-DD-MM&#39;),\r\n      slot: this.state.appointmentSlot,\r\n      name: this.state.firstName + &#39; &#39; + this.state.lastName,\r\n      email: this.state.email,\r\n      phone: this.state.phone\r\n    }\r\n    axios.post(HOST + &#39;api/appointments&#39;, )\r\n    axios.post(HOST + &#39;api/appointments&#39;, appointment)\r\n    .then(response =&gt; this.setState({ confirmationSnackbarMessage: &quot;Appointment succesfully added!&quot;, confirmationSnackbarOpen: true, processed: true }))\r\n    .catch(err =&gt; {\r\n      console.log(err)\r\n      return this.setState({ confirmationSnackbarMessage: &quot;Appointment failed to save.&quot;, confirmationSnackbarOpen: true })\r\n    })\r\n  }\r\n\r\n  validateEmail(email) {\r\n    const regex = /^(([^&lt;&gt;()\\[\\]\\.,;:\\s@\\&quot;]+(\\.[^&lt;&gt;()\\[\\]\\.,;:\\s@\\&quot;]+)*)|(\\&quot;.+\\&quot;))@(([^&lt;&gt;()[\\]\\.,;:\\s@\\&quot;]+\\.)+[^&lt;&gt;()[\\]\\.,;:\\s@\\&quot;]{2,})$/i\r\n    return regex.test(email) ? this.setState({ email: email, validEmail: true }) : this.setState({ validEmail: false })\r\n  }\r\n\r\n  validatePhone(phoneNumber) {\r\n    const regex = /^(1\\s|1|)?((\\(\\d{3}\\))|\\d{3})(\\-|\\s)?(\\d{3})(\\-|\\s)?(\\d{4})$/\r\n    return regex.test(phoneNumber) ? this.setState({ phone: phoneNumber, validPhone: true }) : this.setState({ validPhone: false })\r\n  }\r\n\r\n  checkDisableDate(day) {\r\n    const dateString = moment(day).format(&#39;YYYY-DD-MM&#39;)\r\n    return this.state.schedule[dateString] === true || moment(day).startOf(&#39;day&#39;).diff(moment().startOf(&#39;day&#39;)) &lt; 0\r\n  }\r\n\r\n  renderConfirmationString() {\r\n    const spanStyle = {color: &#39;#00bcd4&#39;}\r\n    return this.state.confirmationTextVisible ? &lt;h2 style={{ textAlign: this.state.smallScreen ? &#39;center&#39; : &#39;left&#39;, color: &#39;#bdbdbd&#39;, lineHeight: 1.5, padding: &#39;0 10px&#39;, fontFamily: &#39;Roboto&#39;}}&gt;\r\n      { &lt;span&gt;\r\n        Scheduling a\r\n\r\n          &lt;span style={spanStyle}&gt; 1 hour &lt;/span&gt;\r\n\r\n        appointment {this.state.appointmentDate &amp;&amp; &lt;span&gt;\r\n          on &lt;span style={spanStyle}&gt;{moment(this.state.appointmentDate).format(&#39;dddd[,] MMMM Do&#39;)}&lt;/span&gt;\r\n      &lt;/span&gt;} {Number.isInteger(this.state.appointmentSlot) &amp;&amp; &lt;span&gt;at &lt;span style={spanStyle}&gt;{moment().hour(9).minute(0).add(this.state.appointmentSlot, &#39;hours&#39;).format(&#39;h:mm a&#39;)}&lt;/span&gt;&lt;/span&gt;}\r\n      &lt;/span&gt;}\r\n    &lt;/h2&gt; : null\r\n  }\r\n\r\n  renderAppointmentTimes() {\r\n    if (!this.state.loading) {\r\n      const slots = [...Array(8).keys()]\r\n      return slots.map(slot =&gt; {\r\n        const appointmentDateString = moment(this.state.appointmentDate).format(&#39;YYYY-DD-MM&#39;)\r\n        const t1 = moment().hour(9).minute(0).add(slot, &#39;hours&#39;)\r\n        const t2 = moment().hour(9).minute(0).add(slot + 1, &#39;hours&#39;)\r\n        const scheduleDisabled = this.state.schedule[appointmentDateString] ? this.state.schedule[moment(this.state.appointmentDate).format(&#39;YYYY-DD-MM&#39;)][slot] : false\r\n        const meridiemDisabled = this.state.appointmentMeridiem ? t1.format(&#39;a&#39;) === &#39;am&#39; : t1.format(&#39;a&#39;) === &#39;pm&#39;\r\n        return &lt;RadioButton\r\n          label={t1.format(&#39;h:mm a&#39;) + &#39; - &#39; + t2.format(&#39;h:mm a&#39;)}\r\n          key={slot}\r\n          value={slot}\r\n          style={{marginBottom: 15, display: meridiemDisabled ? &#39;none&#39; : &#39;inherit&#39;}}\r\n          disabled={scheduleDisabled || meridiemDisabled}/&gt;\r\n      })\r\n    } else {\r\n      return null\r\n    }\r\n  }\r\n\r\n  renderAppointmentConfirmation() {\r\n    const spanStyle = { color: &#39;#00bcd4&#39; }\r\n    return &lt;section&gt;\r\n      &lt;p&gt;Name: &lt;span style={spanStyle}&gt;{this.state.firstName} {this.state.lastName}&lt;/span&gt;&lt;/p&gt;\r\n      &lt;p&gt;Number: &lt;span style={spanStyle}&gt;{this.state.phone}&lt;/span&gt;&lt;/p&gt;\r\n      &lt;p&gt;Email: &lt;span style={spanStyle}&gt;{this.state.email}&lt;/span&gt;&lt;/p&gt;\r\n      &lt;p&gt;Appointment: &lt;span style={spanStyle}&gt;{moment(this.state.appointmentDate).format(&#39;dddd[,] MMMM Do[,] YYYY&#39;)}&lt;/span&gt; at &lt;span style={spanStyle}&gt;{moment().hour(9).minute(0).add(this.state.appointmentSlot, &#39;hours&#39;).format(&#39;h:mm a&#39;)}&lt;/span&gt;&lt;/p&gt;\r\n    &lt;/section&gt;\r\n  }\r\n\r\n  resize() {\r\n    this.setState({ smallScreen: window.innerWidth &lt; 768 })\r\n  }\r\n\r\n  componentWillMount() {\r\n    async.series({\r\n      configs(callback) {\r\n        axios.get(HOST + &#39;api/config&#39;).then(res =&gt;\r\n          callback(null, res.data.data)\r\n        )\r\n      },\r\n      appointments(callback) {\r\n        axios.get(HOST + &#39;api/appointments&#39;).then(res =&gt; {\r\n          callback(null, res.data.data)\r\n        })\r\n      }\r\n    }, (err,response) =&gt; {\r\n      err ? this.handleFetchError(err) : this.handleFetch(response)\r\n    })\r\n    addEventListener(&#39;resize&#39;, this.resize)\r\n  }\r\n\r\n  componentWillUnmount() {\r\n    removeEventListener(&#39;resize&#39;, this.resize)\r\n  }\r\n\r\n  render() {\r\n    const { stepIndex, loading, navOpen, smallScreen, confirmationModalOpen, confirmationSnackbarOpen, ...data } = this.state\r\n    const contactFormFilled = data.firstName &amp;&amp; data.lastName &amp;&amp; data.phone &amp;&amp; data.email &amp;&amp; data.validPhone &amp;&amp; data.validEmail\r\n    const modalActions = [\r\n      &lt;FlatButton\r\n        label=&quot;Cancel&quot;\r\n        primary={false}\r\n        onClick={() =&gt; this.setState({ confirmationModalOpen : false})} /&gt;,\r\n      &lt;FlatButton\r\n        label=&quot;Confirm&quot;\r\n        primary={true}\r\n        onClick={() =&gt; this.handleSubmit()} /&gt;\r\n    ]\r\n    return (\r\n      &lt;div&gt;\r\n        &lt;AppBar\r\n          title={data.siteTitle}\r\n          onLeftIconButtonTouchTap={() =&gt; this.handleNavToggle() }/&gt;\r\n        &lt;Drawer\r\n          docked={false}\r\n          width={300}\r\n          open={navOpen}\r\n          onRequestChange={(navOpen) =&gt; this.setState({navOpen})} &gt;\r\n          &lt;img src={logo}\r\n               style={{\r\n                 height: 70,\r\n                 marginTop: 50,\r\n                 marginBottom: 30,\r\n                 marginLeft: &#39;50%&#39;,\r\n                 transform: &#39;translateX(-50%)&#39;\r\n               }}/&gt;\r\n          &lt;a style={{textDecoration: &#39;none&#39;}} href={this.state.homePageUrl}&gt;&lt;MenuItem&gt;Home&lt;/MenuItem&gt;&lt;/a&gt;\r\n          &lt;a style={{textDecoration: &#39;none&#39;}} href={this.state.aboutPageUrl}&gt;&lt;MenuItem&gt;About&lt;/MenuItem&gt;&lt;/a&gt;\r\n          &lt;a style={{textDecoration: &#39;none&#39;}} href={this.state.contactPageUrl}&gt;&lt;MenuItem&gt;Contact&lt;/MenuItem&gt;&lt;/a&gt;\r\n\r\n          &lt;MenuItem disabled={true}\r\n                    style={{\r\n                      marginLeft: &#39;50%&#39;,\r\n                      transform: &#39;translate(-50%)&#39;\r\n                    }}&gt;\r\n            {&quot;&copy; Copyright &quot; + moment().format(&#39;YYYY&#39;)}&lt;/MenuItem&gt;\r\n        &lt;/Drawer&gt;\r\n        &lt;section style={{\r\n            maxWidth: !smallScreen ? &#39;80%&#39; : &#39;100%&#39;,\r\n            margin: &#39;auto&#39;,\r\n            marginTop: !smallScreen ? 20 : 0,\r\n          }}&gt;\r\n          {this.renderConfirmationString()}\r\n          &lt;Card style={{\r\n              padding: &#39;10px 10px 25px 10px&#39;,\r\n              height: smallScreen ? &#39;100vh&#39; : null\r\n            }}&gt;\r\n            &lt;Stepper\r\n              activeStep={stepIndex}\r\n              linear={false}\r\n              orientation=&quot;vertical&quot;&gt;\r\n              &lt;Step disabled={loading}&gt;\r\n                &lt;StepButton onClick={() =&gt; this.setState({ stepIndex: 0 })}&gt;\r\n                  Choose an available day for your appointment\r\n                &lt;/StepButton&gt;\r\n                &lt;StepContent&gt;\r\n                  &lt;DatePicker\r\n                      style={{\r\n                        marginTop: 10,\r\n                        marginLeft: 10\r\n                      }}\r\n                      value={data.appointmentDate}\r\n                      hintText=&quot;Select a date&quot;\r\n                      mode={smallScreen ? &#39;portrait&#39; : &#39;landscape&#39;}\r\n                      onChange={(n, date) =&gt; this.handleSetAppointmentDate(date)}\r\n                      shouldDisableDate={day =&gt; this.checkDisableDate(day)}\r\n                       /&gt;\r\n                  &lt;/StepContent&gt;\r\n              &lt;/Step&gt;\r\n              &lt;Step disabled={ !data.appointmentDate }&gt;\r\n                &lt;StepButton onClick={() =&gt; this.setState({ stepIndex: 1 })}&gt;\r\n                  Choose an available time for your appointment\r\n                &lt;/StepButton&gt;\r\n                &lt;StepContent&gt;\r\n                  &lt;SelectField\r\n                    floatingLabelText=&quot;AM or PM&quot;\r\n                    value={data.appointmentMeridiem}\r\n                    onChange={(evt, key, payload) =&gt; this.handleSetAppointmentMeridiem(payload)}\r\n                    selectionRenderer={value =&gt; value ? &#39;PM&#39; : &#39;AM&#39;}&gt;\r\n                    &lt;MenuItem value={0}&gt;AM&lt;/MenuItem&gt;\r\n                    &lt;MenuItem value={1}&gt;PM&lt;/MenuItem&gt;\r\n                  &lt;/SelectField&gt;\r\n                  &lt;RadioButtonGroup\r\n                    style={{ marginTop: 15,\r\n                             marginLeft: 15\r\n                           }}\r\n                    name=&quot;appointmentTimes&quot;\r\n                    defaultSelected={data.appointmentSlot}\r\n                    onChange={(evt, val) =&gt; this.handleSetAppointmentSlot(val)}&gt;\r\n                    {this.renderAppointmentTimes()}\r\n                  &lt;/RadioButtonGroup&gt;\r\n                &lt;/StepContent&gt;\r\n              &lt;/Step&gt;\r\n              &lt;Step disabled={ !Number.isInteger(this.state.appointmentSlot) }&gt;\r\n                &lt;StepButton onClick={() =&gt; this.setState({ stepIndex: 2 })}&gt;\r\n                  Share your contact information with us and we&#39;ll send you a reminder\r\n                &lt;/StepButton&gt;\r\n                &lt;StepContent&gt;\r\n                  &lt;section&gt;\r\n                    &lt;TextField\r\n                      style={{ display: &#39;block&#39; }}\r\n                      name=&quot;first_name&quot;\r\n                      hintText=&quot;First Name&quot;\r\n                      floatingLabelText=&quot;First Name&quot;\r\n                      onChange={(evt, newValue) =&gt; this.setState({ firstName: newValue })}/&gt;\r\n                    &lt;TextField\r\n                      style={{ display: &#39;block&#39; }}\r\n                      name=&quot;last_name&quot;\r\n                      hintText=&quot;Last Name&quot;\r\n                      floatingLabelText=&quot;Last Name&quot;\r\n                      onChange={(evt, newValue) =&gt; this.setState({ lastName: newValue })}/&gt;\r\n                    &lt;TextField\r\n                      style={{ display: &#39;block&#39; }}\r\n                      name=&quot;email&quot;\r\n                      hintText=&quot;name@mail.com&quot;\r\n                      floatingLabelText=&quot;Email&quot;\r\n                      errorText={data.validEmail ? null : &#39;Enter a valid email address&#39;}\r\n                      onChange={(evt, newValue) =&gt; this.validateEmail(newValue)}/&gt;\r\n                    &lt;TextField\r\n                      style={{ display: &#39;block&#39; }}\r\n                      name=&quot;phone&quot;\r\n                      hintText=&quot;(888) 888-8888&quot;\r\n                      floatingLabelText=&quot;Phone&quot;\r\n                      errorText={data.validPhone ? null: &#39;Enter a valid phone number&#39;}\r\n                      onChange={(evt, newValue) =&gt; this.validatePhone(newValue)} /&gt;\r\n                    &lt;RaisedButton\r\n                      style={{ display: &#39;block&#39; }}\r\n                      label={contactFormFilled ? &#39;Schedule&#39; : &#39;Fill out your information to schedule&#39;}\r\n                      labelPosition=&quot;before&quot;\r\n                      primary={true}\r\n                      fullWidth={true}\r\n                      onClick={() =&gt; this.setState({ confirmationModalOpen: !this.state.confirmationModalOpen })}\r\n                      disabled={!contactFormFilled || data.processed }\r\n                      style={{ marginTop: 20, maxWidth: 100}} /&gt;\r\n                  &lt;/section&gt;\r\n                &lt;/StepContent&gt;\r\n              &lt;/Step&gt;\r\n            &lt;/Stepper&gt;\r\n          &lt;/Card&gt;\r\n          &lt;Dialog\r\n            modal={true}\r\n            open={confirmationModalOpen}\r\n            actions={modalActions}\r\n            title=&quot;Confirm your appointment&quot;&gt;\r\n            {this.renderAppointmentConfirmation()}\r\n          &lt;/Dialog&gt;\r\n          &lt;SnackBar\r\n            open={confirmationSnackbarOpen || loading}\r\n            message={loading ? &#39;Loading... &#39; : data.confirmationSnackbarMessage || &#39;&#39;}\r\n            autoHideDuration={10000}\r\n            onRequestClose={() =&gt; this.setState({ confirmationSnackbarOpen: false })} /&gt;\r\n        &lt;/section&gt;\r\n      &lt;/div&gt;\r\n    )\r\n  }\r\n}</pre><h2>Part 2: Building the Backend</h2><h3>1. Installations and Directory Structure</h3><p>Our backend will be simple. All it needs to do is act as an intermediary between our frontend and Cosmic and handle interfacing with Twilio.</p><p>First, we&#39;ll get our directory structure in place.</p><pre><code>AppointmentScheduler\r\n|\r\n|--public\r\n|--app.js\r\n|--.gitignore\r\n|--package.json\r\n</code></pre><p><code>public</code> will be where we serve our built frontend from and <code>.gitignore</code> will hide <code>node_modules</code>.</p><pre><code># .gitignore\r\n\r\nnode_modules\r\n</code></pre><p>We&#39;ll use the following packages:</p><ul><li><code>axios</code> for pushing <code>Appointment</code> objects to Cosmic</li><li><code>body-parser</code>, <code>cors</code>, <code>http</code>, <code>morgan</code>, <code>path</code>, and <code>express</code> for server-ware</li><li><code>cosmicjs</code> - the official client, for fetching objects from Cosmic</li><li><code>twilio</code> - the official client, for sending confirmation texts</li><li><code>moment</code> for parsing times</li></ul><p>Run <code>yarn init</code>, then edit <code>package.json</code> with a start script so we can deploy on Cosmic.</p><pre>{\r\n    // etc...\r\n  &quot;scripts&quot;: {\r\n        &quot;start&quot;: &quot;node app.js&quot;\r\n    }\r\n}</pre><p>Then, before we start working:</p><p><code>yarn add axios body-parser cors cosmicjs express express-session http moment morgan path twilio</code></p><h3>2. Outline the Backend&#39;s Structure</h3><p>Our Express app will be fairly basic as far as configuration and middleware goes. For <code>Appointment</code> submissions we&#39;ll handle post requests at <code>/api/appointments</code>. We&#39;ll serve our site configs and appointments from <code>/api/config</code> and <code>/api/appointments</code> respectively. Finally, since our Frontend is an SPA, we&#39;ll serve <code>index.html</code> from <code>/</code> and redirect all other requests there.</p><p>Before getting into much logic, our server will start off looking like this:</p><pre>const express = require(&#39;express&#39;)\r\nconst path = require(&#39;path&#39;)\r\nconst morgan = require(&#39;morgan&#39;)\r\nconst bodyParser = require(&#39;body-parser&#39;)\r\nconst cors = require(&#39;cors&#39;)\r\nconst config = require(&#39;./config&#39;)\r\nconst http = require(&#39;http&#39;)\r\nconst Cosmic = require(&#39;cosmicjs&#39;)\r\nconst twilio = require(&#39;twilio&#39;)\r\nconst moment = require(&#39;moment&#39;)\r\nconst axios = require(&#39;axios&#39;)\r\n\r\nconst config = {\r\n  bucket: {\r\n    slug: process.env.COSMIC_BUCKET,\r\n    read_key: process.env.COSMIC_READ_KEY,\r\n    write_key: process.env.COSMIC_WRITE_KEY\r\n  },\r\n  twilio: {\r\n    auth: process.env.TWILIO_AUTH,\r\n    sid: process.env.TWILIO_SID,\r\n    number: process.env.TWILIO_NUMBER\r\n  }\r\n}\r\n\r\nconst app = express()\r\nconst env = process.env.NODE_ENV || &#39;development&#39;\r\nconst twilioSid = config.twilio.sid\r\nconst twilioAuth = config.twilio.auth\r\nconst twilioClient = twilio(twilioSid, twilioAuth)\r\nconst twilioNumber = config.twilio.number\r\n\r\napp.set(&#39;trust proxy&#39;, 1)\r\napp.use(session({\r\n  secret: &#39;sjcimsoc&#39;,\r\n  resave: false,\r\n  saveUninitialized: true,\r\n  cookie: { secure: false }\r\n}))\r\napp.use(cors())\r\napp.use(morgan(&#39;dev&#39;))\r\napp.use(bodyParser.json())\r\napp.use(bodyParser.urlencoded({ extended: true }))\r\napp.use(express.static(path.join(__dirname, &#39;public&#39;)))\r\napp.set(&#39;port&#39;, process.env.PORT || 3000)\r\n\r\napp.post(&#39;/api/appointments&#39;, (req, res) =&gt; {\r\n    //handle posting new appointments to Cosmic\r\n  //and sending a confirmation text with Twilio\r\n})\r\n\r\napp.get(&#39;/api/config&#39;, (req, res) =&gt; {\r\n    //fetch configs from Cosmic, expose to frontend\r\n})\r\n\r\napp.get(&#39;/api/appointments&#39;, (req, res) =&gt; {\r\n    //fetch appointments from Cosmic, expose to frontend without personal data\r\n})\r\n\r\napp.get(&#39;/&#39;, (req, res) =&gt; {\r\n    res.send(&#39;index.html&#39;)\r\n})\r\n\r\napp.get(&#39;*&#39;, (req, res) =&gt; {\r\n    res.redirect(&#39;/&#39;)\r\n})\r\n\r\nhttp.createServer(app).listen(app.get(&#39;port&#39;), () =&gt;\r\n  console.log(&#39;Server running at: &#39; + app.get(&#39;port&#39;))\r\n)</pre><p>Note: we&#39;ll provide all <code>process.env</code> variables at deployment with Cosmic. Cosmic-specific variables are supplied automatically.</p><h3>3. Handle Post Requests</h3><p>Two things need to happen here. We&#39;ll use the official Twilio client to send a text to the user, and we&#39;ll use <code>axios</code> to make a POST request to the Cosmic API. Before doing both, we&#39;ll strip the user-inputted phone number of any non-digits and compute the time from the selected slot. We have:</p><pre>app.post(&#39;/api/appointments&#39;, (req, res) =&gt; {\r\n  const appointment = req.body\r\n  appointment.phone = appointment.phone.replace(/\\D/g,&#39;&#39;)\r\n  const date = moment(appointment.date, &#39;YYYY-DD-MM&#39;).startOf(&#39;day&#39;)\r\n  const time = date.hour(9).add(appointment.slot, &#39;hours&#39;)\r\n  const smsBody = `${appointment.name}, this message is to confirm your appointment at ${time.format(&#39;h:mm a&#39;)} on ${date.format(&#39;dddd MMMM Do[,] YYYY&#39;)}.`\r\n  //send confirmation message to user\r\n  twilioClient.messages.create({\r\n    to: &#39;+1&#39; + appointment.phone,\r\n    from: twilioNumber,\r\n    body: smsBody\r\n  }, (err, message) =&gt; console.log(message, err))\r\n  //push to cosmic\r\n  const cosmicObject = {\r\n    &quot;title&quot;: appointment.name,\r\n    &quot;type_slug&quot;: &quot;appointments&quot;,\r\n    &quot;write_key&quot;: config.bucket.write_key,\r\n    &quot;metafields&quot;: [\r\n      {\r\n        &quot;key&quot;: &quot;date&quot;,\r\n        &quot;type&quot;: &quot;text&quot;,\r\n        &quot;value&quot;: date.format(&#39;YYYY-DD-MM&#39;)\r\n      },\r\n      {\r\n        &quot;key&quot;: &quot;slot&quot;,\r\n        &quot;type&quot;: &quot;text&quot;,\r\n        &quot;value&quot;: appointment.slot\r\n      },\r\n      {\r\n        &quot;key&quot;: &quot;email&quot;,\r\n        &quot;type&quot;: &quot;text&quot;,\r\n        &quot;value&quot;: appointment.email\r\n      },{\r\n        &quot;key&quot;: &quot;phone&quot;,\r\n        &quot;type&quot;: &quot;text&quot;,\r\n        &quot;value&quot;: appointment.phone //which is now stripped of all non-digits\r\n      }\r\n    ]\r\n  }\r\n  axios.post(`https://api.cosmicjs.com/v1/${config.bucket.slug}/add-object`, cosmicObject)\r\n  .then(response =&gt; res.json({ data: &#39;success&#39; })).catch(err =&gt; res.json({ data: &#39;error &#39;}))\r\n})</pre><h3>4. Expose Site Configs</h3><p>We&#39;ll simply use <code>cosmicjs</code> to get the <code>site-config</code> object we need for the frontend to display links in the navigation.</p><pre>app.get(&#39;/api/config&#39;, (req,res) =&gt; {\r\n  Cosmic.getObject(config, { slug: &#39;site-config&#39; }, (err, response) =&gt; {\r\n    const data = response.object.metadata\r\n    err ? res.status(500).json({ data: &#39;error&#39; }) : res.json({ data })\r\n  })\r\n})</pre><h3>5. Expose Appointments</h3><p>Where it&#39;s definitely redundant to expose the site configurations through our backends API, its definitely important that we&#39;re doing it with the <code>Appointment</code> objects. First, we can conveniently reorganize the data to expose only what we need, but second, and infinitely more important, we don&#39;t publicly expose our users&#39; personal information. We&#39;ll use <code>cosmicjs</code> to fetch all <code>Appointment</code> objects, but only expose an array of objects with the form <code>{ date, slot }</code>.</p><pre>app.get(&#39;/api/appointments&#39;, (req, res) =&gt; {\r\n  Cosmic.getObjectType(config, { type_slug: &#39;appointments&#39; }, (err, response) =&gt; {\r\n    const appointments = response.objects.all ? response.objects.all.map(appointment =&gt; {\r\n      return {\r\n        date: appointment.metadata.date,\r\n        slot: appointment.metadata.slot\r\n      }\r\n    }) : {}\r\n    res.json({ data: appointments })\r\n  })\r\n})</pre><h3>6. The Finished Product</h3><p>Within minutes, entirely thanks to the simplicity of Express, CosmicJs&#39;s official client, and Twilio&#39;s official client, we have a backend that does everything we wanted it to do and nothing more. Pure zen.</p><pre>const express = require(&#39;express&#39;)\r\nconst path = require(&#39;path&#39;)\r\nconst morgan = require(&#39;morgan&#39;)\r\nconst bodyParser = require(&#39;body-parser&#39;)\r\nconst cors = require(&#39;cors&#39;)\r\nconst config = require(&#39;./config&#39;)\r\nconst http = require(&#39;http&#39;)\r\nconst Cosmic = require(&#39;cosmicjs&#39;)\r\nconst twilio = require(&#39;twilio&#39;)\r\nconst moment = require(&#39;moment&#39;)\r\nconst axios = require(&#39;axios&#39;)\r\n\r\nconst config = {\r\n  bucket: {\r\n    slug: process.env.COSMIC_BUCKET,\r\n    read_key: process.env.COSMIC_READ_KEY,\r\n    write_key: process.env.COSMIC_WRITE_KEY\r\n  },\r\n  twilio: {\r\n    auth: process.env.TWILIO_AUTH,\r\n    sid: process.env.TWILIO_SID,\r\n    number: process.env.TWILIO_NUMBER\r\n  }\r\n}\r\n\r\nconst app = express()\r\nconst env = process.env.NODE_ENV || &#39;development&#39;\r\nconst twilioSid = config.twilio.sid\r\nconst twilioAuth = config.twilio.auth\r\nconst twilioClient = twilio(twilioSid, twilioAuth)\r\nconst twilioNumber = config.twilio.number\r\n\r\napp.set(&#39;trust proxy&#39;, 1)\r\napp.use(session({\r\n  secret: &#39;sjcimsoc&#39;,\r\n  resave: false,\r\n  saveUninitialized: true,\r\n  cookie: { secure: false }\r\n}))\r\napp.use(cors())\r\napp.use(morgan(&#39;dev&#39;))\r\napp.use(bodyParser.json())\r\napp.use(bodyParser.urlencoded({ extended: true }))\r\napp.use(express.static(path.join(__dirname, &#39;public&#39;)))\r\napp.set(&#39;port&#39;, process.env.PORT || 3000)\r\n\r\napp.post(&#39;/api/appointments&#39;, (req, res) =&gt; {\r\n  const appointment = req.body\r\n  appointment.phone = appointment.phone.replace(/\\D/g,&#39;&#39;)\r\n  const date = moment(appointment.date, &#39;YYYY-DD-MM&#39;).startOf(&#39;day&#39;)\r\n  const time = date.hour(9).add(appointment.slot, &#39;hours&#39;)\r\n  const smsBody = `${appointment.name}, this message is to confirm your appointment at ${time.format(&#39;h:mm a&#39;)} on ${date.format(&#39;dddd MMMM Do[,] YYYY&#39;)}.`\r\n  //send confirmation message to user\r\n  twilioClient.messages.create({\r\n    to: &#39;+1&#39; + appointment.phone,\r\n    from: twilioNumber,\r\n    body: smsBody\r\n  }, (err, message) =&gt; console.log(message, err))\r\n  //push to cosmic\r\n  const cosmicObject = {\r\n    &quot;title&quot;: appointment.name,\r\n    &quot;type_slug&quot;: &quot;appointments&quot;,\r\n    &quot;write_key&quot;: config.bucket.write_key,\r\n    &quot;metafields&quot;: [\r\n      {\r\n        &quot;key&quot;: &quot;date&quot;,\r\n        &quot;type&quot;: &quot;text&quot;,\r\n        &quot;value&quot;: date.format(&#39;YYYY-DD-MM&#39;)\r\n      },\r\n      {\r\n        &quot;key&quot;: &quot;slot&quot;,\r\n        &quot;type&quot;: &quot;text&quot;,\r\n        &quot;value&quot;: appointment.slot\r\n      },\r\n      {\r\n        &quot;key&quot;: &quot;email&quot;,\r\n        &quot;type&quot;: &quot;text&quot;,\r\n        &quot;value&quot;: appointment.email\r\n      },{\r\n        &quot;key&quot;: &quot;phone&quot;,\r\n        &quot;type&quot;: &quot;text&quot;,\r\n        &quot;value&quot;: appointment.phone //which is now stripped of all non-digits\r\n      }\r\n    ]\r\n  }\r\n  axios.post(`https://api.cosmicjs.com/v1/${config.bucket.slug}/add-object`, cosmicObject)\r\n  .then(response =&gt; res.json({ data: &#39;success&#39; })).catch(err =&gt; res.json({ data: &#39;error &#39;}))\r\n})\r\n\r\napp.get(&#39;/api/config&#39;, (req,res) =&gt; {\r\n  Cosmic.getObject(config, { slug: &#39;site-config&#39; }, (err, response) =&gt; {\r\n    const data = response.object.metadata\r\n    err ? res.status(500).json({ data: &#39;error&#39; }) : res.json({ data })\r\n  })\r\n})\r\n\r\napp.get(&#39;/api/appointments&#39;, (req, res) =&gt; {\r\n  Cosmic.getObjectType(config, { type_slug: &#39;appointments&#39; }, (err, response) =&gt; {\r\n    const appointments = response.objects.all ? response.objects.all.map(appointment =&gt; {\r\n      return {\r\n        date: appointment.metadata.date,\r\n        slot: appointment.metadata.slot\r\n      }\r\n    }) : {}\r\n    res.json({ data: appointments })\r\n  })\r\n})\r\n\r\napp.get(&#39;/&#39;, (req, res) =&gt; {\r\n    res.send(&#39;index.html&#39;)\r\n})\r\n\r\napp.get(&#39;*&#39;, (req, res) =&gt; {\r\n    res.redirect(&#39;/&#39;)\r\n})\r\n\r\nhttp.createServer(app).listen(app.get(&#39;port&#39;), () =&gt;\r\n  console.log(&#39;Server running at: &#39; + app.get(&#39;port&#39;))\r\n)</pre><h2>Part 3: Build and Deploy</h2><p>Before we build an extension to manage our Appointments, we&#39;ll bundle the frontend and deploy the app to Cosmic so we can have even have some appointments to manage.</p><p>In the frontend directory, <code>appointment-scheduler</code>, run <code>webpack</code> to build out into <code>dist</code>. Then move the contents of <code>dist</code> to the backend&#39;s public folder - <code>AppointmentScheduler/public</code>. The <code>index.html</code> that Webpack builds will then be the <code>index.html</code> we serve from <code>/</code>.</p><p>From <code>AppointmentScheduler</code>, commit the app to a new Github repo. Then, create a trial Twilio account and within the Cosmic dashboard, add the following <code>env</code> variables from the deploy menu.</p><ul><li><code>TWILIO_AUTH</code> - your Twilio auth key</li><li><code>TWILIO_SID</code> - your Twilio sid</li><li><code>TWILIO_NUMBER</code> - the phone number you have associated with your Twilio trial.</li></ul><p>Now go ahead and deploy and add a few sample appointments that we can use to test our extension.</p><h2>Part 4. Build the Extension</h2><p>Cosmic let&#39;s you upload SPA&#39;s that you can use to access and manipulate your bucket&#39;s data right within the Cosmic dashboard. These are called Extensions and we&#39;ll be building one to be able to view a table of all scheduled appointments, as well as providing us with an easy way to delete them.</p><p>Just as with the frontend, we&#39;ll be using React with Material UI and the steps here will be similar to Part 1.</p><h3>1. Boilerplate setup</h3><ol><li>First, make our <code>appointment-scheduler-extension</code> directory, run <code>yarn init</code>, and create the following project structure.</li></ol><pre><code>appointment-scheduler-extension\r\n|\r\n|--dist\r\n|--src\r\n|. |--Components\r\n|. |. |--App.js\r\n|. |--index.html\r\n|. |--index.js\r\n|--.babelrc\r\n|--.gitignore\r\n|--package.json\r\n|--webpack.config.js\r\n</code></pre><ol start=\"2\"><li>Use the same exact <code>index.html</code> template we used for the frontend.</li></ol><pre>&lt;!-- ./src/index.html --&gt;\r\n\r\n&lt;!DOCTYPE html&gt;\r\n&lt;html&gt;\r\n  &lt;head&gt;\r\n    &lt;meta charset=&quot;utf-8&quot;&gt;\r\n    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1, maximum-scale=1&quot;&gt;\r\n    &lt;link href=&quot;https://fonts.googleapis.com/css?family=Roboto&quot; rel=&quot;stylesheet&quot;&gt;\r\n    &lt;title&gt;Appointment Scheduler&lt;/title&gt;\r\n  &lt;/head&gt;\r\n  &lt;body&gt;\r\n    &lt;div id=&quot;root&quot;&gt;&lt;/div&gt;\r\n  &lt;/body&gt;\r\n&lt;/html&gt;</pre><ol start=\"3\"><li>We&#39;ll be using almost all of the same packages as the frontend. Refer to Part 1 for installations, including adding <code>lodash</code> and <code>query-string</code>. We&#39;ll use <code>lodash</code> for filtering data and <code>query-string</code> as a convenient way to get our Cosmic keys, which Cosmic supplies as url parameters.</li><li>Likewise, <code>webpack.config.js</code>, <code>.gitignore</code>, and <code>.babelrc</code> will all be entirely the same as in Part 1.</li><li><code>index.js</code> won&#39;t change either besides a new scheme for config variables:<pre>import React from &#39;react&#39;\r\nimport ReactDom from &#39;react-dom&#39;\r\nimport App from &#39;./Components/App&#39;\r\nimport MuiThemeProvider from &#39;material-ui/styles/MuiThemeProvider&#39;\r\nimport QueryString from &#39;query-string&#39;\r\nimport &#39;normalize.css&#39;\r\n\r\nwindow.React = React\r\n\r\nconst url = QueryString.parse(location.search)\r\n\r\nconst config = { bucket: {\r\n    slug: url.bucket_slug,\r\n    write_key: url.write_key,\r\n    read_key: url.read_key\r\n  }\r\n}\r\n\r\n\r\nReactDom.render(\r\n  &lt;MuiThemeProvider&gt;\r\n    &lt;App config={config}/&gt;\r\n  &lt;/MuiThemeProvider&gt;,\r\n  document.getElementById(&#39;root&#39;)\r\n)</pre></li></ol><h3>3. Work Out a Skeleton</h3><p>From here, our extesion and frontend start to diverge.</p><p>At it&#39;s barest, our extension will look like this:</p><pre>import { Component } from &#39;react&#39;\r\nimport injectTapEventPlugin from &#39;react-tap-event-plugin&#39;\r\n\r\ninjectTapEventPlugin()\r\n\r\nexport default class App extends Component {\r\n    constructor(props) {\r\n        super(props)\r\n      // set initial state\r\n      // bind component methods\r\n    }\r\n  \r\n  // component methods, lifecycle methods\r\n  \r\n  render() {\r\n        return (\r\n        //Material UI components \r\n        )\r\n    }\r\n}</pre><p>Thinking about what we need for an initial state:</p><ul><li>We&#39;re getting our Cosmic config variables from url parametes in <code>index.js</code> and we&#39;re passing them to <code>App</code> as props, so we&#39;ll need to move those to it&#39;s state.</li><li>We&#39;ll be using a <code>SnackBar</code> like we did in the frontend so we need to keep track of its state and message. We&#39;ll also be using a <code>DatePicker</code> and need a similar strategy.</li><li>We&#39;ll have a toolbar with a dropdown that lets the user select between listing all appointments for filtering them by day. We&#39;ll track which is being done by assigning <code>1</code> to a state variable when the first is selected, <code>0</code> for the latter.</li><li>We&#39;re loading our appointments data from Cosmic so it will be useful to cache them. We&#39;ll also need to do this separately for filtering appointments by date.</li><li>We can select rows in the table of appointments and need to track which are selected. It will also be useful to track the state of <em>all</em> rows being selected.</li></ul><p>Thus, for an initial state, we have:</p><pre>this.state = {\r\n  config: props.config,\r\n  snackbarDisabled: false,\r\n  snackbarMessage: &#39;Loading...&#39;,\r\n  toolbarDropdownValue: 1,\r\n  appointments: {},\r\n  filteredAppointments: {},\r\n  datePickerDisabled: true,\r\n  selectedRows: [],\r\n  deleteButtonDisabled: true,\r\n  allRowsSelected: false\r\n}</pre><h4>4. Draft Out Functionality</h4><p>Our Extension needs to have the following functions to get it working the way we need it to:</p><ul><li>Fetch data from Cosmic in <code>componentWillMount()</code> and handle it in a seperate <code>handleFetchMethod</code> (and it&#39;s companion <code>handleFetchError()</code>)</li><li>Change the state when the filter option is changed with <code>handleToobarDropdownChange()</code></li><li>Override default Material UI <code>Table</code> selections with <code>handleRowSelection()</code></li><li>Handle deleting <code>Appointment</code> objects with <code>handleDelete()</code></li><li>Feed disabled dates to the <code>DatePicker</code> with <code>checkDisableDate()</code></li><li>Filter appointments with <code>filterAppointments()</code></li><li>Render appointments as <code>TableRow</code>s with <code>setTableChildren()</code></li></ul><p>Including those in our extension&#39;s skeleton, we now have:</p><pre>import { Component } from &#39;react&#39;\r\nimport injectTapEventPlugin from &#39;react-tap-event-plugin&#39;\r\n\r\ninjectTapEventPlugin()\r\n\r\nexport default class App extends Component {\r\n    constructor(props) {\r\n        super(props)\r\n      this.state = {\r\n          config: props.config,\r\n          snackbarDisabled: false,\r\n          snackbarMessage: &#39;Loading...&#39;,\r\n          toolbarDropdownValue: 1,\r\n          appointments: {},\r\n          filteredAppointments: {},\r\n          datePickerDisabled: true,\r\n          selectedRows: [],\r\n          deleteButtonDisabled: true,\r\n          allRowsSelected: false\r\n        }\r\n    }\r\n  \r\n  handleFetchError(err) {\r\n        //handle errors fetching data from Cosmic\r\n    }\r\n  \r\n  handleFetch(response) {\r\n        //process data fetched from Cosmic\r\n    }\r\n  \r\n  handleToolbarDropdownChange(val) {\r\n        // set the dropdown value and clear filteredAppointments() if\r\n      // &quot;List All&quot; is selected. (State 1). \r\n    }\r\n  \r\n  handleRowSelection(rowsToSelect) {\r\n        // Table returns &#39;all&#39; if the select-all button was used, an array of selected\r\n      // row numbers, otherwise. We need to make sense of this.\r\n    }\r\n  \r\n  handleDelete(selectedRows) {\r\n        //send a post request to Cosmic&#39;s api to get rid of unwanted appointments\r\n    }\r\n  \r\n  checkDisableDate(date) {\r\n        //feed the DatePicker days based on availability determined by appointments\r\n      //retrieved from Cosmic\r\n    }\r\n  \r\n  filterAppointments(date) {\r\n        //Only show appointments occuring on date\r\n    }\r\n  \r\n setTableChildren(selectedRows = this.state.selectedRows, appointments = this.state.appointments) {\r\n        //render a TableRow for each appointment loaded\r\n    }\r\n  \r\n  componentWillMount() {\r\n        //fetch data immediately\r\n    }\r\n  \r\n  render() {\r\n        return (\r\n        //Material UI components \r\n        )\r\n    }\r\n}</pre><h3>5. Build Out the View</h3><p>Like the frontend, we&#39;ll use all Material UI components to display our data.</p><pre>render() {\r\n  const { snackbarDisabled, appointments, datePickerDisabled, deleteButtonDisabled, ...data } = this.state\r\n  return (\r\n    &lt;div style={{ fontFamily: &#39;Roboto&#39; }}&gt;\r\n      &lt;AppBar\r\n        showMenuIconButton={false}\r\n        title=&quot;Appointment Manager&quot;/&gt;\r\n      &lt;SnackBar\r\n        message={data.snackbarMessage}\r\n        open={!snackbarDisabled} /&gt;\r\n      &lt;Toolbar&gt;\r\n        &lt;ToolbarGroup firstChild={true}&gt;\r\n          &lt;DropDownMenu\r\n            value={data.toolbarDropdownValue}\r\n            onChange={(evt, key, val) =&gt; this.handleToolbarDropdownChange(val)}&gt;\r\n            &lt;MenuItem value={0} primaryText=&quot;Filter Appointments By Date&quot; /&gt;\r\n            &lt;MenuItem value={1} primaryText=&quot;List All Appointments&quot; /&gt;\r\n          &lt;/DropDownMenu&gt;\r\n          &lt;DatePicker\r\n            hintText=&quot;Select a date&quot;\r\n            autoOk={true}\r\n            disabled={datePickerDisabled}\r\n            name=&quot;date-select&quot;\r\n            onChange={(n, date) =&gt; this.filterAppointments(date)}\r\n            shouldDisableDate={(day) =&gt; this.checkDisableDate(day)} /&gt;\r\n        &lt;/ToolbarGroup&gt;\r\n        &lt;ToolbarGroup lastChild={true}&gt;\r\n          &lt;RaisedButton\r\n            primary={true}\r\n            onClick={() =&gt; this.handleDelete(data.selectedRows)}\r\n            disabled={deleteButtonDisabled}\r\n            label={`Delete Selected ${data.selectedRows.length ? &#39;(&#39; + data.selectedRows.length + &#39;)&#39; : &#39;&#39;}`} /&gt;\r\n        &lt;/ToolbarGroup&gt;\r\n      &lt;/Toolbar&gt;\r\n      &lt;Table\r\n        onRowSelection={rowsToSelect =&gt; this.handleRowSelection(rowsToSelect)}\r\n        multiSelectable={true} &gt;\r\n        &lt;TableHeader&gt;\r\n          &lt;TableRow&gt;\r\n            &lt;TableHeaderColumn&gt;ID&lt;/TableHeaderColumn&gt;\r\n            &lt;TableHeaderColumn&gt;Name&lt;/TableHeaderColumn&gt;\r\n            &lt;TableHeaderColumn&gt;Email&lt;/TableHeaderColumn&gt;\r\n            &lt;TableHeaderColumn&gt;Phone&lt;/TableHeaderColumn&gt;\r\n            &lt;TableHeaderColumn&gt;Date&lt;/TableHeaderColumn&gt;\r\n            &lt;TableHeaderColumn&gt;Time&lt;/TableHeaderColumn&gt;\r\n          &lt;/TableRow&gt;\r\n        &lt;/TableHeader&gt;\r\n        &lt;TableBody\r\n          children={data.tableChildren}\r\n          allRowsSelected={data.allRowsSelected}&gt;\r\n        &lt;/TableBody&gt;\r\n      &lt;/Table&gt;\r\n    &lt;/div&gt;\r\n  )\r\n}</pre><h3>6. Fetch Appointment Data</h3><p>Unllike with the frontend, we don&#39;t have to worry about exposing sensitive data to the public, so we can easily use <code>cosmicjs</code> to handle the fetch. We&#39;ll do this in <code>componentWillMount()</code>.</p><pre>componentWillMount() {\r\n  Cosmic.getObjectType(this.state.config, { type_slug: &#39;appointments&#39; }, (err, response) =&gt; err ? this.handleFetchError(err) : this.handleFetch(response)\r\n  )\r\n}</pre><p>We&#39;ll handle errors with <code>handleFetchError()</code>, which will show the user that an error occured in the <code>SnackBar</code>.</p><pre>handleFetchError(err) {\r\n  console.log(err)\r\n  this.setState({ snackbarMessage: &#39;Error loading data&#39; })\r\n}</pre><p>If data is successfully returned, we&#39;ll process it with <code>handleFetch()</code>.</p><pre>handleFetch(response) {\r\n  const appointments = response.objects.all ? response.objects.all.reduce((currentAppointments, appointment) =&gt; {\r\n    const date = appointment.metadata.date\r\n    if (!currentAppointments[date]) currentAppointments[date] = []\r\n    const appointmentData = {\r\n      slot: appointment.metadata.slot,\r\n      name: appointment.title,\r\n      email: appointment.metadata.email,\r\n      phone: appointment.metadata.phone,\r\n      slug: appointment.slug\r\n    }\r\n    currentAppointments[date].push(appointmentData)\r\n    currentAppointments[date].sort((a,b) =&gt; a.slot - b.slot)\r\n    return currentAppointments\r\n  }, {}) : {}\r\n\r\n  this.setState({ appointments, snackbarDisabled: true, tableChildren: this.setTableChildren([], appointments) })\r\n}</pre><p>From the array of <code>Appointment</code> objects our bucket sends, we create a schedule of all loaded appointments, <code>appointments</code>. We then save that to the state and pass it to <code>setTableChildren()</code> to use in rendering the <code>Table</code>.</p><h3>7. Handle UI Changes</h3><p>We need a few simple methods to handle the filter dropdown in the toolbar, selecting rows, filtering appointments, feeding a check for disabling dates to the <code>DatePicker</code>. Starting with handling the dropdown filter, <code>0</code> maps to filtering the appointments by date, <code>1</code> maps to listing all. For listing all, we reset <code>state.filteredAppointments</code>.</p><pre>handleToolbarDropdownChange(val) {\r\n  //0: filter by date, 1: list all\r\n  val ? this.setState({ filteredAppointments: {}, datePickerDisabled: true, toolbarDropdownValue: 1 }) : this.setState({ toolbarDropdownValue: 0, datePickerDisabled: false })\r\n}</pre><p>For handling row selection, we save the selected rows to the state, set the table children based on the rows selected, and enable the delete button if at least one row is selected.</p><pre>handleRowSelection(rowsToSelect) {\r\n  const allRows = [...Array(this.state.tableChildren.length).keys()]\r\n  const allRowsSelected = rowsToSelect === &#39;all&#39;\r\n  const selectedRows = Array.isArray(rowsToSelect) ? rowsToSelect : allRowsSelected ? allRows : []\r\n  const appointments = _.isEmpty(this.state.filteredAppointments) ? this.state.appointments : this.state.filteredAppointments\r\n  const deleteButtonDisabled = selectedRows.length == 0\r\n  const tableChildren = allRowsSelected ? this.setTableChildren([], appointments) : this.setTableChildren(selectedRows, appointments)\r\n  this.setState({ selectedRows, deleteButtonDisabled, tableChildren })\r\n}</pre><p>For disabling dates, we only make them active if <code>state.appointments.date</code>, where <code>date = &#39;YYYY-DD-MM&#39;</code>, exists.</p><pre>checkDisableDate(day) {\r\n  return !this.state.appointments[moment(day).format(&#39;YYYY-DD-MM&#39;)]\r\n}</pre><h3>8. Filtering Appointments and Rendering the Table</h3><p>When the user changes the filter dropdown to <code>Filter By Date</code> they then pick a date from the date picker. Upon choosing a date, the date picker fires <code>filterAppointments()</code> to set <code>state.filteredAppoitments</code> to the sub-schedule <code>state.appointments[selectedDate]</code> and pass that sub-schedule <code>setTableChildren()</code>.</p><pre>filterAppointments(date) {\r\n  const dateString = moment(date).format(&#39;YYYY-DD-MM&#39;)\r\n  const filteredAppointments = {}\r\n  filteredAppointments[dateString] = this.state.appointments[dateString]\r\n  this.setState({ filteredAppointments, tableChildren: this.setTableChildren([], filteredAppointments) })\r\n}</pre><p>When <code>filterAppointments()</code> (or any other method) calls <code>setTableChildren()</code> we can optionally pass an array of selected rows and an <code>appointments</code> object or let it default to <code>state.selectedRows</code> and <code>state.appointments</code>. If the appointments are filtered, we sort them by time before rendering.</p><pre>setTableChildren(selectedRows = this.state.selectedRows, appointments = this.state.appointments) {\r\n  const renderAppointment = (date, appointment, index) =&gt; {\r\n    const { name, email, phone, slot } = appointment\r\n    const rowSelected = selectedRows.includes(index)\r\n    return &lt;TableRow key={index} selected={rowSelected}&gt;\r\n      &lt;TableRowColumn&gt;{index}&lt;/TableRowColumn&gt;\r\n      &lt;TableRowColumn&gt;{name}&lt;/TableRowColumn&gt;\r\n      &lt;TableRowColumn&gt;{email}&lt;/TableRowColumn&gt;\r\n      &lt;TableRowColumn&gt;{phone}&lt;/TableRowColumn&gt;\r\n      &lt;TableRowColumn&gt;{moment(date, &#39;YYYY-DD-MM&#39;).format(&#39;M[/]D[/]YYYY&#39;)}&lt;/TableRowColumn&gt;\r\n      &lt;TableRowColumn&gt;{moment().hour(9).minute(0).add(slot, &#39;hours&#39;).format(&#39;h:mm a&#39;)}&lt;/TableRowColumn&gt;\r\n    &lt;/TableRow&gt;\r\n  }\r\n  const appointmentsAreFiltered = !_.isEmpty(this.state.filteredAppointments)\r\n  const schedule = appointmentsAreFiltered ? this.state.filteredAppointments : appointments\r\n  const els = []\r\n  let counter = 0\r\n  appointmentsAreFiltered ?\r\n    Object.keys(schedule).forEach(date =&gt; {\r\n    schedule[date].forEach((appointment, index) =&gt; els.push(renderAppointment(date, appointment, index)))\r\n  }) :\r\n  Object.keys(schedule).sort((a,b) =&gt; moment(a, &#39;YYYY-DD-MM&#39;).isBefore(moment(b, &#39;YYYY-MM-DD&#39;)))\r\n    .forEach((date, index) =&gt; {\r\n    schedule[date].forEach(appointment =&gt; {\r\n      els.push(renderAppointment(date, appointment, counter))\r\n      counter++\r\n    })\r\n  })\r\n  return els\r\n}</pre><h3>9. Deleting Appointments</h3><p>The last thing we need to handle is letting the user delete appointments, leveraging <code>cosmicjs</code> for deleting objects found using <code>lodash</code> from <code>state.appointments</code> according to <code>selectedRows</code>.</p><pre>handleDelete(selectedRows) {\r\n  const { config } = this.state\r\n  return selectedRows.map(row =&gt; {\r\n    const { tableChildren, appointments } = this.state\r\n    const date = moment(tableChildren[row].props.children[4].props.children, &#39;M-D-YYYY&#39;).format(&#39;YYYY-DD-MM&#39;)\r\n    const slot = moment(tableChildren[row].props.children[5].props.children, &#39;h:mm a&#39;).diff(moment().hours(9).minutes(0).seconds(0), &#39;hours&#39;) + 1\r\n    return _.find(appointments[date], appointment =&gt;\r\n                  appointment.slot === slot\r\n                 )\r\n  }).map(appointment =&gt; appointment.slug).forEach(slug =&gt;\r\n                                                  Cosmic.deleteObject(config, { slug, write_key: config.bucket.write_key }, (err, response) =&gt; {\r\n    if (err) {\r\n      console.log(err)\r\n      this.setState({ snackbarDisabled: false, snackbarMessage: &#39;Failed to delete appointments&#39; })\r\n    } else {\r\n      this.setState({ snackbarMessage: &#39;Loading...&#39;, snackbarDisabled: false })\r\n      Cosmic.getObjectType(this.state.config, { type_slug: &#39;appointments&#39; }, (err, response) =&gt;\r\n                           err ? this.handleFetchError(err) : this.handleFetch(response)\r\n                          )}\r\n  }\r\n                                                                     )\r\n                                                 )\r\n  this.setState({ selectedRows: [], deleteButtonDisabled: true})\r\n}</pre><h3>10. Putting It All Together</h3><p>At this point, including all necessary imports, our completed extension looks like this:</p><pre>// ./src/Components/App.js\r\n\r\nimport { Component } from &#39;react&#39;\r\nimport injectTapEventPlugin from &#39;react-tap-event-plugin&#39;\r\nimport axios from &#39;axios&#39;\r\nimport async from &#39;async&#39;\r\nimport _ from &#39;lodash&#39;\r\nimport moment from &#39;moment&#39;\r\nimport Cosmic from &#39;cosmicjs&#39;\r\nimport AppBar from &#39;material-ui/AppBar&#39;\r\nimport FlatButton from &#39;material-ui/FlatButton&#39;\r\nimport RaisedButton from &#39;material-ui/RaisedButton&#39;\r\nimport SnackBar from &#39;material-ui/SnackBar&#39;\r\nimport DropDownMenu from &#39;material-ui/DropDownMenu&#39;\r\nimport MenuItem from &#39;material-ui/MenuItem&#39;\r\nimport DatePicker from &#39;material-ui/DatePicker&#39;\r\nimport {\r\n  Toolbar,\r\n  ToolbarGroup\r\n} from &#39;material-ui/Toolbar&#39;\r\nimport {\r\n  Table,\r\n  TableBody,\r\n  TableHeader,\r\n  TableHeaderColumn,\r\n  TableRow,\r\n  TableRowColumn,\r\n} from &#39;material-ui/Table&#39;;\r\n\r\ninjectTapEventPlugin()\r\n\r\nexport default class App extends Component {\r\n  constructor(props) {\r\n    super(props)\r\n    this.state = {\r\n      config: props.config,\r\n      snackbarDisabled: false,\r\n      snackbarMessage: &#39;Loading...&#39;,\r\n      toolbarDropdownValue: 1,\r\n      appointments: {},\r\n      filteredAppointments: {},\r\n      datePickerDisabled: true,\r\n      selectedRows: [],\r\n      deleteButtonDisabled: true,\r\n      allRowsSelected: false\r\n    }\r\n    this.handleFetchError = this.handleFetchError.bind(this)\r\n    this.handleFetch = this.handleFetch.bind(this)\r\n    this.handleRowSelection = this.handleRowSelection.bind(this)\r\n    this.handleToolbarDropdownChange = this.handleToolbarDropdownChange.bind(this)\r\n    this.handleDelete = this.handleDelete.bind(this)\r\n    this.checkDisableDate = this.checkDisableDate.bind(this)\r\n    this.setTableChildren = this.setTableChildren.bind(this)\r\n  }\r\n\r\n  handleFetchError(err) {\r\n    console.log(err)\r\n    this.setState({ snackbarMessage: &#39;Error loading data&#39; })\r\n  }\r\n\r\n  handleFetch(response) {\r\n    const appointments = response.objects.all ? response.objects.all.reduce((currentAppointments, appointment) =&gt; {\r\n      const date = appointment.metadata.date\r\n      if (!currentAppointments[date]) currentAppointments[date] = []\r\n      const appointmentData = {\r\n        slot: appointment.metadata.slot,\r\n        name: appointment.title,\r\n        email: appointment.metadata.email,\r\n        phone: appointment.metadata.phone,\r\n        slug: appointment.slug\r\n      }\r\n      currentAppointments[date].push(appointmentData)\r\n      currentAppointments[date].sort((a,b) =&gt; a.slot - b.slot)\r\n      return currentAppointments\r\n    }, {}) : {}\r\n\r\n    this.setState({ appointments, snackbarDisabled: true, tableChildren: this.setTableChildren([], appointments) })\r\n  }\r\n\r\n  handleToolbarDropdownChange(val) {\r\n    //0: filter by date, 1: list all\r\n    val ? this.setState({ filteredAppointments: {}, datePickerDisabled: true, toolbarDropdownValue: 1 }) : this.setState({ toolbarDropdownValue: 0, datePickerDisabled: false })\r\n  }\r\n\r\n  handleRowSelection(rowsToSelect) {\r\n    const allRows = [...Array(this.state.tableChildren.length).keys()]\r\n    const allRowsSelected = rowsToSelect === &#39;all&#39;\r\n    const selectedRows = Array.isArray(rowsToSelect) ? rowsToSelect : allRowsSelected ? allRows : []\r\n    const appointments = _.isEmpty(this.state.filteredAppointments) ? this.state.appointments : this.state.filteredAppointments\r\n    const deleteButtonDisabled = selectedRows.length == 0\r\n    const tableChildren = allRowsSelected ? this.setTableChildren([], appointments) : this.setTableChildren(selectedRows, appointments)\r\n    this.setState({ selectedRows, deleteButtonDisabled, tableChildren })\r\n  }\r\n\r\n  handleDelete(selectedRows) {\r\n    const { config } = this.state\r\n    return selectedRows.map(row =&gt; {\r\n      const { tableChildren, appointments } = this.state\r\n      const date = moment(tableChildren[row].props.children[4].props.children, &#39;M-D-YYYY&#39;).format(&#39;YYYY-DD-MM&#39;)\r\n      const slot = moment(tableChildren[row].props.children[5].props.children, &#39;h:mm a&#39;).diff(moment().hours(9).minutes(0).seconds(0), &#39;hours&#39;) + 1\r\n      return _.find(appointments[date], appointment =&gt;\r\n        appointment.slot === slot\r\n      )\r\n    }).map(appointment =&gt; appointment.slug).forEach(slug =&gt;\r\n      Cosmic.deleteObject(config, { slug, write_key: config.bucket.write_key }, (err, response) =&gt; {\r\n        if (err) {\r\n          console.log(err)\r\n          this.setState({ snackbarDisabled: false, snackbarMessage: &#39;Failed to delete appointments&#39; })\r\n        } else {\r\n          this.setState({ snackbarMessage: &#39;Loading...&#39;, snackbarDisabled: false })\r\n          Cosmic.getObjectType(this.state.config, { type_slug: &#39;appointments&#39; }, (err, response) =&gt;\r\n            err ? this.handleFetchError(err) : this.handleFetch(response)\r\n          )}\r\n        }\r\n      )\r\n    )\r\n    this.setState({ selectedRows: [], deleteButtonDisabled: true})\r\n  }\r\n\r\n  checkDisableDate(day) {\r\n    return !this.state.appointments[moment(day).format(&#39;YYYY-DD-MM&#39;)]\r\n  }\r\n\r\n  filterAppointments(date) {\r\n    const dateString = moment(date).format(&#39;YYYY-DD-MM&#39;)\r\n    const filteredAppointments = {}\r\n    filteredAppointments[dateString] = this.state.appointments[dateString]\r\n    this.setState({ filteredAppointments, tableChildren: this.setTableChildren([], filteredAppointments) })\r\n  }\r\n\r\n  setTableChildren(selectedRows = this.state.selectedRows, appointments = this.state.appointments) {\r\n    const renderAppointment = (date, appointment, index) =&gt; {\r\n      const { name, email, phone, slot } = appointment\r\n      const rowSelected = selectedRows.includes(index)\r\n      return &lt;TableRow key={index} selected={rowSelected}&gt;\r\n        &lt;TableRowColumn&gt;{index}&lt;/TableRowColumn&gt;\r\n        &lt;TableRowColumn&gt;{name}&lt;/TableRowColumn&gt;\r\n        &lt;TableRowColumn&gt;{email}&lt;/TableRowColumn&gt;\r\n        &lt;TableRowColumn&gt;{phone}&lt;/TableRowColumn&gt;\r\n        &lt;TableRowColumn&gt;{moment(date, &#39;YYYY-DD-MM&#39;).format(&#39;M[/]D[/]YYYY&#39;)}&lt;/TableRowColumn&gt;\r\n        &lt;TableRowColumn&gt;{moment().hour(9).minute(0).add(slot, &#39;hours&#39;).format(&#39;h:mm a&#39;)}&lt;/TableRowColumn&gt;\r\n      &lt;/TableRow&gt;\r\n    }\r\n    const appointmentsAreFiltered = !_.isEmpty(this.state.filteredAppointments)\r\n    const schedule = appointmentsAreFiltered ? this.state.filteredAppointments : appointments\r\n    const els = []\r\n    let counter = 0\r\n    appointmentsAreFiltered ?\r\n      Object.keys(schedule).forEach(date =&gt; {\r\n        schedule[date].forEach((appointment, index) =&gt; els.push(renderAppointment(date, appointment, index)))\r\n      }) :\r\n      Object.keys(schedule).sort((a,b) =&gt; moment(a, &#39;YYYY-DD-MM&#39;).isBefore(moment(b, &#39;YYYY-MM-DD&#39;)))\r\n      .forEach((date, index) =&gt; {\r\n        schedule[date].forEach(appointment =&gt; {\r\n          els.push(renderAppointment(date, appointment, counter))\r\n          counter++\r\n        })\r\n      })\r\n    return els\r\n  }\r\n\r\n  componentWillMount() {\r\n    Cosmic.getObjectType(this.state.config, { type_slug: &#39;appointments&#39; }, (err, response) =&gt;\r\n      err ? this.handleFetchError(err) : this.handleFetch(response)\r\n    )\r\n  }\r\n\r\n  render() {\r\n    const { snackbarDisabled, appointments, datePickerDisabled, deleteButtonDisabled, ...data } = this.state\r\n    return (\r\n      &lt;div style={{ fontFamily: &#39;Roboto&#39; }}&gt;\r\n        &lt;AppBar\r\n          showMenuIconButton={false}\r\n          title=&quot;Appointment Manager&quot;/&gt;\r\n        &lt;SnackBar\r\n          message={data.snackbarMessage}\r\n          open={!snackbarDisabled} /&gt;\r\n        &lt;Toolbar&gt;\r\n          &lt;ToolbarGroup firstChild={true}&gt;\r\n            &lt;DropDownMenu\r\n              value={data.toolbarDropdownValue}\r\n              onChange={(evt, key, val) =&gt; this.handleToolbarDropdownChange(val)}&gt;\r\n              &lt;MenuItem value={0} primaryText=&quot;Filter Appointments By Date&quot; /&gt;\r\n              &lt;MenuItem value={1} primaryText=&quot;List All Appointments&quot; /&gt;\r\n            &lt;/DropDownMenu&gt;\r\n            &lt;DatePicker\r\n              hintText=&quot;Select a date&quot;\r\n              autoOk={true}\r\n              disabled={datePickerDisabled}\r\n              name=&quot;date-select&quot;\r\n              onChange={(n, date) =&gt; this.filterAppointments(date)}\r\n              shouldDisableDate={(day) =&gt; this.checkDisableDate(day)} /&gt;\r\n          &lt;/ToolbarGroup&gt;\r\n          &lt;ToolbarGroup lastChild={true}&gt;\r\n            &lt;RaisedButton\r\n              primary={true}\r\n              onClick={() =&gt; this.handleDelete(data.selectedRows)}\r\n              disabled={deleteButtonDisabled}\r\n              label={`Delete Selected ${data.selectedRows.length ? &#39;(&#39; + data.selectedRows.length + &#39;)&#39; : &#39;&#39;}`} /&gt;\r\n          &lt;/ToolbarGroup&gt;\r\n        &lt;/Toolbar&gt;\r\n        &lt;Table\r\n          onRowSelection={rowsToSelect =&gt; this.handleRowSelection(rowsToSelect)}\r\n          multiSelectable={true} &gt;\r\n          &lt;TableHeader&gt;\r\n            &lt;TableRow&gt;\r\n              &lt;TableHeaderColumn&gt;ID&lt;/TableHeaderColumn&gt;\r\n              &lt;TableHeaderColumn&gt;Name&lt;/TableHeaderColumn&gt;\r\n              &lt;TableHeaderColumn&gt;Email&lt;/TableHeaderColumn&gt;\r\n              &lt;TableHeaderColumn&gt;Phone&lt;/TableHeaderColumn&gt;\r\n              &lt;TableHeaderColumn&gt;Date&lt;/TableHeaderColumn&gt;\r\n              &lt;TableHeaderColumn&gt;Time&lt;/TableHeaderColumn&gt;\r\n            &lt;/TableRow&gt;\r\n          &lt;/TableHeader&gt;\r\n          &lt;TableBody\r\n            children={data.tableChildren}\r\n            allRowsSelected={data.allRowsSelected}&gt;\r\n          &lt;/TableBody&gt;\r\n        &lt;/Table&gt;\r\n      &lt;/div&gt;\r\n    )\r\n  }\r\n}</pre><h2>Part 5: Conclusion</h2><p>Once you run <code>webpack</code> in <code>appointment-scheduler-extension</code>, create <code>extension.json</code> in <code>dist</code> to make Cosmic recognize it:</p><pre>// appointment-scheduler-extension/dist/extension.json\r\n\r\n{\r\n  &quot;title&quot;: &quot;Appointment Manager&quot;,\r\n  &quot;font_awesome_class&quot;: &quot;fa-calendar&quot;,\r\n  &quot;image_url&quot;: &quot;&quot;\r\n}</pre><p>Then, compress <code>dist</code>, upload it to Cosmic, and we&#39;re ready to start managing appointments.</p><p>Using Cosmic, Twilio, Express, and React, we&#39;ve built a modular, easy to extend appointment scheduler to both give others easy access to our time while saving more of it for ourselves. The speed at which we&#39;re able to get our app deployed and the simplicity of managing our data reinforces that it was an obvious choice to use Cosmic both for CMS and deployment. Although our appointment scheduler will definitely save us time in the future, it&#39;s a sure thing that it can never compete with the time Cosmic will save us on future projects.</p><p><em>Matt Cain builds smart web applications and writes about the tech used to build them. You can learn more about him on his <a href=\"http://mattcain.io/\">portfolio</a></em>.</p>","metafields":[{"object_type":"authors","value":"59528e59833ff0503d000e98","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"59528e59833ff0503d000e98","slug":"matt-cain","title":"Matt Cain","content":"","metafields":[{"value":"9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg","imgix_url":"https://imgix.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-06-27T16:56:57.686Z","created_by":"5357ef811693be2118000001","created":"2017-06-27T16:56:57.686Z","status":"published","modified_at":"2023-01-20T22:01:28.380Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg"}},{"value":"<p>This Appointment Scheduler lets users select a day and a one-hour time slot between 9AM and 5PM to meet with us. It integrates with Twilio to send a confirmation text that their appointment has been scheduled. This also comes with a Cosmic Extension so we can manage the appointments right from within the Cosmic dashboard.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"895d94a0-97d1-11e7-aeb7-99586de38c8d-cal.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/895d94a0-97d1-11e7-aeb7-99586de38c8d-cal.jpg","imgix_url":"https://imgix.cosmicjs.com/895d94a0-97d1-11e7-aeb7-99586de38c8d-cal.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-09-12T15:47:51.319Z","created_by":"5357ef811693be2118000001","created":"2017-09-12T15:47:51.319Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"59528e59833ff0503d000e98","slug":"matt-cain","title":"Matt Cain","content":"","metafields":[{"value":"9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg","imgix_url":"https://imgix.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-06-27T16:56:57.686Z","created_by":"5357ef811693be2118000001","created":"2017-06-27T16:56:57.686Z","status":"published","modified_at":"2023-01-20T22:01:28.380Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg","imgix_url":"https://imgix.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg"}}},"teaser":"<p>This Appointment Scheduler lets users select a day and a one-hour time slot between 9AM and 5PM to meet with us. It integrates with Twilio to send a confirmation text that their appointment has been scheduled. This also comes with a Cosmic Extension so we can manage the appointments right from within the Cosmic dashboard.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/895d94a0-97d1-11e7-aeb7-99586de38c8d-cal.jpg","imgix_url":"https://imgix.cosmicjs.com/895d94a0-97d1-11e7-aeb7-99586de38c8d-cal.jpg"}}},{"_id":"59b5adc464a7f09c54000eaa","order":101,"slug":"introducing-sign-up-later","title":"Introducing Sign Up Later","content":"<p><img src=\"https://cosmicjs.imgix.net/6bdc0830-967d-11e7-9083-ad5a382c6904-tim-mossholder-174907.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>It is the mission of Cosmic to help development teams build apps faster, and we&#39;re always looking for new ways to speed up the development process. &nbsp;With this goal in mind, we are excited to announce that you can now use all of the Cosmic features in a full demo before signing up for an official Cosmic account. &nbsp;On the signup page you will now see an option to &quot;Skip this step&quot;.</p><p style=\"text-align: center;\"><img src=\"https://www.cosmicjs.com/uploads/6374e3a0-967e-11e7-9083-ad5a382c6904-Screen Shot 2017-09-10 at 6.18.25 PM.png\" style=\"width: 404px; height: 189.88px;\" class=\"fr-fic fr-dib\"></p><p>Add Buckets, Objects, Media and plug your dynamic content into your apps. &nbsp;When you are ready to save your account and save all demo data, simply click the &quot;Save Account&quot; button located in the main nav dropdown.</p><p style=\"text-align: center;\"><img src=\"https://www.cosmicjs.com/uploads/2225d580-967e-11e7-9083-ad5a382c6904-Screen Shot 2017-09-10 at 6.16.26 PM.png\" style=\"width: 300px;\" class=\"fr-fic fr-dib\"></p><p>If you have any questions please <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\">join our Slack community</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>We are excited to announce that you can now use all of the Cosmic features in a full demo before signing up for an official Cosmic account.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"6bdc0830-967d-11e7-9083-ad5a382c6904-tim-mossholder-174907.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/6bdc0830-967d-11e7-9083-ad5a382c6904-tim-mossholder-174907.jpg","imgix_url":"https://imgix.cosmicjs.com/6bdc0830-967d-11e7-9083-ad5a382c6904-tim-mossholder-174907.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-09-10T21:25:24.321Z","created_by":"5357ef811693be2118000001","created":"2017-09-10T21:25:24.322Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We are excited to announce that you can now use all of the Cosmic features in a full demo before signing up for an official Cosmic account.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/6bdc0830-967d-11e7-9083-ad5a382c6904-tim-mossholder-174907.jpg","imgix_url":"https://imgix.cosmicjs.com/6bdc0830-967d-11e7-9083-ad5a382c6904-tim-mossholder-174907.jpg"}}},{"_id":"59aea645480fbb12770003be","order":102,"slug":"how-to-build-a-multi-language-static-website-without-ajax","title":"How to Build a Multi-Language Static Website Without AJAX","content":"<section name=\"5160\"><figure id=\"b1d7\" name=\"b1d7\"><img data-src=\"https://cdn-images-1.medium.com/max/2000/1*XxAYcVOk8A3lX-3Zg_KAEQ.jpeg\" src=\"https://cdn-images-1.medium.com/max/2000/1*XxAYcVOk8A3lX-3Zg_KAEQ.jpeg\" class=\"fr-fic fr-dii\"></figure><p id=\"1be4\" name=\"1be4\"><br>A couple of weeks ago I wrote an article about <a href=\"https://codeburst.io/making-a-dynamic-static-website-with-gulp-what-i-learned-3ae98e012879\" rel=\"nofollow\" target=\"_blank\"><strong>building a static website with Gulp, and why it&rsquo;s so fantastic</strong></a>,\r\nas well as a couple of things I learned on the way.</p><p id=\"c7e8\" name=\"c7e8\">But one of the things I failed to touch on was <strong>how to manage dynamic content with static websites</strong>. In a dynamic website, pulling locale data is often taxed with multiple AJAX requests, as well as the time it takes to process the data\r\nbeing pulled from the remote server.</p><p id=\"c28c\" name=\"c28c\">But what if I told you there is a faster, and more optimized way to bundle the language data for your small web-application? And what if, I also told you that you can use a remote Content Management System (CMS), that can manage your website&rsquo;s content?</p></section><p><iframe src=\"https://giphy.com/embed/11fqVcfGb7UU3m\" width=\"100%\" height=\"300\" frameborder=\"0\" class=\"giphy-embed\" allowfullscreen=\"\"></iframe></p><section name=\"fbcf\"><h3 id=\"cbfc\" name=\"cbfc\">Enter Cosmic&nbsp;JS</h3><figure id=\"56ab\" name=\"56ab\"><figcaption>Do you want to know &mdash; what&hellip;. it&hellip;. is?</figcaption></figure><p id=\"657f\" name=\"657f\"><a href=\"https://www.cosmicjs.com\" target=\"_blank\"><strong>Cosmic</strong></a><strong>&nbsp;is an API-first CMS system made to help bridge the gap between developers and editors. </strong>Unlike WordPress or Drupal, the Cosmic API lives <a href=\"https://css-tricks.com/what-is-a-headless-cms\" rel=\"noopener noreferrer\" target=\"_blank\">independently from your code</a>. This allows it to be implemented in a<strong>&nbsp;numerous amount of ways to accomplish an </strong><a href=\"https://www.cosmicjs.com/apps\" rel=\"noopener noreferrer\" target=\"_blank\"><strong>awesome amount of things</strong>.</a></p><p id=\"b58b\" name=\"b58b\">There are several benefits to this (which you can read in detail about <a href=\"https://www.cosmicjs.com/why-cms-api\" rel=\"nofollow\"><strong>here</strong></a>), but the one I will be focusing right now will be the <strong>flexibility </strong>it can give us when approaching unique challenges.</p><p id=\"b1ba\" name=\"b1ba\">One of these challenges that we can overcome is trying to manage content on a static web-application. Because Cosmic at it&rsquo;s heart uses JSON data to deliver content to your website, we can take advantage of this to filter and embed the content\r\nwe need.</p><p id=\"7187\" name=\"7187\">Let me show you how it&rsquo;s done.</p></section><section name=\"9bbb\"><h3 id=\"22e9\" name=\"22e9\"><br>Before we begin&hellip;</h3><figure id=\"6bcd\" name=\"6bcd\"><img data-src=\"https://cdn-images-1.medium.com/max/1600/1*-tf-L-8oeZROPxgQS-1q3A.png\" src=\"https://cdn-images-1.medium.com/max/1600/1*-tf-L-8oeZROPxgQS-1q3A.png\" class=\"fr-fic fr-dii\"><figcaption style=\"text-align: center;\">The Cosmic homepage (as of late 2017)</figcaption><p><br></p></figure><p id=\"4132\" name=\"4132\"><strong>If you intend on modifying the app content you&rsquo;ll have to </strong><a href=\"https://www.cosmicjs.com/signup\" rel=\"noopener noreferrer\" target=\"_blank\"><strong>create a Cosmic account</strong></a>.\r\nThey offer free plans that you can use, as well as a 2 week trial to test it out without any restrictions.</p><p id=\"5da4\" name=\"5da4\">Regardless, you&rsquo;ll need to have a working development environment with <a href=\"https://nodejs.org\" rel=\"noopener noreferrer\" target=\"_blank\"><strong>Node.js and npm installed</strong></a>. We need it in order to run the <code><strong>Gulp</strong></code> build tooling as well as the development server. Once you have both Node.js and npm installed, we can begin working on the demo application.</p></section><section name=\"f63f\"><h3 id=\"7836\" name=\"7836\">Installing the&nbsp;demo</h3><p id=\"4f86\" name=\"4f86\">The demo GitHub project is located at <a href=\"https://github.com/cosmicjs/static-multi-language-app\" rel=\"noopener noreferrer\" target=\"_blank\">cosmicjs/static-multi-language-app</a>. Either clone the repository with <code>git clone</code> or download the project manually using the download button on the repository page.</p><p id=\"7898\" name=\"7898\">Once the project is downloaded (and extracted if you downloaded an archive), <code>cd</code> into the project directory and then download the project dependencies with the command <code>npm install</code>. Once that is done, you should now be able to\r\nbuild the project.</p><p id=\"f2e2\" name=\"f2e2\">Before we go through some the project details, build the <strong>development</strong><strong>version</strong> with the command <code>gulp dbuild</code>. The built application should then be available inside the <code>build/</code> directory.</p></section><section name=\"ddbe\"><h3 id=\"2f5b\" name=\"2f5b\">Running the&nbsp;App</h3><figure id=\"354f\" name=\"354f\"><img data-src=\"https://cdn-images-1.medium.com/max/2000/1*majgLCowLnV6ODiQdhE65w.png\" src=\"https://cdn-images-1.medium.com/max/2000/1*majgLCowLnV6ODiQdhE65w.png\" class=\"fr-fic fr-dii\"><figcaption style=\"text-align: center;\">How the default application should look (set to es-MX)</figcaption><p><br></p></figure><p id=\"7496\" name=\"7496\">At this point, you&rsquo;d probably want to run the application locally. To do so, make sure the project is built and start the development server with <code>gulp server</code>. Your default browser should open with the web app, located by accessing <code>localhost:8080</code>on\r\nyour web browser.</p></section><section name=\"bd45\"><h3 id=\"e307\" name=\"e307\">App structure</h3><figure id=\"687d\" name=\"687d\"><img data-src=\"https://cdn-images-1.medium.com/max/1200/1*kPqGbhJhK5WZ5A2m0BPNhQ.png\" src=\"https://cdn-images-1.medium.com/max/1200/1*kPqGbhJhK5WZ5A2m0BPNhQ.png\" class=\"fr-fic fr-dii\"><figcaption style=\"text-align: center;\">The default app structure</figcaption><p><br></p></figure><p id=\"656d\" name=\"656d\">The main structure of the application is split into two segments (like many web applications). There is the <code><strong>build/</strong></code> section, which contains the built project files, which also acts as the additional web root for our development server. And the <code><strong>src/</strong></code> section, which contains the source code for the project.</p><p id=\"d025\" name=\"d025\">Key files in the root project directory include the config.js file, which contains the configuration for both the Cosmic API fetcher script fetch.js, as well as the Gulp build-file gulpfile.js.&nbsp;</p><p id=\"5516\" name=\"5516\">The file fetch-utils.jscontains a helper function for filtering through specific objects.</p><blockquote id=\"638c\" name=\"638c\">The fetcher-utils is fairly powerful, and I&rsquo;m considering porting a more robust version to it&rsquo;s own mini npm module. Follow me on <a href=\"https://twitter.com/flynnbuckingham\" rel=\"noopener noreferrer\" target=\"_blank\"><strong>Twitter</strong></a> or <a href=\"https://github.com/flynnham\" rel=\"noopener noreferrer\" target=\"_blank\"><strong>GitHub</strong></a> if you&rsquo;d like updates about my open source projects.</blockquote><p id=\"ed56\" name=\"ed56\">There is also a <a href=\"https://github.com/cosmicjs/static-multi-language-app/blob/master/README.md\" rel=\"noopener noreferrer\" target=\"_blank\"><strong>README.md</strong></a> if you&rsquo;d like more detailed explanations and examples of how to take advantage of the API provided in the app.</p></section><section name=\"ce12\"><h3 id=\"6fb9\" name=\"6fb9\">Setting up for additional content</h3><figure id=\"fa74\" name=\"fa74\"><figcaption>Here is a code snippet from the configuration file config.js:</figcaption><pre class=\"prism\">// The config.js file\r\nmodule.exports = {\r\n    // Cosmic specific configuration...\r\n    lang: {\r\n        defaultLocale: &#39;en-US&#39;\r\n    },\r\n    fetch: {\r\n        file: &#39;src/cosmic-data.json&#39;,\r\n        cache: false,\r\n        NodeWhiteList: [&#39;locale&#39;, &#39;slug&#39;, &#39;content&#39;],\r\n        NodeAllowedTags: [&#39;a&#39;, &#39;b&#39;, &#39;i&#39;, &#39;only-the-tags-you-want&#39;]\r\n    }\r\n}</pre></figure><p id=\"b9d0\" name=\"b9d0\">The default language loaded by the application is specified in the <code>lang.defaultLocale</code> key, and is <code>en-US</code> by default. This means that it will attempt to load the language locale <code>en-US</code> when the application first loads unless other-wise specified.</p><figure id=\"6e6c\" name=\"6e6c\"><img data-src=\"https://cdn-images-1.medium.com/max/2000/1*foZ9pbHK95Jjg9wiGx_K3g.png\" src=\"https://cdn-images-1.medium.com/max/2000/1*foZ9pbHK95Jjg9wiGx_K3g.png\" class=\"fr-fic fr-dii\"><figcaption style=\"text-align: center;\">Dashboard &gt; Nodes &mdash; This is what it should look like.<br><br></figcaption></figure><p id=\"6ef3\" name=\"6ef3\">If you activated the <strong>demo on the Cosmic website</strong>, you should already have a bucket populated with <strong>Nodes</strong>, which are the default type that the application uses. Each Node contains a specific inline string that gets parsed\r\nby fetch.js to be embedded in your application.</p><p id=\"bdd6\" name=\"bdd6\">Creating a new Node with the Cosmic API is fairly simple. To create a new Node, simply click the button on the top right <code><strong>+ Add Node</strong></code>,<strong>&nbsp;</strong>and it should bring up a fairly simple UI that resembles something\r\nlike this:</p><figure id=\"2e8f\" name=\"2e8f\"><img data-src=\"https://cdn-images-1.medium.com/max/2000/1*Z1De90_YTd9NTpTFi9dfFQ.png\" src=\"https://cdn-images-1.medium.com/max/2000/1*Z1De90_YTd9NTpTFi9dfFQ.png\" class=\"fr-fic fr-dii\"><figcaption style=\"text-align: center;\">The UI for the Node creation interface.</figcaption><p><br></p></figure><p id=\"15b4\" name=\"15b4\">When creating a new Node (for multiple languages) it is best to first select a locale with the <code><strong>Select Locale</strong></code><strong>&nbsp;</strong>drop-down. This ensures that your data gets loaded with the correct locale when the app loads.</p><p id=\"30a4\" name=\"30a4\">To name the Node, simply type a name into the <code><strong>Node Title</strong></code> field. A <code><strong>Slug</strong></code>field (which will be mentioned again later) should auto-populate as you are creating the Title of the Node. <strong>Note that you cannot create a new Node with the same </strong><code><strong>Slug</strong></code><strong>&nbsp;unless the locale is different. </strong>This\r\nis to prevent accidental duplicate values within your app.</p><p id=\"9c94\" name=\"9c94\">Once that&rsquo;s done, enter in the content you&rsquo;d like your Node to represent. This should be consistent between locales of your app.</p><figure id=\"cf8d\" name=\"cf8d\"><img data-src=\"https://cdn-images-1.medium.com/max/2000/1*aen4TZDbxaT8OpFdkP5ntA.png\" src=\"https://cdn-images-1.medium.com/max/2000/1*aen4TZDbxaT8OpFdkP5ntA.png\" class=\"fr-fic fr-dii\"><figcaption style=\"text-align: center;\">A sample node.</figcaption><p><br></p></figure><p id=\"f64e\" name=\"f64e\">When done, make sure to publish the Node by clicking the <code><strong>Publish</strong></code><strong>&nbsp;</strong>button located at the top right of the page.</p><p id=\"f4b0\" name=\"f4b0\">That&rsquo;s it. You&rsquo;ve created a new Node with the locale specified. For consistency, make sure to repeat this for each locale, so you have a set Node value for the locale specified.</p><p id=\"b3ed\" name=\"b3ed\">So, now that you have all the locales set for a particular slug, you can start including the newly available data into your static web application.</p><p id=\"19d4\" name=\"19d4\">To bundle the newly created Node, make sure you have an active internet connection. If you do, then run <code>gulp dbuild</code> or <code>gulp build</code> to fetch and embed the data into the bundle.js file located in <code>build/assets/bundle.js</code></p></section><section name=\"7c99\"><h3 id=\"445a\" name=\"445a\">Adding static content to the&nbsp;markup</h3><p id=\"db20\" name=\"db20\">I created two main ways of adding content to your static website. The first is a static method, which involves adding a custom <code><strong>data-cosmic-node</strong></code> attribute to your application. <strong>The string value of the attribute should be equivalent to the slug name generated by the Cosmic API.</strong></p><p id=\"5461\" name=\"5461\">Navigate to the <code>src/html/main.html</code> and replace the default markup of :</p><pre class=\"prism\">&lt;div class=&quot;app-container&quot;&gt;\r\n    &lt;div class=&quot;cosmic-app&quot;&gt;\r\n        &lt;h2 data-cosmic-node=&quot;button-press-prompt&quot;&gt;&lt;/h2&gt;\r\n        &lt;div&gt;\r\n            &lt;button id=&quot;add-button&quot; class=&quot;cosmic-app-button&quot;&gt;\r\n                &lt;span data-cosmic-node=&quot;add-button&quot;&gt;&lt;/span&gt;\r\n            &lt;/button&gt;\r\n            &lt;button id=&quot;sub-button&quot; class=&quot;cosmic-app-button&quot;&gt;\r\n                &lt;span data-cosmic-node=&quot;sub-button&quot;&gt;&lt;/span&gt;\r\n            &lt;/button&gt;\r\n        &lt;/div&gt;\r\n        &lt;h2 class=&quot;cosmic-app-current-count&quot;&gt;\r\n            &lt;span data-cosmic-node=&quot;current-count&quot;&gt;&lt;/span&gt;\r\n            &lt;span id=&quot;current-count&quot;&gt;&lt;/span&gt;\r\n        &lt;/h2&gt;\r\n        &lt;h3 id=&quot;count-message&quot;&gt;&lt;/h3&gt;\r\n    &lt;/div&gt;\r\n&lt;/div&gt;</pre><p id=\"bb18\" name=\"bb18\">With this:</p><pre class=\"prism\">&lt;div class=&quot;app-container&quot;&gt;\r\n    &lt;h2 data-cosmic-node=&quot;this-is-a-sample-element&quot;&gt;&lt;/h2&gt;\r\n&lt;/div&gt;</pre><p id=\"a73f\" name=\"a73f\">Now simply rebuild the application with <code>gulp dbuild</code>. You should now get something that looks like this:</p><figure id=\"6556\" name=\"6556\"><img data-src=\"https://cdn-images-1.medium.com/max/2000/1*tKEkf9NSh2W87p7ShJVxLA.png\" src=\"https://cdn-images-1.medium.com/max/2000/1*tKEkf9NSh2W87p7ShJVxLA.png\" class=\"fr-fic fr-dii\"><figcaption style=\"text-align: center;\">This is what the updated app should look like.</figcaption><p><br></p></figure><p id=\"cfdc\" name=\"cfdc\">Assuming you made a Node for the locales appropriate for your app, you should see the contents of the element update whenever you switch locales. This is done through a element caching technique that searches the DOM for elements with the attribute <strong>data-cosmic-node</strong>,\r\nand will attempt to each one with the matching language value (if it exists).</p></section><section name=\"d3ff\"><h3 id=\"6b12\" name=\"6b12\">Adding dynamic content to your app</h3><iframe src=\"https://giphy.com/embed/fSMryuuE9QsBG\" width=\"100%\" height=\"288\" frameborder=\"0\" class=\"giphy-embed\" allowfullscreen=\"\"></iframe><p id=\"7689\" name=\"7689\">Obviously, a static implementation alone is not enough for a useful web app, and being somewhat seasoned in this area I knew exactly what needed to be done.</p><p id=\"9d53\" name=\"9d53\">I created a minimal language API for the application located at <code>src/js/lang.js</code>. It is not only responsible for caching and updating elements when the language changes, but it also provides methods that allows developers to manually get stored\r\nlanguage strings, as well as execute custom events whenever the language locale successfully changes.</p><p id=\"6eec\" name=\"6eec\">The documentation as well as a working implementation can be found <strong>within the demo itself </strong>(at <code>src/js/main.js</code>), in addition to the <a href=\"https://github.com/cosmicjs/static-multi-language-app/blob/master/README.md\" rel=\"noopener noreferrer\" target=\"_blank\"><strong>README.md</strong></a> file.</p><p id=\"9ed9\" name=\"9ed9\">But in case you&rsquo;d rather me explain it here, this is the simple rundown of methods that will help you manage locale state in the application.</p><h4 id=\"a755\" name=\"a755\"><br>CosmicLanguage.getString</h4><p id=\"061b\" name=\"061b\">The method <code><strong>CosmicLangauge.getString</strong></code>method does exactly what it sounds like. It attempts to fetch a specific value of a Node from the stored content. If found, it will return the filtered HTML content for the currently selected\r\nlocale.</p><p id=\"6360\" name=\"6360\">Here is an example of the method at work at work inside of a closure:</p><p id=\"d3f4\" name=\"d3f4\">So, you can potentially loop this method, conditionally rendering different Node values depending on the conditions set forth by your logic. But as you may have figured, what would happen in the event that the locale changes throughout the app?</p><h4 name=\"1c8c\"><br></h4><h4 id=\"1c8c\" name=\"1c8c\">CosmicLanguage.addUpdateEvent</h4><p id=\"71d0\" name=\"71d0\">As the name probably suggests, this is an event handler. Whenever a locale change event is invoked (via the <a href=\"https://github.com/cosmicjs/static-multi-language-app#static-content\" rel=\"noopener noreferrer\" target=\"_blank\"><strong>loadFromLocale</strong></a><strong>&nbsp;</strong>method), an additional array of event handlers are also fired. These are bound with the aforementioned <a href=\"https://github.com/cosmicjs/static-multi-language-app#updating-the-language-and-rendering-events\" rel=\"noopener noreferrer\" target=\"_blank\"><strong>addUpdateEvent</strong></a>.</p><figure id=\"45fe\" name=\"45fe\"><figcaption>A simple example of the event handler in action.</figcaption></figure><p id=\"7843\" name=\"7843\">While simple in practice, you&rsquo;ll most likely need this if you plan on setting any sort of dynamic multi-language content within your web app.&nbsp;</p><blockquote id=\"b637\" name=\"b637\"><a href=\"https://github.com/cosmicjs/static-multi-language-app/blob/master/src/js/main.js\" rel=\"noopener noreferrer\" target=\"_blank\"><strong>The example on the official repository shows a slightly more advanced means of managing the content of an Element based on state</strong></a>. I&rsquo;d recommenced that you go check it out to get a better feel of how to implement\r\nthe event.</blockquote></section><section name=\"4a4f\"><h3 id=\"39ef\" name=\"39ef\">In closing&hellip;</h3><p id=\"c8d8\" name=\"c8d8\">I could go on about the multiple ways to implement the mini language API I made. But the best way to learn is to simply throw yourself at it, and learn it at your own pace. <strong>Go ahead and try it out!</strong></p><p id=\"729d\" name=\"729d\">Personally, I really enjoyed writing the language API. It felt cool to accomplish something new, and provide a means to help other developers build their own applications.</p></section>","metafields":[{"object_type":"authors","value":"59aea3f20ba82c9e770006b1","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"59aea3f20ba82c9e770006b1","slug":"flynn-buckingham","title":"Flynn Buckingham","content":"","metafields":[{"value":"93257c90-923c-11e7-a292-7fa737c9dc7c-flynn.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/93257c90-923c-11e7-a292-7fa737c9dc7c-flynn.jpeg","imgix_url":"https://imgix.cosmicjs.com/93257c90-923c-11e7-a292-7fa737c9dc7c-flynn.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-09-05T13:17:38.764Z","created_by":"5357ef811693be2118000001","created":"2017-09-05T13:17:38.764Z","status":"published","modified_at":"2020-09-14T17:45:23.837Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/93257c90-923c-11e7-a292-7fa737c9dc7c-flynn.jpeg"}},{"value":"<p id=\"c7e8\" name=\"c7e8\">What if I told you there is a faster, and more optimized way to bundle the language data for your small web-application? And what if, I also told you that you can use a remote Content Management System (CMS), that can manage your website&rsquo;s content?</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"ed829d70-923d-11e7-ac16-9bd4a7f0c125-cosmic-blur.jpeg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/ed829d70-923d-11e7-ac16-9bd4a7f0c125-cosmic-blur.jpeg","imgix_url":"https://imgix.cosmicjs.com/ed829d70-923d-11e7-ac16-9bd4a7f0c125-cosmic-blur.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-09-05T13:27:33.277Z","created_by":"5357ef811693be2118000001","created":"2017-09-05T13:27:33.278Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"59aea3f20ba82c9e770006b1","slug":"flynn-buckingham","title":"Flynn Buckingham","content":"","metafields":[{"value":"93257c90-923c-11e7-a292-7fa737c9dc7c-flynn.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/93257c90-923c-11e7-a292-7fa737c9dc7c-flynn.jpeg","imgix_url":"https://imgix.cosmicjs.com/93257c90-923c-11e7-a292-7fa737c9dc7c-flynn.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-09-05T13:17:38.764Z","created_by":"5357ef811693be2118000001","created":"2017-09-05T13:17:38.764Z","status":"published","modified_at":"2020-09-14T17:45:23.837Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/93257c90-923c-11e7-a292-7fa737c9dc7c-flynn.jpeg","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/93257c90-923c-11e7-a292-7fa737c9dc7c-flynn.jpeg","imgix_url":"https://imgix.cosmicjs.com/93257c90-923c-11e7-a292-7fa737c9dc7c-flynn.jpeg"}}},"teaser":"<p id=\"c7e8\" name=\"c7e8\">What if I told you there is a faster, and more optimized way to bundle the language data for your small web-application? And what if, I also told you that you can use a remote Content Management System (CMS), that can manage your website&rsquo;s content?</p>","featured_image":{"url":"https://cdn.cosmicjs.com/ed829d70-923d-11e7-ac16-9bd4a7f0c125-cosmic-blur.jpeg","imgix_url":"https://imgix.cosmicjs.com/ed829d70-923d-11e7-ac16-9bd4a7f0c125-cosmic-blur.jpeg"}}},{"_id":"59a98711d74b0e0b35000564","order":103,"slug":"new-feature-object-pagination","title":"New Feature: Object Pagination","content":"<p>We&#39;re excited to announce that we&#39;ve rolled out a new feature for users whose Buckets have a large number of Objects: Object Pagination. Instead of having to scroll indefinitely through a section of Objects, we&#39;ve added Pagination to the bottom of each page to help you navigate and more effectively manage your content within your Bucket.&nbsp;</p><p><img src=\"https://www.cosmicjs.com/uploads/f0145a30-8f2f-11e7-b19d-959437bbab39-wcN7SR6LI5.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>This is another Community-requested feature to help you and your team Build Apps Faster. &nbsp;If you have any questions, <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">connect with us on Twitter</a> and join other members of our Community in conversation on <a href=\"https://www.cosmicjs.com/community\">our Slack channel</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>Object Pagination is now live in your Cosmic JS Bucket.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"b4190000-8f37-11e7-9fbe-ad48cde7c48e-joel-filipe-171928.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/b4190000-8f37-11e7-9fbe-ad48cde7c48e-joel-filipe-171928.jpg","imgix_url":"https://imgix.cosmicjs.com/b4190000-8f37-11e7-9fbe-ad48cde7c48e-joel-filipe-171928.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-09-01T16:13:04.978Z","created_by":"5716b504e9c686d006000073","created":"2017-09-01T16:13:04.978Z","status":"published","modified_at":"2020-08-10T14:04:22.001Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>Object Pagination is now live in your Cosmic JS Bucket.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/b4190000-8f37-11e7-9fbe-ad48cde7c48e-joel-filipe-171928.jpg","imgix_url":"https://imgix.cosmicjs.com/b4190000-8f37-11e7-9fbe-ad48cde7c48e-joel-filipe-171928.jpg"}}},{"_id":"59a83d3a5b88f0ba07001097","order":104,"slug":"how-to-build-a-portfolio-platform-app-using-angularjs","title":"How to Build a Portfolio Platform App Using AngularJS","content":"<p><img src=\"https://cosmicjs.imgix.net/01c6d6f0-8e6c-11e7-9078-6b038fb360fb-nirzar-pangarkar-798.jpg?w=1000\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>In this tutorial I&#39;m going to show you how to create a &quot;Portfolio Platform&quot; app using AngularJS, a little bit of Node, and Cosmic. &nbsp;At the end of the tutorial we will have a platform that enables management of multiple portfolio\r\nwebsites. &nbsp; Users can login and manage their portfolio website. &nbsp;The admin can manage multiple users from the Cosmic Dashboard. &nbsp;Let&#39;s get started.</p><h2>TL;DR</h2><p><a href=\"https://github.com/cosmicjs/portfolio-platform\" rel=\"noopener noreferrer\" target=\"_blank\">Download the GitHub repo.</a><br><a href=\"https://www.cosmicjs.com/apps/portfolio-platform/demo\">Check out the demo.</a><br><a href=\"https://www.cosmicjs.com/apps/portfolio-platform\">Install to your Cosmic Bucket in a few clicks.</a></p><h2>Getting Started:</h2><p>First, let&rsquo;s make a new directory to build our project in and lets also make a package.json file.</p><pre class=\"prism\">mkdir cosmicapp-porfolio</pre><pre class=\"prism\">cosmicapp-porfolio$ touch package.json</pre><p>Now, in your package.json, copy and paste the code below:</p><pre class=\"prism\">//cosmicapp-porfolio/package.json\r\n{\r\n  &quot;name&quot;: &quot;photography-portfolio-app&quot;,\r\n  &quot;version&quot;: &quot;1.0.0&quot;,\r\n  &quot;main&quot;: &quot;app-server.js&quot;,\r\n  &quot;engines&quot;: {\r\n    &quot;node&quot;: &quot;4.1.2&quot;,\r\n    &quot;npm&quot;: &quot;3.5.2&quot;\r\n  },\r\n  &quot;description&quot;: &quot;&quot;,\r\n  &quot;dependencies&quot;: {\r\n    &quot;body-parser&quot;: &quot;^1.17.2&quot;,\r\n    &quot;bower&quot;: &quot;^1.7.7&quot;,\r\n    &quot;buffer-to-vinyl&quot;: &quot;^1.1.0&quot;,\r\n    &quot;express&quot;: &quot;^4.13.3&quot;,\r\n    &quot;gulp&quot;: &quot;^3.9.1&quot;,\r\n    &quot;gulp-autoprefixer&quot;: &quot;^3.1.0&quot;,\r\n    &quot;gulp-concat&quot;: &quot;^2.6.0&quot;,\r\n    &quot;gulp-concat-css&quot;: &quot;^2.2.0&quot;,\r\n    &quot;gulp-env&quot;: &quot;^0.4.0&quot;,\r\n    &quot;gulp-minify-css&quot;: &quot;^1.2.4&quot;,\r\n    &quot;gulp-ng-config&quot;: &quot;^1.4.0&quot;,\r\n    &quot;gulp-npm-script-sync&quot;: &quot;^1.1.0&quot;,\r\n    &quot;gulp-webserver&quot;: &quot;^0.9.1&quot;,\r\n    &quot;http-server&quot;: &quot;^0.9.0&quot;,\r\n    &quot;stripe&quot;: &quot;^4.22.0&quot;,\r\n    &quot;wiredep&quot;: &quot;^3.0.0&quot;\r\n  },\r\n  &quot;scripts&quot;: {\r\n    &quot;postinstall&quot;: &quot;bower install &amp;&amp; gulp config &amp;&amp; gulp js&quot;,\r\n    &quot;start&quot;: &quot;npm run production&quot;,\r\n    &quot;production&quot;: &quot;node app-server.js&quot;,\r\n    &quot;gulp&quot;: &quot;gulp&quot;\r\n  },\r\n  &quot;author&quot;: &quot;&quot;,\r\n  &quot;license&quot;: &quot;ISC&quot;,\r\n  &quot;devDependencies&quot;: {\r\n    &quot;gulp-npm-script-sync&quot;: &quot;^1.1.0&quot;,\r\n    &quot;gulp-remote-src&quot;: &quot;^0.4.2&quot;\r\n  }\r\n}\r\n            </pre><p>Second, let&rsquo;s make a bower.json file.</p><pre class=\"prism\">cosmicapp-porfolio$ touch bower.json</pre><p>Now, in your bower.json, copy and paste the code below:</p><pre class=\"prism\">//cosmicapp-porfolio/bower.json\r\n{\r\n  &quot;name&quot;: &quot;photography-portfolio-app&quot;,\r\n  &quot;description&quot;: &quot;Photography Portfolio App&quot;,\r\n  &quot;version&quot;: &quot;0.0.0&quot;,\r\n  &quot;homepage&quot;: &quot;https://github.com/kutsaniuk/cosmicapp-porfolio&quot;,\r\n  &quot;license&quot;: &quot;MIT&quot;,\r\n  &quot;private&quot;: true,\r\n  &quot;dependencies&quot;: {\r\n    &quot;angular&quot;: &quot;~1.5.x&quot;,\r\n    &quot;angular-mocks&quot;: &quot;~1.5.x&quot;,\r\n    &quot;angular-bootstrap&quot;: &quot;~1.1.x&quot;,\r\n    &quot;angular-cookies&quot;: &quot;~1.5.x&quot;,\r\n    &quot;angular-route&quot;: &quot;~1.5.x&quot;,\r\n    &quot;angular-ui-router&quot;: &quot;0.2.x&quot;,\r\n    &quot;angular-resource&quot;: &quot;1.5.x&quot;,\r\n    &quot;angular-animate&quot;: &quot;~1.5.x&quot;,\r\n    &quot;ng-dialog&quot;: &quot;0.6.1&quot;,\r\n    &quot;bootstrap&quot;: &quot;3.3.x&quot;,\r\n    &quot;cr-acl&quot;: &quot;&quot;,\r\n    &quot;angular-chosen-localytics&quot;: &quot;*&quot;,\r\n    &quot;bootstrap-chosen&quot;: &quot;*&quot;,\r\n    &quot;ng-flow&quot;: &quot;^2.7.4&quot;,\r\n    &quot;angular-mask&quot;: &quot;*&quot;,\r\n    &quot;checklist-model&quot;: &quot;0.9.0&quot;,\r\n    &quot;angular-ui-notification&quot;: &quot;^0.2.0&quot;,\r\n    &quot;angular-ui-calendar&quot;: &quot;^1.0.2&quot;,\r\n    &quot;angular-ui-switch&quot;: &quot;^0.1.1&quot;,\r\n    &quot;ng-scrollbars&quot;: &quot;^0.0.11&quot;,\r\n    &quot;jquery.scrollbar&quot;: &quot;*&quot;,\r\n    &quot;angular-flash-alert&quot;: &quot;^2.4.0&quot;,\r\n    &quot;components-font-awesome&quot;: &quot;^4.7.0&quot;,\r\n    &quot;angular-loading-bar&quot;: &quot;^0.9.0&quot;,\r\n    &quot;angular-environment&quot;: &quot;^1.0.8&quot;,\r\n    &quot;angular-dragdrop&quot;: &quot;&quot;,\r\n    &quot;angular-sanitize&quot;: &quot;1.5.*&quot;,\r\n    &quot;angular-drag-and-drop-directives&quot;: &quot;&quot;,\r\n    &quot;jquery-ui-touch-punch&quot;: &quot;&quot;,\r\n    &quot;angular-touch&quot;:&quot;1.5.*&quot;,\r\n    &quot;textAngular&quot;:&quot;1.5.*&quot;\r\n  },\r\n  &quot;resolutions&quot;: {\r\n    &quot;angular&quot;: &quot;~1.5.x&quot;\r\n  },\r\n  &quot;devDependencies&quot;: {\r\n    &quot;cr-acl&quot;: &quot;^0.5.0&quot;\r\n  }\r\n}\r\n            </pre><p>Config app server:</p><pre class=\"prism\">cosmicapp-porfolio$ touch app-server.js</pre><pre class=\"prism\">//cosmicapp-porfolio/app-server.js\r\nvar express = require(&#39;express&#39;);\r\nvar bodyParser = require(&#39;body-parser&#39;);\r\nvar app = express();\r\napp.set(&#39;port&#39;, process.env.PORT || 3000)\r\napp.use(express.static(__dirname))\r\napp.use(bodyParser.json())\r\nvar http = require(&#39;http&#39;).Server(app)\r\n// Route\r\napp.get(&#39;/&#39;, (req, res) =&gt; {\r\n  res.sendFile(__dirname + &#39;/index.html&#39;);\r\n})\r\nhttp.listen(app.get(&#39;port&#39;), () =&gt; {\r\n  console.log(&#39;Photography Portfolio App listening on &#39; + app.get(&#39;port&#39;))\r\n})\r\n            </pre><h2>What we&#39;re installing and why:</h2><ol><li>We&#39;re going to use the AngularJS framework to build Single-page application</li><li>We&#39;re installing angular-ui-router for create multi views.</li><li>We are going to use gulp for build all js and css files into one file.</li></ol><h2>Building our app:</h2><p>Now we&#39;re going to build out our file structure a bit more so that we can organize our angular modules and js files. This is what our cosmicapp-porfolio directory should look like:</p><pre class=\"prism\">cosmicapp-porfolio\r\n|----app\r\n|       |----auth\r\n|                 |----auth.ctrl.js\r\n|                 |----auth.service.js\r\n|       |----config\r\n|                 |----config.js\r\n|       |----portfolio\r\n|                 |----about\r\n|                           |----portfolio.about.mdl.js\r\n|                 |----contact\r\n|                           |----portfolio.contact.mdl.js\r\n|                 |----intro\r\n|                           |----portfolio.intro.mdl.js\r\n|                 |----projects\r\n|                           |----add\r\n|                                   |----portfolio.projects.add.ctrl.js\r\n|                           |----edit\r\n|                                   |----portfolio.projects.edit.ctrl.js\r\n|                           |----portfolio.projects.mdl.js\r\n|                 |----settings\r\n|                           |----portfolio.settings.ctrl.js\r\n|                           |----portfolio.settings.mdl.js\r\n|                 |----portfolio.ctrl.js\r\n|                 |----portfolio.mdl.js\r\n|                 |----portfolio.service.js\r\n|       |----user\r\n|                 |----user.service.js\r\n|       |----main.mdl.js\r\n|----dist\r\n|       |----css\r\n|       |----img\r\n|       |----js\r\n|----css\r\n|----views\r\n|----gulpfile.js\r\n|----app-server.js\r\n|----bower.json\r\n|----package.json\r\n            </pre><p>Now we we will set up our index.html. Copy and paste the following code into your index.html file:</p><pre class=\"prism\">&lt;!DOCTYPE html&gt;\r\n&lt;html lang=&quot;en&quot; ng-app=&quot;main&quot;&gt;\r\n&lt;head&gt;\r\n    &lt;meta charset=&quot;utf-8&quot;&gt;\r\n    &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;\r\n    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;\r\n    &lt;meta name=&quot;description&quot; content=&quot;&quot;&gt;\r\n    &lt;meta name=&quot;author&quot; content=&quot;&quot;&gt;\r\n\r\n    &lt;title&gt;Photography Portfolio App&lt;/title&gt;\r\n\r\n    &lt;!-- bower:css --&gt;\r\n    &lt;!-- endbower --&gt;\r\n\r\n    &lt;!-- Bootstrap Core CSS --&gt;\r\n    &lt;link href=&quot;bower_components/bootstrap/dist/css/bootstrap.min.css&quot; rel=&quot;stylesheet&quot;&gt;\r\n\r\n    &lt;!-- Custom CSS --&gt;\r\n\r\n    &lt;link href=&quot;dist/css/main.min.css&quot; rel=&quot;stylesheet&quot;&gt;\r\n\r\n\r\n    &lt;!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --&gt;\r\n    &lt;!-- WARNING: Respond.js doesn&#39;t work if you view the page via file:// --&gt;\r\n    &lt;!--[if lt IE 9]&gt;\r\n    &lt;script src=&quot;https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js&quot;&gt;&lt;/script&gt;\r\n    &lt;script src=&quot;https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js&quot;&gt;&lt;/script&gt;\r\n    &lt;![endif]--&gt;\r\n\r\n&lt;/head&gt;\r\n&lt;body&gt;\r\n\r\n&lt;div ui-view&gt;&lt;/div&gt;\r\n\r\n&lt;!-- bower:js --&gt;\r\n&lt;!-- endbower --&gt;\r\n\r\n&lt;script src=&quot;dist/js/main.js&quot;&gt;&lt;/script&gt;\r\n&lt;/body&gt;\r\n&lt;/html&gt;\r\n            </pre><p>Here, we are going to target our &quot;root&quot; view to place our angular modules in later. The main.js file located in our dist directory is what our gulpfile.js file will spit out after bundling all of our angular modules Now, set up our gulpfile.js\r\nfile to bundle all of our js files and export that bundle file to our dist directory. Copy the following code into your gulpfile.js file:</p><pre class=\"prism\">//cosmicapp-porfolio/gulpfile.js\r\n&#39;use strict&#39;;\r\n\r\n&#39;use strict&#39;;\r\n\r\nvar gulp = require(&#39;gulp&#39;),\r\n    webserver = require(&#39;gulp-webserver&#39;),\r\n    minifyCSS = require(&#39;gulp-minify-css&#39;),\r\n    concat = require(&#39;gulp-concat&#39;),\r\n    wiredep = require(&#39;wiredep&#39;).stream,\r\n    gulpNgConfig = require(&#39;gulp-ng-config&#39;),\r\n    autoprefixer = require(&#39;gulp-autoprefixer&#39;),\r\n    b2v = require(&#39;buffer-to-vinyl&#39;),\r\n    sync = require(&#39;gulp-npm-script-sync&#39;);\r\n\r\nsync(gulp);\r\n\r\ngulp.task(&#39;css&#39;, function () {\r\n  return gulp.src(&#39;css/**/*.css&#39;)\r\n    .pipe(minifyCSS())\r\n    .pipe(concat(&#39;main.min.css&#39;))\r\n    .pipe(autoprefixer())\r\n    .pipe(gulp.dest(&#39;dist/css&#39;));\r\n});\r\n\r\ngulp.task(&#39;js&#39;, function() {\r\n    return gulp.src(&#39;app/**/**/*.js&#39;)\r\n        .pipe(concat(&#39;main.js&#39;))\r\n        .pipe(gulp.dest(&#39;dist/js/&#39;));\r\n});\r\n\r\ngulp.task(&#39;config&#39;, function () {\r\n    const json = JSON.stringify({\r\n        BUCKET_SLUG: process.env.COSMIC_BUCKET,\r\n        MEDIA_URL: &#39;https://api.cosmicjs.com/v1/&#39; + process.env.COSMIC_BUCKET + &#39;/media&#39;,\r\n        URL: &#39;https://api.cosmicjs.com/v1/&#39;,\r\n        READ_KEY: process.env.COSMIC_READ_KEY || &#39;&#39;,\r\n        WRITE_KEY: process.env.COSMIC_WRITE_KEY || &#39;&#39;,\r\n        DEFAULT_IMAGE: process.env.DEFAULT_IMAGE || &#39;&#39;\r\n    });\r\n    return b2v.stream(new Buffer(json), &#39;config.js&#39;)\r\n        .pipe(gulpNgConfig(&#39;config&#39;))\r\n        .pipe(gulp.dest(&#39;app/config&#39;));\r\n});\r\n\r\ngulp.task(&#39;default&#39;, function () {\r\n  gulp.watch(&#39;css/**/*.css&#39;, [&#39;css&#39;]);\r\n  gulp.watch(&#39;app/**/**/*.js&#39;, [&#39;js&#39;]);\r\n  gulp.watch(&#39;bower.json&#39;, [&#39;bower&#39;]);\r\n});\r\n\r\ngulp.task(&#39;bower&#39;, function () {\r\n  gulp.src(&#39;index.html&#39;)\r\n    .pipe(wiredep({\r\n      directory: &#39;bower_components&#39;\r\n    }))\r\n    .pipe(gulp.dest(&#39;&#39;));\r\n});\r\n            </pre><p>After that we can create main module. Copy and paste the following code into your main.mdl.js file:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;, [\r\n            &#39;ui.router&#39;,\r\n            &#39;ui.bootstrap&#39;,\r\n            &#39;ngMask&#39;,\r\n            &#39;ngCookies&#39;,\r\n            &#39;ngRoute&#39;,\r\n            &#39;ngDialog&#39;,\r\n            &#39;cr.acl&#39;,\r\n            &#39;ui-notification&#39;,\r\n            &#39;ngFlash&#39;,\r\n            &#39;ngAnimate&#39;,\r\n            &#39;textAngular&#39;,\r\n            &#39;flow&#39;,\r\n            &#39;angular-loading-bar&#39;,\r\n            &#39;ngDragDrop&#39;,\r\n            &#39;ngSanitize&#39;,\r\n            &#39;ngTouch&#39;,\r\n\r\n            &#39;portfolio&#39;,\r\n\r\n            &#39;config&#39;\r\n        ])\r\n        .config(config)\r\n        .run(run);\r\n\r\n    config.$inject = [&#39;$stateProvider&#39;, &#39;$urlRouterProvider&#39;, &#39;cfpLoadingBarProvider&#39;, &#39;NotificationProvider&#39;, &#39;$locationProvider&#39;];\r\n    function config($stateProvider, $urlRouterProvider, cfpLoadingBarProvider, NotificationProvider, $locationProvider) {\r\n        cfpLoadingBarProvider.includeSpinner = false;\r\n\r\n        NotificationProvider.setOptions({\r\n            startTop: 25,\r\n            startRight: 25,\r\n            verticalSpacing: 20,\r\n            horizontalSpacing: 20,\r\n            positionX: &#39;right&#39;,\r\n            positionY: &#39;bottom&#39;\r\n        });\r\n\r\n        $urlRouterProvider.otherwise(function ($injector) {\r\n            var $state = $injector.get(&quot;$state&quot;);\r\n            $state.go(&#39;login&#39;);\r\n        });\r\n\r\n        $stateProvider\r\n            .state(&#39;blog&#39;, {\r\n                url: &#39;/blog&#39;,\r\n                templateUrl: &#39;../blog.html&#39;\r\n            })\r\n            .state(&#39;login&#39;, {\r\n                url: &#39;/login&#39;,\r\n                templateUrl: &#39;../views/auth/login.html&#39;,\r\n                controller: &#39;AuthCtrl as auth&#39;,\r\n                onEnter: [&#39;AuthService&#39;, &#39;crAcl&#39;, function(AuthService, crAcl) {\r\n                    AuthService.clearCredentials();\r\n                    crAcl.setRole();\r\n                }],\r\n                data: {\r\n                    is_granted: [&#39;ROLE_GUEST&#39;]\r\n                }\r\n            })\r\n            .state(&#39;register&#39;, {\r\n                url: &#39;/register&#39;,\r\n                templateUrl: &#39;../views/auth/register.html&#39;,\r\n                controller: &#39;AuthCtrl as auth&#39;,\r\n                onEnter: [&#39;AuthService&#39;, &#39;crAcl&#39;, function(AuthService, crAcl) {\r\n                    AuthService.clearCredentials();\r\n                    crAcl.setRole();\r\n                }],\r\n                data: {\r\n                    is_granted: [&#39;ROLE_GUEST&#39;]\r\n                }\r\n            });\r\n\r\n    }\r\n\r\n    run.$inject = [&#39;$rootScope&#39;, &#39;$cookieStore&#39;, &#39;$state&#39;, &#39;crAcl&#39;];\r\n    function run($rootScope, $cookieStore, $state, crAcl) {\r\n\r\n        $rootScope.globals = $cookieStore.get(&#39;globals&#39;) || {};\r\n\r\n        crAcl\r\n            .setInheritanceRoles({\r\n                &#39;ROLE_ADMIN&#39;: [&#39;ROLE_ADMIN&#39;, &#39;ROLE_GUEST&#39;],\r\n                &#39;ROLE_USER&#39;: [&#39;ROLE_USER&#39;, &#39;ROLE_GUEST&#39;],\r\n                &#39;ROLE_GUEST&#39;: [&#39;ROLE_GUEST&#39;]\r\n            });\r\n\r\n        crAcl\r\n            .setRedirect(&#39;login&#39;);\r\n\r\n        if ($rootScope.globals.currentUser) {\r\n            crAcl.setRole($rootScope.globals.currentUser.role);\r\n            $state.go(&#39;portfolio.intro&#39;);\r\n        }\r\n        else {\r\n            crAcl.setRole();\r\n        }\r\n\r\n    }\r\n\r\n})();\r\n             </pre><p>Now we we will set up our Auth Controller. Copy and paste the following code into your auth.ctrl.js file:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .controller(&#39;AuthCtrl&#39;, AuthCtrl);\r\n\r\n    function AuthCtrl(crAcl, $state, AuthService, Flash, $log) {\r\n        var vm = this;\r\n\r\n        vm.login = login;\r\n        vm.register = register;\r\n\r\n        vm.loginForm = null;\r\n\r\n        vm.credentials = {};\r\n        vm.user = {};\r\n\r\n        function login(credentials) {\r\n            function success(response) {\r\n                function success(response) {\r\n                    if (response.data.status !== &#39;empty&#39;) {\r\n                        var currentUser = response.data.objects[0];\r\n\r\n                        crAcl.setRole(&#39;ROLE_USER&#39;);\r\n                        AuthService.setCredentials({\r\n                            slug: currentUser.slug,\r\n                            first_name: currentUser.metadata.first_name,\r\n                            last_name: currentUser.metadata.last_name,\r\n                            email: currentUser.metadata.email,\r\n                            role: &#39;ROLE_USER&#39;\r\n                        });\r\n                        $state.go(&#39;portfolio.intro&#39;, {slug: currentUser.slug});\r\n                    }\r\n                    else\r\n                        Flash.create(&#39;danger&#39;, &#39;Incorrect username or password&#39;);\r\n                }\r\n\r\n                function failed(response) {\r\n                    $log.error(response);\r\n                }\r\n\r\n                if (response.data.status !== &#39;empty&#39;)\r\n                    AuthService\r\n                        .checkPassword(credentials)\r\n                        .then(success, failed);\r\n                else\r\n                    Flash.create(&#39;danger&#39;, &#39;Incorrect username or password&#39;);\r\n\r\n                $log.info(response);\r\n            }\r\n\r\n            function failed(response) {\r\n                $log.error(response);\r\n            }\r\n\r\n            if (vm.loginForm.$valid)\r\n                AuthService\r\n                    .checkUsername(credentials)\r\n                    .then(success, failed);\r\n        }\r\n\r\n        function register(credentials) {\r\n            function success(response) {\r\n                login(credentials);\r\n\r\n                $log.info(response);\r\n            }\r\n\r\n            function failed(response) {\r\n                $log.error(response);\r\n            }\r\n\r\n            if (vm.loginForm.$valid)\r\n                AuthService\r\n                    .register(credentials)\r\n                    .then(success, failed);\r\n        }\r\n\r\n    }\r\n})();\r\n            </pre><p>Create Auth Service, copy and paste the code below:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .service(&#39;AuthService&#39;, function ($http,\r\n                                          $cookieStore,\r\n                                          $q,\r\n                                          $rootScope,\r\n                                          URL, BUCKET_SLUG, READ_KEY, WRITE_KEY) {\r\n            var authService = this;\r\n            $http.defaults.headers.common[&#39;X-Requested-With&#39;] = &#39;XMLHttpRequest&#39;;\r\n\r\n            authService.checkUsername = function (credentials) {\r\n                return $http.get(URL + BUCKET_SLUG + &#39;/object-type/users/search&#39;, {\r\n                    params: {\r\n                        metafield_key: &#39;email&#39;,\r\n                        metafield_value_has: credentials.email,\r\n                        limit: 1,\r\n                        read_key: READ_KEY\r\n                    }\r\n                });\r\n            };\r\n            authService.checkPassword = function (credentials) {\r\n                return $http.get(URL + BUCKET_SLUG + &#39;/object-type/users/search&#39;, {\r\n                    ignoreLoadingBar: true,\r\n                    params: {\r\n                        metafield_key: &#39;password&#39;,\r\n                        metafield_value: credentials.password,\r\n                        limit: 1,\r\n                        read_key: READ_KEY\r\n                    }\r\n                });\r\n            };\r\n            this.register = function (user) {\r\n                return $http.post(URL + BUCKET_SLUG + &#39;/add-object&#39;, {\r\n                        title: user.first_name + &#39; &#39; + user.last_name,\r\n                        type_slug: &#39;users&#39;,\r\n                        slug: user.username,\r\n                        metafields: [\r\n                            {\r\n                                key: &quot;first_name&quot;,\r\n                                type: &quot;text&quot;,\r\n                                value: user.first_name\r\n                            },\r\n                            {\r\n                                key: &quot;last_name&quot;,\r\n                                type: &quot;text&quot;,\r\n                                value: user.last_name\r\n                            },\r\n                            {\r\n                                key: &quot;email&quot;,\r\n                                type: &quot;text&quot;,\r\n                                value: user.email\r\n                            },\r\n                            {\r\n                                key: &quot;password&quot;,\r\n                                type: &quot;text&quot;,\r\n                                value: user.password\r\n                            },\r\n                            {\r\n                                key: &quot;intro&quot;,\r\n                                type: &quot;html-textarea&quot;,\r\n                                value: null\r\n                            },\r\n                            {\r\n                                key: &quot;about&quot;,\r\n                                type: &quot;html-textarea&quot;,\r\n                                value: null\r\n                            },\r\n                            {\r\n                                key: &quot;contact&quot;,\r\n                                type: &quot;html-textarea&quot;,\r\n                                value: null\r\n                            },\r\n                            {\r\n                                key: &quot;projects&quot;,\r\n                                type: &quot;objects&quot;,\r\n                                objects: [],\r\n                                object_type: &quot;projects&quot;,\r\n                                value: null\r\n                            }\r\n                        ],\r\n\r\n                        write_key: WRITE_KEY\r\n                    }, { ignoreLoadingBar: false });\r\n            };\r\n            authService.setCredentials = function (user) {\r\n                $rootScope.globals = {\r\n                    currentUser: user\r\n                };\r\n\r\n                $cookieStore.put(&#39;globals&#39;, $rootScope.globals);\r\n            };\r\n            authService.clearCredentials = function () {\r\n                var deferred = $q.defer();\r\n                $cookieStore.remove(&#39;globals&#39;);\r\n\r\n                if (!$cookieStore.get(&#39;globals&#39;)) {\r\n                    $rootScope.globals = {};\r\n                    deferred.resolve(&#39;Credentials clear success&#39;);\r\n                } else {\r\n                    deferred.reject(&#39;Can\\&#39;t clear credentials&#39;);\r\n                }\r\n\r\n                return deferred.promise;\r\n            };\r\n        });\r\n})();\r\n            </pre><h2>What&#39;s going on here:</h2><ol><li>We are using the ui-router for config routes.</li><li>We created Auth Service for our asynchronous calls to our Cosmic API.</li><li>We created Auth Controller for checking credentials and registration users.</li></ol><p>Create User Service for get and update User, copy and paste the code below:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .service(&#39;UserService&#39;, function ($http,\r\n                                          $cookieStore,\r\n                                          $q,\r\n                                          $rootScope,\r\n                                          URL, BUCKET_SLUG, READ_KEY, WRITE_KEY) {\r\n            $http.defaults.headers.common[&#39;X-Requested-With&#39;] = &#39;XMLHttpRequest&#39;;\r\n\r\n            this.getCurrentUser = function (ignoreLoadingBar) {\r\n                return $http.get(URL + BUCKET_SLUG + &#39;/object/&#39; + $rootScope.globals.currentUser.slug, {\r\n                    ignoreLoadingBar: ignoreLoadingBar,\r\n                    params: {\r\n                        read_key: READ_KEY\r\n                    }\r\n                });\r\n            };\r\n            this.getUser = function (slug, ignoreLoadingBar) {\r\n                return $http.get(URL + BUCKET_SLUG + &#39;/object/&#39; + slug, {\r\n                    ignoreLoadingBar: ignoreLoadingBar,\r\n                    params: {\r\n                        read_key: READ_KEY\r\n                    }\r\n                });\r\n            };\r\n            this.updateUser = function (user) {\r\n                user.write_key = WRITE_KEY;\r\n\r\n                return $http.put(URL + BUCKET_SLUG + &#39;/edit-object&#39;, user, {\r\n                    ignoreLoadingBar: false\r\n                });\r\n            };\r\n\r\n        });\r\n})();\r\n            </pre><p>Create Portfolio Service for get and update, copy and paste the code below:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .service(&#39;PortfolioService&#39;, function ($http,\r\n                                          $cookieStore,\r\n                                          $q,\r\n                                          $rootScope,\r\n                                          URL, BUCKET_SLUG, READ_KEY, WRITE_KEY, MEDIA_URL) {\r\n\r\n            $http.defaults.headers.common[&#39;X-Requested-With&#39;] = &#39;XMLHttpRequest&#39;;\r\n\r\n            this.getPortfolioBySlug = function (slug) {\r\n                return $http.get(URL + BUCKET_SLUG + &#39;/object/&#39; + slug, {\r\n                    params: {\r\n                        read_key: READ_KEY\r\n                    }\r\n                });\r\n            };\r\n\r\n            this.updatePortfolio = function (portfolio) {\r\n                portfolio.write_key = WRITE_KEY;\r\n\r\n                return $http.put(URL + BUCKET_SLUG + &#39;/edit-object&#39;, portfolio);\r\n            };\r\n\r\n            this.upload = function (file) {\r\n                var fd = new FormData();\r\n                fd.append(&#39;media&#39;, file);\r\n                fd.append(&#39;write_key&#39;, WRITE_KEY);\r\n\r\n                var defer = $q.defer();\r\n\r\n                var xhttp = new XMLHttpRequest();\r\n\r\n                xhttp.upload.addEventListener(&quot;progress&quot;,function (e) {\r\n                    defer.notify(parseInt(e.loaded * 100 / e.total));\r\n                });\r\n                xhttp.upload.addEventListener(&quot;error&quot;,function (e) {\r\n                    defer.reject(e);\r\n                });\r\n\r\n                xhttp.onreadystatechange = function() {\r\n                    if (xhttp.readyState === 4) {\r\n                        defer.resolve(JSON.parse(xhttp.response)); //Outputs a DOMString by default\r\n                    }\r\n                };\r\n\r\n                xhttp.open(&quot;post&quot;, MEDIA_URL, true);\r\n\r\n                xhttp.send(fd);\r\n\r\n                return defer.promise;\r\n            }\r\n        });\r\n})();\r\n            </pre><p>Create Portfolio Controller for update and add, edit projects, copy and paste the code below:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .controller(&#39;PortfolioCtrl&#39;, PortfolioCtrl);\r\n\r\n    function PortfolioCtrl($rootScope, $stateParams, $sce, $scope, $state, ngDialog, AuthService, UserService, PortfolioService, $log) {\r\n        var vm = this;\r\n\r\n        getPortfolio();\r\n\r\n        vm.currentUser = $rootScope.globals.currentUser ? $rootScope.globals.currentUser : getUser();\r\n\r\n        vm.logout = logout;\r\n        vm.updatePortfolio = updatePortfolio;\r\n        vm.openAddProjectDialog = openAddProjectDialog;\r\n        vm.openEditProjectDialog = openEditProjectDialog;\r\n\r\n        vm.portfolio = {};\r\n\r\n        vm.toolbarEditor = [\r\n            [&#39;h1&#39;, &#39;h2&#39;, &#39;h3&#39;, &#39;h4&#39;, &#39;h5&#39;, &#39;h6&#39;, &#39;p&#39;, &#39;bold&#39;, &#39;italics&#39;, &#39;underline&#39;, &#39;justifyLeft&#39;, &#39;justifyCenter&#39;, &#39;justifyRight&#39;]\r\n        ];\r\n\r\n        function chunk(arr, size) {\r\n            var newArr = [];\r\n            for (var i = 0; i &lt; arr.length; i += size) {\r\n                newArr.push(arr.slice(i, i + size));\r\n            }\r\n            return newArr;\r\n        }\r\n\r\n        function getUser() {\r\n            function success(response) {\r\n                var currentUser = response.data.object;\r\n\r\n                vm.currentUser = {\r\n                    slug: currentUser.slug,\r\n                    first_name: currentUser.metadata.first_name,\r\n                    last_name: currentUser.metadata.last_name,\r\n                    email: currentUser.metadata.email\r\n                };\r\n            }\r\n\r\n            function failed(response) {\r\n                $log.error(response);\r\n            }\r\n\r\n            UserService\r\n                .getUser($stateParams.slug, true)\r\n                .then(success, failed);\r\n        }\r\n\r\n        function getPortfolio() {\r\n            function success(response) {\r\n                vm.portfolio = response.data.object;\r\n\r\n                if (Array.isArray(vm.portfolio.metadata.projects))\r\n                    vm.projectsChunk = chunk(vm.portfolio.metadata.projects, 2);\r\n                else\r\n                    vm.projectsChunk = [];\r\n\r\n                vm.contact = $sce.trustAsResourceUrl(&#39;mailto:&#39; + vm.currentUser.email);\r\n\r\n                $log.info(response);\r\n            }\r\n\r\n            function failed(response) {\r\n                $log.error(response);\r\n            }\r\n\r\n            PortfolioService\r\n                .getPortfolioBySlug($stateParams.slug)\r\n                .then(success, failed);\r\n        }\r\n\r\n        function updatePortfolio() {\r\n            function success(response) {\r\n                getPortfolio();\r\n\r\n                $log.info(response);\r\n            }\r\n\r\n            function failed(response) {\r\n                $log.error(response);\r\n            }\r\n\r\n            PortfolioService\r\n                .updatePortfolio(vm.portfolio)\r\n                .then(success, failed);\r\n        }\r\n\r\n        function openAddProjectDialog(slug) {\r\n\r\n            var options = {\r\n                templateUrl: &#39;../views/portfolio/portfolio.project.edit.html&#39;,\r\n                showClose: true,\r\n                controller: &#39;PortfolioProjectsAddCtrl as vm&#39;\r\n            };\r\n\r\n            ngDialog.open(options).closePromise.finally(function () {\r\n                getPortfolio();\r\n            });\r\n        }\r\n\r\n        function openEditProjectDialog(slug) {\r\n\r\n            var options = {\r\n                templateUrl: &#39;../views/portfolio/portfolio.project.edit.html&#39;,\r\n                showClose: true,\r\n                controller: &#39;PortfolioProjectsEditCtrl as vm&#39;,\r\n                data: {\r\n                    slug: slug\r\n                }\r\n            };\r\n\r\n            ngDialog.open(options).closePromise.finally(function () {\r\n                getPortfolio();\r\n            });\r\n        }\r\n\r\n        function logout() {\r\n            function success(response) {\r\n                $state.go(&#39;auth&#39;);\r\n\r\n                $log.info(response);\r\n            }\r\n\r\n            function failed(response) {\r\n                $log.error(response);\r\n            }\r\n\r\n            AuthService\r\n                .clearCredentials()\r\n                .then(success, failed);\r\n        }\r\n\r\n        $scope.state = $state;\r\n\r\n    }\r\n})();\r\n            </pre><p>Create Portfolio Module, copy and paste the code below:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;portfolio&#39;, [\r\n            &#39;portfolio.intro&#39;,\r\n            &#39;portfolio.projects&#39;,\r\n            &#39;portfolio.about&#39;,\r\n            &#39;portfolio.contact&#39;,\r\n            &#39;portfolio.settings&#39;\r\n        ])\r\n        .config(config);\r\n\r\n    config.$inject = [&#39;$stateProvider&#39;];\r\n    function config($stateProvider) {\r\n\r\n        $stateProvider\r\n            .state(&#39;portfolio&#39;, {\r\n                url: &#39;/:slug/&#39;,\r\n                abstract: true,\r\n                templateUrl: &#39;../views/portfolio/portfolio.html&#39;,\r\n                controller: &#39;PortfolioCtrl as vm&#39;,\r\n                data: {\r\n                    is_granted: [&#39;ROLE_USER&#39;, &#39;ROLE_GUEST&#39;]\r\n                }\r\n            });\r\n    }\r\n})();\r\n            </pre><h2>What&#39;s going on here:</h2><ol><li>We created Portfolio Service for get and update.</li><li>We created Portfolio Controller for update and add, edit project.</li><li>We created Portfolio Module.</li></ol><p>Create Author Controller for getting information of author, copy and paste the code below:</p><h2>Conclusion:</h2><p>We were able to consume the Cosmic API with our actions and dispatcher functions. I hope you enjoyed this tutorial as much as I did, if you have any questions <a href=\"https://twitter.com/cosmic_js\">reach out to us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\">join our community on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5914999aa57d9d4b390034d5","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5914999aa57d9d4b390034d5","slug":"dmytro-kutsaniuk","title":"Dmytro Kutsaniuk","content":"","metafields":[{"value":"e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg","imgix_url":"https://imgix.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-11T17:04:26.061Z","created_by":"5357ef811693be2118000001","created":"2017-05-11T17:04:26.061Z","status":"published"}},{"value":"<p>At the end of the tutorial we will have a platform that enables management of multiple portfolio websites. &nbsp; Users can login and manage their portfolio website. &nbsp;The admin can manage multiple users from the Cosmic Dashboard. &nbsp;Let&#39;s get started.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"cf142be0-8e6b-11e7-82dc-39c3e4709045-nirzar-pangarkar-798.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/cf142be0-8e6b-11e7-82dc-39c3e4709045-nirzar-pangarkar-798.jpg","imgix_url":"https://imgix.cosmicjs.com/cf142be0-8e6b-11e7-82dc-39c3e4709045-nirzar-pangarkar-798.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-08-31T16:45:46.640Z","created_by":"55767c3ffbcf5cbb13000001","created":"2017-08-31T16:45:46.640Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"55767c3ffbcf5cbb13000001","publish_at":null,"metadata":{"author":{"_id":"5914999aa57d9d4b390034d5","slug":"dmytro-kutsaniuk","title":"Dmytro Kutsaniuk","content":"","metafields":[{"value":"e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg","imgix_url":"https://imgix.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-11T17:04:26.061Z","created_by":"5357ef811693be2118000001","created":"2017-05-11T17:04:26.061Z","status":"published","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg","imgix_url":"https://imgix.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg"}}},"teaser":"<p>At the end of the tutorial we will have a platform that enables management of multiple portfolio websites. &nbsp; Users can login and manage their portfolio website. &nbsp;The admin can manage multiple users from the Cosmic Dashboard. &nbsp;Let&#39;s get started.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/cf142be0-8e6b-11e7-82dc-39c3e4709045-nirzar-pangarkar-798.jpg","imgix_url":"https://imgix.cosmicjs.com/cf142be0-8e6b-11e7-82dc-39c3e4709045-nirzar-pangarkar-798.jpg"}}},{"_id":"599f2cf75f2b9d457f000a0c","order":105,"slug":"new-feature-media-metadata","title":"New Feature: Media Metadata","content":"<p>We&#39;re excited to announce you now have the ability to add metadata to your Bucket Media. &nbsp;It&#39;s easy and just takes a couple steps:<br><br>1. Go to the Media area in your Bucket located in Your Bucket Dashboard &gt; Media. &nbsp;Hover over the Media that you want to add metadata to and click &quot;Add Metadata&quot;.<br><img src=\"https://www.cosmicjs.com/uploads/6c37d590-8910-11e7-85fa-19e32a3becc0-media-metadata-table.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>2. Add your key / values to the Media and click &quot;Save Metadata&quot;.</p><p><img src=\"https://www.cosmicjs.com/uploads/74d3d050-8910-11e7-8fce-5f5cf6d6a606-media-metadata-modal.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>3. Your Media now has the metadata available via the media endpoint.<br><img src=\"https://www.cosmicjs.com/uploads/81593a40-8910-11e7-85fa-19e32a3becc0-media-metadata-api.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>This is another Community-requested feature to help you and your team Build Apps Faster. &nbsp;If you have any questions, <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">connect with us on Twitter</a> and join other members of our Community in conversation on <a href=\"https://www.cosmicjs.com/community\">our Slack channel</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>We&#39;re excited to announce you now have the ability to add metadata to your Media files. &nbsp;It&#39;s easy and just takes a few steps:</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"66fb2140-89a6-11e7-9058-37a4cf571938-metadata.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/66fb2140-89a6-11e7-9058-37a4cf571938-metadata.jpg","imgix_url":"https://imgix.cosmicjs.com/66fb2140-89a6-11e7-9058-37a4cf571938-metadata.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-08-25T19:45:59.592Z","created_by":"5716b504e9c686d006000073","created":"2017-08-25T19:45:59.592Z","status":"published","modified_at":"2020-08-10T14:04:22.001Z","modified_by":"5357ef811693be2118000001","publish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We&#39;re excited to announce you now have the ability to add metadata to your Media files. &nbsp;It&#39;s easy and just takes a few steps:</p>","featured_image":{"url":"https://cdn.cosmicjs.com/66fb2140-89a6-11e7-9058-37a4cf571938-metadata.jpg","imgix_url":"https://imgix.cosmicjs.com/66fb2140-89a6-11e7-9058-37a4cf571938-metadata.jpg"}}},{"_id":"599dcfe171c343eb6f00091d","order":106,"slug":"new-feature-scheduled-publishing","title":"New Feature: Scheduled Publishing","content":"<p>You now have the ability to schedule your Objects for automatic publishing at a later date and time. &nbsp;You will notice next to the &quot;Publish&quot; button there is now a calendar button. &nbsp;Select your preferred publish date and time, then click Save Draft and your Object will be scheduled to publish automatically.<br><br></p><p><img src=\"https://www.cosmicjs.com/uploads/baf5ccb0-8833-11e7-b9c1-7769b7341ac1-publish-later.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>If you have any questions about this new feature, <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and join the conversation with the Cosmic Community on <a href=\"https://www.cosmicjs.com/community\">our Slack channel</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>We&#39;re happy to announce that you now have the ability to publish your Objects at a later date and time.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"c4e4dee0-8834-11e7-87d1-078af47a9a3d-jeanne-rouillard-43967.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/c4e4dee0-8834-11e7-87d1-078af47a9a3d-jeanne-rouillard-43967.jpg","imgix_url":"https://imgix.cosmicjs.com/c4e4dee0-8834-11e7-87d1-078af47a9a3d-jeanne-rouillard-43967.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-08-23T18:56:33.094Z","created_by":"5357ef811693be2118000001","created":"2017-08-23T18:56:33.094Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","publish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We&#39;re happy to announce that you now have the ability to publish your Objects at a later date and time.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/c4e4dee0-8834-11e7-87d1-078af47a9a3d-jeanne-rouillard-43967.jpg","imgix_url":"https://imgix.cosmicjs.com/c4e4dee0-8834-11e7-87d1-078af47a9a3d-jeanne-rouillard-43967.jpg"}}},{"_id":"599b31e7372985c958000097","order":107,"slug":"how-to-build-a-sticky-notes-app-using-react-and-redux","title":"How to Build a Sticky Notes App Using React and Redux","content":"<p><img src=\"https://www.cosmicjs.com/uploads/ed385850-86a8-11e7-8b86-7db4f533bdd3-sticky-notes-1-tight.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>In this tutorial, I&#39;m going to show you how to create a simple Sticky Notes app using React, Redux, Selectors, Redux Sagas, a little bit of Node, and Cosmic. For the sake of understanding how to consume Restful API&rsquo;s, this tutorial will show how to make AJAX (XHR) requests to the Cosmic API in order to retrieve, add, update, and delete data/media in our Cosmic Buckets. Let&#39;s get started.</p><h2>TL;DR</h2><p><a href=\"https://github.com/cosmicjs/sticky-notes\">Download the GitHub repo</a>\r\n<a href=\"https://github.com/jazibsawar/sticky-notes/\"></a><br><a href=\"https://www.cosmicjs.com/apps/sticky-notes/demo\">Check out the demo</a></p><pre class=\"prism\">{\r\n  &quot;name&quot;: &quot;sticky-notes&quot;,\r\n  &quot;version&quot;: &quot;1.0.0&quot;,\r\n  &quot;description&quot;: &quot;Sticky Notes app built using react, redux &amp; cosmic.&quot;,\r\n  &quot;main&quot;: &quot;index.js&quot;,\r\n  &quot;scripts&quot;: {\r\n    &quot;start&quot;: &quot;npm run build; node server/index.js&quot;,\r\n    &quot;start-dev&quot;: &quot;nodemon server/index.js&quot;,\r\n    &quot;build&quot;: &quot;webpack -p&quot;,\r\n    &quot;build-dev&quot;: &quot;webpack -w&quot;,\r\n    &quot;test&quot;: &quot;echo \\&quot;Error: no test specified\\&quot; &amp;&amp; exit 1&quot;\r\n  },\r\n  &quot;repository&quot;: {\r\n    &quot;type&quot;: &quot;git&quot;,\r\n    &quot;url&quot;: &quot;git+https://github.com/jazibsawar/sticky-notes.git&quot;\r\n  },\r\n  &quot;author&quot;: &quot;Muhammad Musa&quot;,\r\n  &quot;license&quot;: &quot;ISC&quot;,\r\n  &quot;bugs&quot;: {\r\n    &quot;url&quot;: &quot;https://github.com/jazibsawar/sticky-notes/issues&quot;\r\n  },\r\n  &quot;homepage&quot;: &quot;https://github.com/jazibsawar/sticky-notes#readme&quot;,\r\n  &quot;dependencies&quot;: {\r\n    &quot;async&quot;: &quot;^2.5.0&quot;,\r\n    &quot;babel&quot;: &quot;^6.23.0&quot;,\r\n    &quot;babel-core&quot;: &quot;^6.25.0&quot;,\r\n    &quot;babel-loader&quot;: &quot;^7.1.1&quot;,\r\n    &quot;babel-plugin-transform-class-properties&quot;: &quot;^6.24.1&quot;,\r\n    &quot;babel-plugin-transform-regenerator&quot;: &quot;^6.24.1&quot;,\r\n    &quot;babel-polyfill&quot;: &quot;^6.23.0&quot;,\r\n    &quot;babel-preset-es2015&quot;: &quot;^6.24.1&quot;,\r\n    &quot;babel-preset-react&quot;: &quot;^6.24.1&quot;,\r\n    &quot;babel-preset-stage-0&quot;: &quot;^6.24.1&quot;,\r\n    &quot;body-parser&quot;: &quot;^1.17.2&quot;,\r\n    &quot;cosmicjs&quot;: &quot;^2.39.91&quot;,\r\n    &quot;express&quot;: &quot;^4.15.3&quot;,\r\n    &quot;immutable&quot;: &quot;^3.8.1&quot;,\r\n    &quot;moment&quot;: &quot;^2.18.1&quot;,\r\n    &quot;prop-types&quot;: &quot;^15.5.10&quot;,\r\n    &quot;react&quot;: &quot;^15.6.1&quot;,\r\n    &quot;react-addons-css-transition-group&quot;: &quot;^15.6.0&quot;,\r\n    &quot;react-addons-transition-group&quot;: &quot;^15.6.0&quot;,\r\n    &quot;react-color&quot;: &quot;^2.13.4&quot;,\r\n    &quot;react-dom&quot;: &quot;^15.6.1&quot;,\r\n    &quot;react-modal-dialog&quot;: &quot;^4.0.7&quot;,\r\n    &quot;react-redux&quot;: &quot;^5.0.5&quot;,\r\n    &quot;react-router&quot;: &quot;^3.0.5&quot;,\r\n    &quot;react-spinners&quot;: &quot;0.0.30&quot;,\r\n    &quot;redux&quot;: &quot;^3.7.2&quot;,\r\n    &quot;redux-logger&quot;: &quot;^3.0.6&quot;,\r\n    &quot;redux-saga&quot;: &quot;^0.15.6&quot;,\r\n    &quot;redux-thunk&quot;: &quot;^2.2.0&quot;,\r\n    &quot;reselect&quot;: &quot;^3.0.1&quot;,\r\n    &quot;styled-components&quot;: &quot;^2.1.1&quot;,\r\n    &quot;volleyball&quot;: &quot;^1.4.1&quot;,\r\n    &quot;webpack&quot;: &quot;^3.4.1&quot;,\r\n    &quot;webpack-livereload-plugin&quot;: &quot;^0.11.0&quot;,\r\n    &quot;whatwg-fetch&quot;: &quot;^2.0.3&quot;\r\n  },\r\n  &quot;devDependencies&quot;: {\r\n    &quot;chai&quot;: &quot;^4.1.0&quot;,\r\n    &quot;cross-env&quot;: &quot;^5.0.1&quot;,\r\n    &quot;mocha&quot;: &quot;^3.5.0&quot;,\r\n    &quot;nodemon&quot;: &quot;^1.11.0&quot;\r\n  }\r\n}</pre><h3>What we&#39;re installing and why:</h3><ol><li>We&#39;re going to use the <strong>whatwg-fetch</strong> and <strong>cosmicjs</strong> library to handle our requests to our Cosmic Bucket.</li><li>We&#39;re installing <strong>react</strong> and <strong>react-dom</strong> to build our react components.</li><li>We are going to use <strong>redux</strong>, react-redux, redux-logger, reselect and redux-sagas to help us implement what is called the Redux architecture.</li><li>We have used <strong>styled-components</strong> to make the stickynotes component styling generic. We can pass style variables in it too.</li><li>We used <strong>react-spinners</strong> to use loading component.</li><li>We used <strong>react-color</strong> to use color picker component.</li><li>We used <strong>react-modal</strong>-dialog to use react modal component.</li><li>We used <strong>immutable</strong> package by Facebook to use immutable objects.</li><li>We used <strong>moment</strong> to format dates.</li><li>We used <strong>react-router</strong> for routing and navigation.</li><li>The only thing worth mentioning in the dev dependencies is <strong>webpack</strong> and <strong>volleyball</strong>. Webpack will help us bundle all of our react and redux files into one large &quot;bundle&quot; file that will be used in our index.html.\r\nVolleyball is a cool little library that allows us to see in our console incoming and outgoing HTTP requests.</li></ol><h3>Building our app:</h3><p>Now we we will set up our index.html in our client directory. Copy and paste the following code into your index.html file:</p><pre class=\"prism\">&lt;!DOCTYPE html&gt;\r\n&lt;html&gt;\r\n&lt;head&gt;\r\n    &lt;meta charset=&quot;UTF-8&quot; /&gt;\r\n    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot; /&gt;\r\n    &lt;title&gt;Cosmic Sticky Notes App!&lt;/title&gt;\r\n    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css&quot;&gt;\r\n    &lt;link href=&quot;https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css&quot; rel=&quot;stylesheet&quot; &gt;\r\n    &lt;script src=&quot;https://code.jquery.com/jquery-3.2.1.min.js&quot;&gt;&lt;/script&gt;\r\n    &lt;script src=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js&quot;&gt;&lt;/script&gt;\r\n    &lt;script src=&quot;/dist/bundle.js&quot; defer&gt;&lt;/script&gt;\r\n&lt;/head&gt;\r\n&lt;body id=&quot;top&quot;&gt;\r\n&lt;div id=&quot;root&quot;&gt;&lt;/div&gt;\r\n&lt;/body&gt;\r\n&lt;/html&gt;</pre><p>Here, we are going to target our <strong>root</strong> div to place our react components in later. The <strong>bundle.js</strong> file located in our dist directory is what our webpack.config file will spit out after bundling all of our react components. Now, set up our webpack.config file to bundle all of our react files and export that bundle file to our dist directory. Copy the following code into your <strong>webpack.config.js</strong> file:</p><pre class=\"prism\">var path = require(&#39;path&#39;);\r\nvar LiveReloadPlugin = require(&#39;webpack-livereload-plugin&#39;);\r\nvar webpack = require(&#39;webpack&#39;);\r\n\r\nmodule.exports = {\r\n  entry: &#39;./client/index.js&#39;,\r\n  output: {\r\n    filename: &#39;bundle.js&#39;,\r\n    path: path.resolve(__dirname, &#39;client/dist&#39;)\r\n  },\r\n  context: __dirname,\r\n  resolve: {\r\n    extensions: [&#39;.js&#39;, &#39;.jsx&#39;, &#39;.json&#39;, &#39;*&#39;]\r\n  },\r\n  module: {\r\n    rules: [{\r\n        test: /\\.jsx?$/,\r\n        exclude: /(node_modules|bower_components)/,\r\n        loader: &#39;babel-loader&#39;,\r\n        options: {\r\n          presets: [&#39;react&#39;, &#39;es2015&#39;, &#39;stage-0&#39;]\r\n        }\r\n      },\r\n    ]\r\n  },\r\n  plugins: [\r\n    new webpack.DefinePlugin({\r\n      &#39;process.env&#39;: {\r\n        &#39;COSMIC_BUCKET&#39;: JSON.stringify(process.env.COSMIC_BUCKET),\r\n        &#39;COSMIC_READ_KEY&#39;: JSON.stringify(process.env.COSMIC_READ_KEY),\r\n        &#39;COSMIC_WRITE_KEY&#39;: JSON.stringify(process.env.COSMIC_WRITE_KEY)\r\n      }\r\n    }),\r\n    new LiveReloadPlugin({appendScriptTag: true}),\r\n  ]\r\n};</pre><p>Then, we have <strong>server/index.js</strong> file when we used <strong>express</strong> to make our server.</p><p>In Client folder there is store.js file which is creating redux store to manage states and data. The things that are happening are as follows:</p><ul><li>We used redux-thunk &amp; redux-sagas middlewares.</li><li>We used combine Reducers to combine home &amp; group reducer</li><li>Then we made store using the above things.</li><li>Then we trigger home &amp; groups sagas.</li></ul><pre class=\"prism\">import { createStore, applyMiddleware, combineReducers } from &#39;redux&#39;;\r\nimport homeReducer from &#39;./containers/Home/reducer&#39;;\r\nimport homeSagas from &#39;./containers/Home/sagas&#39;;\r\n\r\n\r\nimport groupReducer from &#39;./containers/Group/reducer&#39;;\r\nimport groupSagas from &#39;./containers/Group/sagas&#39;;\r\n\r\nimport thunkMiddleware from &#39;redux-thunk&#39;;\r\nimport createSagaMiddleware from &#39;redux-saga&#39;;\r\n\r\nconst sagaMiddleware = createSagaMiddleware();\r\n\r\nconst middlewares = [\r\n  sagaMiddleware,\r\n  thunkMiddleware,\r\n];\r\n\r\nconst reducers = combineReducers({\r\n  home: homeReducer,\r\n  group: groupReducer,\r\n});\r\nconst store = createStore(\r\n  reducers,\r\n  applyMiddleware(...middlewares),\r\n);\r\n\r\nsagaMiddleware.run(homeSagas)\r\nsagaMiddleware.run(groupSagas)\r\n\r\nexport default store;</pre><p>Now we have client/Routes.js. Here, we have two routes:</p><ol><li>Path=&quot;/&quot; =&gt; Lists all groups</li><li>Path=&quot;/group/:groupSlug/:groupId&quot; =&gt; list all notes against some groups</li></ol><pre class=\"prism\">import React from &#39;react&#39;;\r\nimport { Router, Route, browserHistory } from &#39;react-router&#39;;\r\nimport { connect } from &#39;react-redux&#39;;\r\nimport Home from &#39;./containers/Home&#39;;\r\nimport Group from &#39;./containers/Group&#39;;\r\n\r\nconst Routes = ({}) =&gt; {\r\n  return (\r\n    &lt;Router history={browserHistory}&gt;\r\n        &lt;Route path=&quot;/&quot; component={Home} /&gt;\r\n        &lt;Route path=&quot;/group/:groupSlug/:groupId&quot; component={Group} /&gt;\r\n    &lt;/Router&gt;\r\n  )\r\n};\r\n\r\n// const mapState = ({}) =&gt; ({});\r\n// const mapDispatch = {};\r\n\r\nexport default connect(null, null)(Routes);</pre><p>In client folder we have create a configuration file inorder to save API_KEYS and COSMIC BUCKET NAME. You can edit this file to use your own keys and slugs.</p><pre class=\"prism\">export default {\r\n  bucket: {\r\n    slug: process.env.COSMIC_BUCKET || &#39;sticky-note-app&#39;,\r\n    read_key: &quot;YOUR READ KEY&quot;,\r\n    write_key: &quot;YOUR WRITE KEY&quot;,\r\n  }\r\n}</pre><h3>There are two utils:</h3><ul><li>Request</li><li>Cosmic</li></ul><h4>Request</h4><p>Request uses whatwg-fetch to hit AJAX requests to the Cosmic API. This util is used to call those endpoints which are not present in the Cosmic package e.g deleteMedia and searchObjects based on filters</p><h4>Cosmic</h4><p>Cosmic uses cosmicjs package to hit AJAX request to Cosmic API.</p><h3>There are two container:</h3><ul><li>Home</li><li>Group</li></ul><h4>Home</h4><p>This container lists down groups. This group add new Note Group. It also edits and delete NoteGroups. This selects NoteGroup data from reducers and passes them to their components. This also passes add, edit and delete NoteGroup actions to the home component.</p><h4>Group</h4><p>This selects Notes data from reducers and passes them to their components. This also passes add, edit and delete Notes actions to the home component.</p><h3>There are following components in this app</h3><ul><li><strong>Color Picker</strong></li><li><strong>Dialog</strong></li><li><strong>Loader</strong></li><li><strong>Sticky Notes</strong></li><li><strong>Home</strong></li><li><strong>Group</strong></li></ul><h4>ColorPicker</h4><p>This component is for picking the color of Sticky Note.</p><pre class=\"prism\">import React, {Component} from &#39;react&#39;;\r\nimport { ChromePicker } from &#39;react-color&#39;;\r\n\r\n\r\nclass ColorPickerField extends Component {\r\n  constructor(props){\r\n    super(props);\r\n  }\r\n\r\n  render() {\r\n    return (\r\n      &lt;ChromePicker\r\n        color={this.props.color}\r\n        onChangeComplete={this.props.changeColor}\r\n      /&gt;\r\n    )\r\n  }\r\n}\r\n\r\nexport default ColorPickerField;</pre><h4>Dialog</h4><p>This component will show the popups and dialogs to get input data and output responses</p><pre class=\"prism\">import React, {Component} from &#39;react&#39;;\r\nimport { ModalContainer, ModalDialog } from &#39;react-modal-dialog&#39;;\r\n\r\n\r\nclass Dialog extends Component {\r\n  constructor(props){\r\n    super(props);\r\n  }\r\n\r\n\r\n  handleClose = () =&gt; {\r\n    this.props.closeDialog();\r\n  }\r\n  render() {\r\n    const { open } = this.props;\r\n    return (\r\n      &lt;div&gt;\r\n        {\r\n          open &amp;&amp;\r\n          &lt;ModalContainer onClose={this.handleClose}&gt;\r\n            &lt;ModalDialog onClose={this.handleClose}&gt;\r\n              { this.props.children }\r\n            &lt;/ModalDialog&gt;\r\n          &lt;/ModalContainer&gt;\r\n        }\r\n      &lt;/div&gt;\r\n    )\r\n  }\r\n}\r\n\r\nexport default Dialog;</pre><h4>Loader</h4><p>This is a loader component and it triggers whenever an ajax request in taking place.</p><pre class=\"prism\">import React, {Component} from &#39;react&#39;;\r\nimport { BounceLoader } from &#39;react-spinners&#39;;\r\n\r\n\r\nclass Loader extends Component {\r\n  constructor(props){\r\n    super(props);\r\n  }\r\n\r\n\r\n  render() {\r\n    const style = {\r\n      position: &quot;fixed&quot;,\r\n      top: &quot;50%&quot;,\r\n      left: &quot;50%&quot;,\r\n      marginTop: &quot;-9em&quot;,\r\n      marginLeft: &quot;-15em&quot;,\r\n    };\r\n    return (\r\n      &lt;div style={style}&gt;\r\n        &lt;BounceLoader\r\n          color={&#39;#123abc&#39;}\r\n          loading\r\n          size={300}\r\n        /&gt;\r\n      &lt;/div&gt;\r\n    )\r\n  }\r\n}\r\n\r\nexport default Loader;</pre><h4>StickyNotes</h4><p>This component takes an array of options and convert them to stickynotes with edit, heading onclick and delete handler.</p><pre class=\"prism\">import React, {Component} from &#39;react&#39;;\r\nimport { NoteListWrapper, NoteWrapper, Note } from &#39;./styles&#39;;\r\nimport moment from &#39;moment/moment&#39;\r\nclass StickyNotes extends Component {\r\n\r\n\r\n  render() {\r\n    const { options } = this.props;\r\n    return (\r\n      &lt;NoteListWrapper&gt;\r\n        {\r\n          !!options &amp;&amp; options.toArray().map((option, index) =&gt; {\r\n          return  &lt;NoteWrapper key={`note_${index}`}&gt;\r\n              &lt;Note backgroundColor={option.getIn([&#39;metadata&#39;, &#39;color&#39;])||&quot;black&quot;} color=&quot;#ffffff&quot; rotate={index%2 === 0? -2 : 4}&gt;\r\n                &lt;small&gt;{moment(option.get(&#39;created&#39;)).fromNow()}&lt;/small&gt;\r\n                &lt;h4 onClick={() =&gt; this.props.handleClick(option)}&gt;{option.get(&#39;title&#39;).substring(0,11)}&lt;/h4&gt;\r\n                &lt;p&gt;{option.get(&#39;content&#39;).substring(0, 41)}&lt;/p&gt;\r\n                &lt;span className=&quot;buttons&quot;&gt;\r\n                  &lt;a onClick={() =&gt; this.props.deleteOption(option.toJS(), index)} className=&quot;pull-right&quot;&gt;&lt;i className=&quot;fa fa-trash-o&quot;&gt;&lt;/i&gt;&lt;/a&gt;\r\n                  &lt;a onClick={() =&gt; this.props.editOption(option, index)} style={{ marginRight: &quot;1vw&quot; }} className=&quot;pull-right&quot;&gt;&lt;i className=&quot;fa fa-pencil&quot;&gt;&lt;/i&gt;&lt;/a&gt;\r\n                &lt;/span&gt;\r\n              &lt;/Note&gt;\r\n            &lt;/NoteWrapper&gt;\r\n          })\r\n        }\r\n      &lt;/NoteListWrapper&gt;\r\n    )\r\n  }\r\n}\r\n\r\nexport default StickyNotes;</pre><h4>Home</h4><p>This is a component where we feed NoteGroup options to Sticky Notes component and have add, edit and delete handlers.</p><pre class=\"prism\">import React, {Component} from &#39;react&#39;;\r\nimport Dialog from &#39;../Dialog&#39;;\r\nimport StickyNotes from &#39;../StickyNotes&#39;;\r\nimport ColorPicker from &#39;../ColorPicker&#39;;\r\n\r\nclass Home extends Component {\r\n  constructor(props){\r\n    super(props);\r\n    this.state = {\r\n      title: &quot;&quot;,\r\n      content: &quot;&quot;,\r\n      color: &quot;#fff&quot;,\r\n      selectedGroup: null,\r\n      openAddDialog: false,\r\n      openEditDialog: false,\r\n      group: {\r\n        title: &quot;&quot;,\r\n      },\r\n    }\r\n  }\r\n\r\n  addGroup = () =&gt; {\r\n    const { title, content, color } = this.state;\r\n    this.props.addGroup({\r\n      title,\r\n      content,\r\n      color,\r\n    });\r\n    this.setState({ title: &quot;&quot;, content: &quot;&quot;, openAddDialog: false })\r\n  }\r\n\r\n\r\n  editGroup = () =&gt; {\r\n    const { group, selectedGroup } = this.state;\r\n    const { state } = this;\r\n    this.props.editGroup({\r\n      title: group.title,\r\n      content: group.content,\r\n      color: group.color,\r\n    }, group.slug, selectedGroup);\r\n    this.setState({ ...state, group: { title: &quot;&quot; }, openEditDialog: false })\r\n  }\r\n\r\n  goToNoteGroup = (group) =&gt; {\r\n    this.props.changeRoute(`/group/${group.get(&#39;slug&#39;)}/${group.get(&#39;_id&#39;)}`);\r\n  }\r\n\r\n  editOption = (group, selectedGroup) =&gt; {\r\n    this.setState({\r\n      openEditDialog: true,\r\n      group: group.toJS(),\r\n      selectedGroup,\r\n    });\r\n  }\r\n  render() {\r\n    const { groups } = this.props;\r\n    const { state } = this;\r\n    const { title, content, color, openAddDialog, openEditDialog, group } = this.state;\r\n\r\n    const styles = {\r\n      btnCircle: {\r\n        width: &quot;30px&quot;,\r\n        height: &quot;30px&quot;,\r\n        textAlign: &quot;center&quot;,\r\n        padding: &quot;6px 0&quot;,\r\n        fontSize: &quot;12px&quot;,\r\n        fontWeight: &quot;700&quot;,\r\n        lineHeight: &quot;1.42&quot;,\r\n        borderRadius: &quot;15px&quot;,\r\n        margin: &quot;10px&quot;,\r\n        border: &quot;none&quot;,\r\n        outline: &quot;none&quot;,\r\n        float: &quot;right&quot;\r\n      }\r\n    }\r\n\r\n    return (\r\n      &lt;div className=&quot;container-fluid&quot;&gt;\r\n      &lt;div className=&quot;row&quot;&gt;\r\n        &lt;button style={styles.btnCircle} className=&quot;btn btn-primary btn-lg&quot; onClick={() =&gt; this.setState({ openAddDialog: true })}&gt;\r\n          &lt;i className=&quot;fa fa-plus&quot;&gt;&lt;/i&gt;\r\n        &lt;/button&gt;\r\n      &lt;Dialog\r\n        open={openAddDialog}\r\n        closeDialog={() =&gt; this.setState({ openAddDialog: false })}\r\n      &gt;\r\n        &lt;div className=&quot;container-fluid&quot;&gt;\r\n          &lt;div className=&quot;col-xs-12&quot;&gt;\r\n            &lt;input placeholder=&quot;Enter Name ...&quot; type=&quot;text&quot; style={{ margin: &quot;1vh 0&quot; }} value={title} className=&quot;form-control&quot; onChange={(e) =&gt; this.setState({ title: e.target.value })} /&gt;\r\n          &lt;/div&gt;\r\n          &lt;div className=&quot;col-xs-12&quot;&gt;\r\n            &lt;textarea value={content} placeholder=&quot;Enter Description ...&quot; rows=&quot;4&quot; cols=&quot;50&quot; style={{ margin: &quot;1vh 0&quot; }} className=&quot;form-control&quot; onChange={(e) =&gt; this.setState({ content: e.target.value })} /&gt;\r\n          &lt;/div&gt;\r\n\r\n          &lt;div className=&quot;col-xs-12&quot;&gt;\r\n            &lt;ColorPicker color={color} changeColor={(color) =&gt; this.setState({ color: color.hex })} /&gt;\r\n          &lt;/div&gt;\r\n\r\n\r\n          &lt;div className=&quot;col-xs-12&quot;&gt;\r\n            &lt;input type=&quot;button&quot; disabled={title === &quot;&quot; &amp;&amp; &quot;disabled&quot;} style={{ margin: &quot;1vh 0&quot; }} value=&quot;Add Group&quot; className=&quot;btn btn-primary btn-lg&quot; onClick={this.addGroup} /&gt;\r\n          &lt;/div&gt;\r\n        &lt;/div&gt;\r\n      &lt;/Dialog&gt;\r\n\r\n      &lt;Dialog\r\n        open={openEditDialog}\r\n        closeDialog={() =&gt; this.setState({ openEditDialog: false })}\r\n      &gt;\r\n        &lt;div className=&quot;container-fluid&quot;&gt;\r\n          &lt;div className=&quot;col-xs-12&quot;&gt;\r\n            &lt;input style={{ margin: &quot;1vh 0&quot; }} type=&quot;text&quot; value={group.title} className=&quot;form-control&quot; onChange={(e) =&gt; this.setState({ ...state, group: {  ...this.state.group, title: e.target.value } })} /&gt;\r\n          &lt;/div&gt;\r\n          &lt;div className=&quot;col-xs-12&quot;&gt;\r\n            &lt;textarea value={group.content||&quot;&quot;} style={{ margin: &quot;1vh 0&quot; }} type=&quot;text&quot; className=&quot;form-control&quot; onChange={(e) =&gt; this.setState({ ...state, group: {  ...this.state.group, content: e.target.value } })} /&gt;\r\n          &lt;/div&gt;\r\n          &lt;div className=&quot;col-xs-12&quot;&gt;\r\n            &lt;ColorPicker color={group.color} changeColor={(color) =&gt; this.setState({ ...state, group: { ...this.state.group, color: color.hex }})} /&gt;\r\n          &lt;/div&gt;\r\n          &lt;div className=&quot;col-xs-12&quot;&gt;\r\n            &lt;input disabled={group.title === &quot;&quot; &amp;&amp; &quot;disabled&quot;} style={{ margin: &quot;1vh 0&quot; }} type=&quot;button&quot; value=&quot;Edit Group&quot; className=&quot;btn btn-warning btn-lg&quot; onClick={this.editGroup} /&gt;\r\n          &lt;/div&gt;\r\n\r\n        &lt;/div&gt;\r\n      &lt;/Dialog&gt;\r\n\r\n      {\r\n        &lt;StickyNotes\r\n          options={groups}\r\n          editOption={this.editOption}\r\n          deleteOption={this.props.deleteGroup}\r\n          handleClick={this.goToNoteGroup}\r\n        /&gt;\r\n      }\r\n      &lt;/div&gt;\r\n      &lt;/div&gt;\r\n    )\r\n  }\r\n}\r\n\r\nexport default Home;</pre><h4>Group</h4><p>This is a component where we feed Notes options to StickyNotes component and have add, edit and delete handlers.</p><pre class=\"prism\">import React, {Component} from &#39;react&#39;;\r\nimport Dialog from &#39;../Dialog&#39;;\r\nimport StickyNotes from &#39;../StickyNotes&#39;;\r\nimport ColorPicker from &#39;../ColorPicker&#39;;\r\n\r\nclass Group extends Component {\r\n  constructor(props){\r\n    super(props);\r\n    this.state = {\r\n      title: &quot;&quot;,\r\n      content: &quot;&quot;,\r\n      color: &quot;&quot;,\r\n      selectedNote: null,\r\n      openAddDialog: false,\r\n      openEditDialog: false,\r\n      openViewDialog: false,\r\n      note: {\r\n        title: &quot;&quot;,\r\n      },\r\n    }\r\n  }\r\n\r\n  addNote = () =&gt; {\r\n    const { title, color, content } = this.state;\r\n    const { groupId, addedMedia } = this.props;\r\n    const image = this.refs.imageFile.files[0];\r\n    const file = this.refs.attachedFile.files[0];\r\n    this.props.addNote({\r\n      title,\r\n      content,\r\n      color,\r\n      image,\r\n      file,\r\n    }, groupId);\r\n    this.setState({ title: &quot;&quot;, content: &quot;&quot;, openAddDialog: false });\r\n  }\r\n\r\n  editNote = () =&gt; {\r\n    const { note, selectedNote } = this.state;\r\n    const { state } = this;\r\n    let METAFIELDS = note;\r\n    METAFIELDS.metafields[1].value = note.color || &quot;#000&quot;\r\n    this.props.editNote({\r\n      title: note.title,\r\n      color: note.color || &quot;#000&quot;,\r\n      content: note.content,\r\n      metafields: METAFIELDS.metafields,\r\n    }, note.slug, selectedNote);\r\n    this.setState({ ...state, note: { title: &quot;&quot; }, openEditDialog: false })\r\n  }\r\n\r\n  editOption = (note, selectedNote) =&gt; {\r\n    this.setState({\r\n      openEditDialog: true,\r\n      note: note.toJS(),\r\n      selectedNote,\r\n    });\r\n  }\r\n\r\n  goToNote = (note) =&gt; {\r\n    this.setState({\r\n      note: note.toJS(),\r\n      openViewDialog: true,\r\n    })\r\n  }\r\n  render() {\r\n    const { notes } = this.props;\r\n    const { state } = this;\r\n\r\n    const { title, content, color, openAddDialog, openEditDialog, openViewDialog, note } = this.state;\r\n\r\n    const styles = {\r\n      btnCircle: {\r\n        width: &quot;30px&quot;,\r\n        height: &quot;30px&quot;,\r\n        textAlign: &quot;center&quot;,\r\n        padding: &quot;6px 0&quot;,\r\n        fontSize: &quot;12px&quot;,\r\n        fontWeight: &quot;700&quot;,\r\n        lineHeight: &quot;1.42&quot;,\r\n        borderRadius: &quot;15px&quot;,\r\n        margin: &quot;10px&quot;,\r\n        border: &quot;none&quot;,\r\n        outline: &quot;none&quot;,\r\n        float: &quot;right&quot;\r\n      }\r\n    }\r\n\r\n    return (\r\n      &lt;div className=&quot;container-fluid&quot;&gt;\r\n      &lt;button style={styles.btnCircle}  onClick={() =&gt; this.setState({ openAddDialog: true })} className=&quot;btn btn-primary btn-lg&quot;&gt;\r\n        &lt;i className=&quot;fa fa-plus&quot;&gt;&lt;/i&gt;\r\n      &lt;/button&gt;\r\n      &lt;Dialog\r\n        open={openAddDialog}\r\n        closeDialog={() =&gt; this.setState({ openAddDialog: false })}\r\n      &gt;\r\n        &lt;div className=&quot;container-fluid&quot;&gt;\r\n          &lt;div className=&quot;col-xs-12&quot;&gt;\r\n            &lt;input style={{ margin: &quot;1vh 0&quot; }} type=&quot;text&quot; className=&quot;form-control&quot; value={title} onChange={(e) =&gt; this.setState({ title: e.target.value })} /&gt; &lt;br /&gt;\r\n          &lt;/div&gt;\r\n          &lt;div className=&quot;col-xs-12&quot;&gt;\r\n            &lt;textarea style={{ margin: &quot;1vh 0&quot; }} type=&quot;text&quot; className=&quot;form-control&quot; value={content} onChange={(e) =&gt; this.setState({ content: e.target.value })} /&gt; &lt;br /&gt;\r\n          &lt;/div&gt;\r\n          &lt;div className=&quot;col-xs-12&quot;&gt;\r\n            &lt;input style={{ margin: &quot;1vh 0&quot; }} type=&quot;file&quot; className=&quot;form-control&quot; ref=&quot;imageFile&quot; /&gt; &lt;br /&gt;\r\n          &lt;/div&gt;\r\n          &lt;div className=&quot;col-xs-12&quot;&gt;\r\n            &lt;input style={{ margin: &quot;1vh 0&quot; }} type=&quot;file&quot; className=&quot;form-control&quot; ref=&quot;attachedFile&quot; /&gt; &lt;br /&gt;\r\n          &lt;/div&gt;\r\n          &lt;div className=&quot;col-xs-12&quot;&gt;\r\n            &lt;ColorPicker color={color} changeColor={(color) =&gt; this.setState({ color: color.hex })} /&gt;\r\n          &lt;/div&gt;\r\n          &lt;div className=&quot;col-xs-12&quot;&gt;\r\n            &lt;input disabled={(title === &quot;&quot; || content === &quot;&quot;) &amp;&amp; &quot;disabled&quot;} style={{ margin: &quot;1vh 0&quot; }} type=&quot;button&quot; className=&quot;btn btn-success btn-md&quot; value=&quot;Add Note&quot; onClick={this.addNote} /&gt;\r\n          &lt;/div&gt;\r\n        &lt;/div&gt;\r\n      &lt;/Dialog&gt;\r\n\r\n\r\n\r\n      &lt;Dialog\r\n        open={openEditDialog}\r\n        closeDialog={() =&gt; this.setState({ openEditDialog: false })}\r\n      &gt;\r\n        &lt;div className=&quot;container-fluid&quot;&gt;\r\n          &lt;div className=&quot;col-xs-12&quot;&gt;\r\n            &lt;input style={{ margin: &quot;1vh 0&quot; }} type=&quot;text&quot; value={note.title} className=&quot;form-control&quot; onChange={(e) =&gt; this.setState({ ...state, note: {  ...this.state.note, title: e.target.value } })} /&gt;\r\n          &lt;/div&gt;\r\n          &lt;div className=&quot;col-xs-12&quot;&gt;\r\n            &lt;textarea style={{ margin: &quot;1vh 0&quot; }} type=&quot;text&quot; value={note.content||&quot;&quot;} className=&quot;form-control&quot; onChange={(e) =&gt; this.setState({ ...state, note: {  ...this.state.note, content: e.target.value } })} /&gt;\r\n          &lt;/div&gt;\r\n          &lt;div className=&quot;col-xs-12&quot;&gt;\r\n            &lt;ColorPicker color={note.color} changeColor={(color) =&gt; this.setState({ ...state, note: { ...this.state.note, color: color.hex }})} /&gt;\r\n          &lt;/div&gt;\r\n          &lt;div className=&quot;col-xs-12&quot;&gt;\r\n            &lt;input disabled={(note.title === &quot;&quot; || note.content === &quot;&quot;) &amp;&amp; &quot;disabled&quot;} style={{ margin: &quot;1vh 0&quot; }} type=&quot;button&quot; value=&quot;Edit Note&quot; className=&quot;btn btn-warning btn-lg&quot; onClick={this.editNote} /&gt;\r\n          &lt;/div&gt;\r\n        &lt;/div&gt;\r\n      &lt;/Dialog&gt;\r\n\r\n      &lt;Dialog\r\n        open={openViewDialog}\r\n        closeDialog={() =&gt; this.setState({ openViewDialog: false })}\r\n      &gt;\r\n        &lt;div className=&quot;container-fluid&quot;&gt;\r\n          &lt;div className=&quot;col-xs-12&quot;&gt;\r\n            &lt;h1 style={{ margin: &quot;1vh 0&quot; }}&gt;{note.title}&lt;/h1&gt;\r\n          &lt;/div&gt;\r\n          &lt;div className=&quot;col-xs-12&quot;&gt;\r\n            &lt;p style={{ margin: &quot;1vh 0&quot; }}&gt;{note.content}&lt;/p&gt;\r\n          &lt;/div&gt;\r\n          {\r\n            !!note.metadata &amp;&amp; !!note.metadata.feature_image &amp;&amp;\r\n            &lt;div className=&quot;col-xs-12&quot;&gt;\r\n              &lt;img style={{ margin: &quot;1vh 0&quot; }} width=&quot;128&quot; height=&quot;128&quot; src={note.metadata.feature_image.imgix_url} /&gt;\r\n            &lt;/div&gt;\r\n          }\r\n          {\r\n            !!note.metadata &amp;&amp; !!note.metadata.attachment &amp;&amp;\r\n            &lt;div className=&quot;col-xs-12&quot;&gt;\r\n              &lt;a style={{ margin: &quot;1vh 0&quot; }} href={note.metadata.attachment.imgix_url} target=&quot;_blank&quot;&gt;Click on this link to open attachment in the new link&lt;/a&gt;\r\n            &lt;/div&gt;\r\n          }\r\n        &lt;/div&gt;\r\n      &lt;/Dialog&gt;\r\n\r\n      &lt;StickyNotes\r\n        options={notes}\r\n        editOption={this.editOption}\r\n        deleteOption={this.props.deleteNote}\r\n        handleClick={this.goToNote}\r\n      /&gt;\r\n      &lt;/div&gt;\r\n    )\r\n  }\r\n}\r\n\r\nexport default Group;</pre><h2>Conclusion</h2><p>So, this is an app where every scenario of the Cosmic RESTful API is covered. I hope you liked the tutorial.</p>","metafields":[{"object_type":"authors","value":"599b30c44f629e3a5900010f","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"599b30c44f629e3a5900010f","slug":"jazib-sawar","title":"Jazib Sawar","content":"","metafields":[{"value":"d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","id":"MoCJXLYqwC","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","imgix_url":"https://imgix.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg"},{"value":"jazibsawar","id":"","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-08-21T19:13:08.011Z","created_by":"5357ef811693be2118000001","created":"2017-08-21T19:13:08.011Z","status":"published","modified_at":"2020-09-15T15:41:11.076Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-12-09T16:06:31.900Z","thumbnail":"https://imgix.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg"}},{"value":"<p>In this tutorial, I&#39;m going to show you how to create a simple <strong>Sticky Notes</strong> app using React, Redux, Selectors, Redux Sagas, a little bit of Node, and Cosmic.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"23f31390-86a8-11e7-8092-d3b8593f09e6-sticky-notes-1.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/23f31390-86a8-11e7-8092-d3b8593f09e6-sticky-notes-1.jpg","imgix_url":"https://imgix.cosmicjs.com/23f31390-86a8-11e7-8092-d3b8593f09e6-sticky-notes-1.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-08-22T19:17:59.493Z","created_by":"5357ef811693be2118000001","created":"2017-08-22T19:17:59.493Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","metadata":{"author":{"_id":"599b30c44f629e3a5900010f","slug":"jazib-sawar","title":"Jazib Sawar","content":"","metafields":[{"value":"d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","id":"MoCJXLYqwC","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","imgix_url":"https://imgix.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg"},{"value":"jazibsawar","id":"","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-08-21T19:13:08.011Z","created_by":"5357ef811693be2118000001","created":"2017-08-21T19:13:08.011Z","status":"published","modified_at":"2020-09-15T15:41:11.076Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-12-09T16:06:31.900Z","thumbnail":"https://imgix.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg","imgix_url":"https://imgix.cosmicjs.com/d3261f20-1a9d-11ea-a8c4-6b69c807b1d7-12.jpg"},"username":"jazibsawar"}},"teaser":"<p>In this tutorial, I&#39;m going to show you how to create a simple <strong>Sticky Notes</strong> app using React, Redux, Selectors, Redux Sagas, a little bit of Node, and Cosmic.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/23f31390-86a8-11e7-8092-d3b8593f09e6-sticky-notes-1.jpg","imgix_url":"https://imgix.cosmicjs.com/23f31390-86a8-11e7-8092-d3b8593f09e6-sticky-notes-1.jpg"}}},{"_id":"599aff32e11ec8a742000bc4","order":108,"slug":"dashboard-design-updates","title":"Dashboard Design Updates","content":"<p><img src=\"https://cosmicjs.imgix.net/3d466850-868b-11e7-bf73-e3d192676a6d-joshua-fuller-328300.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>We&#39;re always trying to make the process of editing content easier. &nbsp;We just released an update that makes editing your content in your Cosmic Dashboard easier on the eyes. &nbsp;One of the goals of the update was to make the Object edit view design look less busy.&nbsp;</p><p><br></p><p><strong>Here&#39;s the old Object edit view:</strong><br><img src=\"https://www.cosmicjs.com/uploads/3a63ad00-8686-11e7-993a-ad9fd34fbda3-Screen Shot 2017-08-21 at 10.34.05 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><strong>Here&#39;s the new Object edit view:</strong><br><img src=\"https://www.cosmicjs.com/uploads/a8c9cfa0-8685-11e7-993a-ad9fd34fbda3-bucket-design-updates.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p><strong>A couple things we did to achieve this:</strong></p><p>1. We added more space to help the editing area &quot;breathe&quot;.<br>2. We removed the border around inputs and replaced them with a background color. &nbsp;This removed a lot of horizontal lines which were a distraction in the previous design.<br>3. We added more emphasis to the title as this is the only required field.</p><p>We&#39;ve also applied this &quot;card&quot; style to the rest of the Bucket Dashboard pages. &nbsp;It is our hope that this design update will give you a more delightful experience as you manage content for your websites and apps using Cosmic.</p><p>If you have any questions or comments on the updates please <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\">join our Slack community</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>We&#39;re always trying to make the process of editing content easier. &nbsp;We just released an update that makes editing your content in your Cosmic Buckets easier on the eyes. &nbsp;One of the goals of the update was to make the Object edit view design look less busy.&nbsp;</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"3d466850-868b-11e7-bf73-e3d192676a6d-joshua-fuller-328300.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/3d466850-868b-11e7-bf73-e3d192676a6d-joshua-fuller-328300.jpg","imgix_url":"https://imgix.cosmicjs.com/3d466850-868b-11e7-bf73-e3d192676a6d-joshua-fuller-328300.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-08-21T15:41:38.250Z","created_by":"5357ef811693be2118000001","created":"2017-08-21T15:41:38.250Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We&#39;re always trying to make the process of editing content easier. &nbsp;We just released an update that makes editing your content in your Cosmic Buckets easier on the eyes. &nbsp;One of the goals of the update was to make the Object edit view design look less busy.&nbsp;</p>","featured_image":{"url":"https://cdn.cosmicjs.com/3d466850-868b-11e7-bf73-e3d192676a6d-joshua-fuller-328300.jpg","imgix_url":"https://imgix.cosmicjs.com/3d466850-868b-11e7-bf73-e3d192676a6d-joshua-fuller-328300.jpg"}}},{"_id":"598e202b7f94677b360005ff","order":109,"slug":"introducing-cosmic-clusters-multi-bucket-billing-plans-now-available","title":"Introducing Cosmic Clusters: Multi-Bucket Billing Plans Now Available ","content":"<p><img src=\"https://www.cosmicjs.com/uploads/0da48f90-8281-11e7-8b27-b7b8acda6510-80987c3a-f5cc-4b7e-a583-ae3bf41a4664.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><h2>TL;DR</h2><p><a href=\"https://www.cosmicjs.com/clusters\" rel=\"noopener noreferrer\" target=\"_blank\">Add your first Cluster now</a>.</p><p>The Cosmic mantra is Build Apps Faster. As former agency colleagues, we know the value of speeding up dev cycles and empowering non-technical users. As we&#39;ve brought that mission and value to market, larger teams have begun requesting expanded use of the platform. Due to the requests of the Cosmic Community, we are unveiling new multi-Bucket billing plans in an effort to speed up larger team&#39;s development cycles and invoicing simplicity.</p><h3>Cosmic Clusters</h3><p><img src=\"https://www.cosmicjs.com/uploads/6758a260-8286-11e7-8fd7-fbd9a440d2da-clusters-pricing.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>What is a Cluster? Simply put, a Cosmic Cluster is a way to group Buckets onto the same billing plan for shared usage limits. As larger teams began adopting Cosmic as their platform of choice to build and manage apps, they began asking for the use of multiple buckets within existing pricing tiers as long as they didn&#39;t exceed the monthly API Request and Storage limits.&nbsp;</p><h3>Adding Your First Cluster</h3><p><strong>1. Add Cluster Title</strong><br>This could be a client&#39;s cluster, a project&#39;s cluster, whatever you need to label to identify from your Bucket Dashboard easy Cluster navigation.&nbsp;</p><p><img src=\"https://www.cosmicjs.com/uploads/a5223340-8286-11e7-8fd7-fbd9a440d2da-new-cluster.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><strong>2. Choose Buckets to Cluster</strong><br>You can choose existing Buckets from your Dashboard, even if they&#39;re already on another paid plan. You can easily add and remove Buckets from Clusters while maintaining the individual Bucket within your Dashboard.&nbsp;</p><p><img src=\"https://www.cosmicjs.com/uploads/d0da1070-8286-11e7-9d64-2bc63fc1ceef-buckets.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><strong>3. Choose Cluster Plan</strong>&nbsp;<br>Clusters come in options of 12 Buckets and 35 Buckets with shared API Request and Storage Usage. Please note that products and features such as Users and Webhooks still operate at the Bucket level. Clusters simply allows for a simpler and more concise billing invoice process and account management experience.&nbsp;</p><p><img src=\"https://www.cosmicjs.com/uploads/f6130680-8286-11e7-8fd7-fbd9a440d2da-plans.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><strong>Summary</strong>:<br>Clusters is a billing and invoicing simplicity product.<br>You can easily add existing Buckets into a new Cluster.<br>You can easily add new Buckets into an existing Cluster.<br>All Bucket Add-Ons and Features still available at the Bucket Level.<br>Removing Buckets from a Cluster do not delete the Buckets permanently.<br>You will still be notified if your Cluster exceeds API Request usage and we will never automatically cut off your Bucket.</p><p><a href=\"https://www.cosmicjs.com/clusters\" rel=\"noopener noreferrer\" target=\"_blank\">Add your first Cluster now</a>. &nbsp;To get more updates and submit feature requests to us directly, <a href=\"https://www.cosmicjs.com/community\">join our Slack community</a> and <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>At the request of the Cosmic Community, new Multi-Bucket Pricing Tiers are now Available for teams. Introducing, Cosmic Clusters.&nbsp;</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"0da48f90-8281-11e7-8b27-b7b8acda6510-80987c3a-f5cc-4b7e-a583-ae3bf41a4664.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0da48f90-8281-11e7-8b27-b7b8acda6510-80987c3a-f5cc-4b7e-a583-ae3bf41a4664.png","imgix_url":"https://imgix.cosmicjs.com/0da48f90-8281-11e7-8b27-b7b8acda6510-80987c3a-f5cc-4b7e-a583-ae3bf41a4664.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-08-11T21:22:51.651Z","created_by":"5716b504e9c686d006000073","created":"2017-08-11T21:22:51.651Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>At the request of the Cosmic Community, new Multi-Bucket Pricing Tiers are now Available for teams. Introducing, Cosmic Clusters.&nbsp;</p>","featured_image":{"url":"https://cdn.cosmicjs.com/0da48f90-8281-11e7-8b27-b7b8acda6510-80987c3a-f5cc-4b7e-a583-ae3bf41a4664.png","imgix_url":"https://imgix.cosmicjs.com/0da48f90-8281-11e7-8b27-b7b8acda6510-80987c3a-f5cc-4b7e-a583-ae3bf41a4664.png"}}},{"_id":"59931b5f8aaf1f9448001779","order":110,"slug":"start-a-premium-content-business-using-nodejs-react-and-cosmic-js-extensions","title":"Start a Premium Content Business Using Node.js, React and Cosmic Extensions","content":"<p><img src=\"https://www.cosmicjs.com/uploads/48d487e0-81d3-11e7-8612-9d67c44fe43c-joe-shillington-240205.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><h2>TL;DR</h2><p><a href=\"https://www.cosmicjs.com/apps/premium-content-blog/demo\" rel=\"noopener noreferrer\" target=\"_blank\">View the demo</a><br><a href=\"https://github.com/cosmicjs/premium-content-blog\" rel=\"noopener noreferrer\" target=\"_blank\">View the source code</a><br><a href=\"https://www.cosmicjs.com/apps/premium-content-blog\">Install the Premium Content Blog</a></p><p>You have great ideas. Your head is overflowing with content that you <em>know</em> people will pay to read. So where do you start? You&#39;re likely inclined to choose a trusted platform like WordPress, but since you want to offer paid content to your users you now face the problem of making a cumbersome solution even more so.</p><p>Instead of tweaking a platform to work for us, we want a simple, straightforward solution with no more functionality than we need. This, of course, means we&#39;re going to build it ourselves.</p><p>In the spirit of a simple, straight forward solution that works exactly the way we want it to, we&#39;ll be using Cosmic to host our blog, manage its users, and store its content.</p><p>Our project will be a play in two parts. First, we&#39;ll build our blog with Express and Cosmic and use Stripe to handle the blog&#39;s payments and subcriptions. Then, we&#39;ll leverage Cosmic&#39;s Extension feature to build a dashboard that gives us an overview of our business&#39; backend.</p><h2>Part 1: Building the Blog</h2><h3>1. Boilerplate Setup</h3><p>To save time on boilerplate, we&#39;ll use Yeoman and the Express Generator (which builds on Express&#39; official generator) to get started. If you don&#39;t have Yeoman installed, run <code>npm i -g yo</code>. Then install the generator with <code>npm i -g generator-express</code> and run it with <code>yo express</code>. Follow the instructions to set up your project under a new directory (say <code>CosmicUserBlog</code>), install the <em>Basic</em> version, and use Handlebars for your view engine.</p><p>Your directory structure is now this:</p><pre>CosmicUserBlog\r\n| \r\n|--bin\r\n|   |--www\r\n|--(node_modules)\r\n|--public\r\n|--routes\r\n|    |--users.js\r\n     |--index.js\r\n|--views\r\n     |--layouts\r\n     |--partials\r\n     |--error.handlebars\r\n     |--index.handlebars\r\n|--.bowerrc\r\n|--.gitignore\r\n|--app.js\r\n|--bower.json\r\n|--gruntfile.js\r\n|--package.json</pre><h3>2. Installations</h3><p>We&#39;ll be using the following packages:</p><ul><li>Async - A powerful async utilities library</li><li>Axios - Simple, promise based http requests</li><li>Cors - Standard cors middleware</li><li>brcypt - For password hashing. (If you&#39;re on Windows read <a href=\"https://www.npmjs.com/package/bcrypt#dependencies\">these notes</a>)</li><li>CosmicJs - The official client</li><li>Express Session - So our users can log in</li><li>dateformat - An intuitive date formatter that we&#39;ll use with posts</li><li>Stripe - The official client</li><li>TruncateHTML - for post blurbs</li></ul><p>You could install these with npm, but I advocate for Yarn. It&#39;s significantly faster and we have no time to waste. So install Yarn (on macOS we&#39;ll do a <code>brew install yarn</code>) then run <code>yarn add async axios cors bcrypt cosmicjs expres-session dateformat stripe truncate-html</code> . We&#39;re almost ready to start building.</p><h3>3. Set Up Cosmic</h3><p>Before we start building, we&#39;ll need to work out the schema for our Cosmic Bucket. We want to store <code>Posts</code>, <code>Users</code>, and <code>Configs</code> (to edit site configurations on the fly).</p><p>Those three object types will have the following matafields (all of type <em>text</em>, given by their <em>Title</em>):</p><h4>Post:</h4><table><thead><tr><th>Metafield</th><th align=\"right\">Value</th></tr></thead><tbody><tr><td>Premium</td><td align=\"right\"><strong>true</strong> or <strong>false</strong></td></tr></tbody></table><h4>User:</h4><table><thead><tr><th>Metafield</th><th align=\"right\">Value</th></tr></thead><tbody><tr><td>First name</td><td align=\"right\">string</td></tr><tr><td>Last name</td><td align=\"right\">string</td></tr><tr><td>Password</td><td align=\"right\">Hashed String</td></tr><tr><td>Email</td><td align=\"right\">string</td></tr><tr><td>Stripe Id</td><td align=\"right\">string</td></tr><tr><td>Subsription Type</td><td align=\"right\">string</td></tr></tbody></table><h4>Config:</h4><p><strong>Object: Subscriptions</strong>: | Metafield | Value | | --------------- | -----: | | Monthly Price | string | | Quarterly Price | string | | Yearly Price | string | | Cancellations | string |</p><p><strong>Object: Site</strong>: | Metafield | Value | | ---------- | -----: | | Site Title | string | | Domain | String |</p><p>Once you&#39;ve added your <code>Post</code>, <code>User</code>, and <code>Config</code> object types and created your <code>Subscriptions</code> and <code>Site</code> Config objects, we&#39;ll get ourselves set up with Stripe.</p><h3>4. Configure Stripe</h3><p>Since we&#39;ll be charging users for their premium subscriptions we&#39;ll need a payment processor. With a robust API, fair pay-as-you-go pricing, and proven security, using Stripe is a no brainer. Moving foward, we&#39;ll need both a &quot;Publishable&quot; and a &quot;Secret&quot; key for Stripe&#39;s API and we need to setup Subscription plans for Monthly, Yearly, and Quarterly subscriptions. Follow Stripe&#39;s instructions to create these subscriptions and give them the ID&#39;s <em>subscription-monthly</em>, <em>subscription-quarterly</em>, and <em>subscription-yearly</em> accordingly.</p><h3>5. Configure the Express App</h3><p>We have our packages installed, we worked out our data schema, and we&#39;ve set up a a Stripe account. Now we need to configure our Express backend.</p><p>The boilerplate Express code is pre-ES5, so for a consistent style we&#39;ll <code>require</code> the packages we need.</p><p>At the top of the Express app add:</p><pre>// app.js\r\nvar session = require(&#39;express-session&#39;)\r\nvar dateFormat = require(&#39;date-format&#39;)\r\nvar truncate = require(&#39;truncate-html&#39;)\r\nvar cors = require(&#39;cors&#39;)</pre><p>When we deploy our app, Cosmic will provide our Bucket keys as well as any custom keys we provide via <code>process.env</code>. Below the require statements, go ahead make those accessible throughout the app by storing them in <code>app.locals</code></p><pre>//app.js\r\n\r\nvar config = {\r\n    bucket: {\r\n        slug: process.env.COSMIC_BUCKET,\r\n     read_key: process.env.COSMIC_READ_KEY,\r\n      write_key: process.env.COSMIC_WRITE_KEY\r\n    }\r\n}\r\napp.locals.config = config\r\napp.locals.stripeKeyPublishable = process.env.STRIPE_PUBLISHABLE_KEY\r\napp.locals.stripeKeySecret = process.env.STRIPE_SECRET_KEY</pre><p>The last step is then to connect the <code>cors</code> and <code>session</code> middleware like so:</p><pre>//app.js\r\n\r\napp.locals.stripeKeySecret = process.env.STRIPE_SECRET_KEY\r\n\r\napp.use(session({\r\n  secret: &#39;sjcimsoc&#39;,\r\n  resave: false,\r\n  saveUninitialized: true,\r\n  cookie: { secure: false }\r\n}))\r\napp.use(cors())</pre><p>At this point we have a solid base to build our app on and can start drafting out its views.</p><h3>6. Sculpt Out the Views</h3><p>Having a model of how we want our blog to look and feel will help us think about how to wire up its routes. We&#39;ll start with the main layout.</p><p><strong>The Main Layout:</strong></p><p>In handlebars, every page will render inside the <code>body</code> tag of a default layout. In our boilerplate, this is <code>/views/layouts/main.handlebars</code>.</p><p>We need to make three alterations.</p><ol><li>in the <code>title</code> tag, swap out <code>{{title}}</code> for <code>{{config.site_title}}</code>, which we&#39;ll pass via <code>res.locals</code> later.</li><li>Before the end of the <code>head</code> tag add <code>&lt;script src=&quot;https://js.stripe.com/v3/&quot;&gt;&lt;/script&gt;</code>. This is Stripe&#39;s browser client. We only need this for the checkout form, however Stripe reccomends including it on every page to aid in fraud detection.</li><li>Include Bootstrap. Somewhere in the <code>head</code> tag add <code>&lt;link rel=&quot;stylesheet&quot; href=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css&quot; /&gt;</code> and right before the end of the <code>body</code> tag add</li></ol><pre><code>&lt;script src=&quot;https://code.jquery.com/jquery-3.2.1.min.js&quot;\r\n integrity=&quot;sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=&quot;\r\n crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;\r\n&lt;script src=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js&quot;&gt;&lt;/script&gt;\r\n</code></pre><p>The Main layout now looks like this:</p><pre>&lt;!-- views/layouts/main.handlebars --&gt;\r\n&lt;!doctype html&gt;\r\n&lt;html lang=&quot;en&quot;&gt;\r\n  &lt;head&gt;\r\n    &lt;meta charset=&quot;UTF-8&quot;&gt;\r\n    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width&quot;&gt;\r\n    &lt;title&gt;{{config.site_title}}&lt;/title&gt;\r\n    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css&quot; /&gt;\r\n    {{#if ENV_DEVELOPMENT}}\r\n      &lt;script src=&quot;http://localhost:35729/livereload.js&quot;&gt;&lt;/script&gt;\r\n    {{/if}}\r\n    &lt;script src=&quot;https://js.stripe.com/v3/&quot;&gt;&lt;/script&gt;\r\n\r\n  &lt;/head&gt;\r\n  &lt;body&gt;\r\n\r\n\r\n  {{{body}}}\r\n\r\n  &lt;script\r\n    src=&quot;https://code.jquery.com/jquery-3.2.1.min.js&quot;\r\n    integrity=&quot;sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=&quot;\r\n    crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;\r\n  &lt;script src=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js&quot;&gt;&lt;/script&gt;\r\n  &lt;/body&gt;\r\n&lt;/html&gt;</pre><p><strong>The Header Partial:</strong></p><p>Handlebars expects partials to be found in the <code>/views/partials</code> directory by default so we&#39;ll make <code>header.handlebars</code> there. It will look like this:</p><pre>&lt;header&gt;\r\n  &lt;div class=&quot;container&quot;&gt;\r\n    &lt;div class=&quot;row&quot;&gt;\r\n      &lt;div class=&quot;col-xs-12 text-center&quot;&gt;\r\n        &lt;h1&gt;{{config.site_title}}&lt;/h1&gt;\r\n      &lt;/div&gt;\r\n    &lt;/div&gt;\r\n  &lt;/div&gt;\r\n&lt;/header&gt;\r\n\r\n&lt;nav class=&quot;navbar navbar-default&quot;&gt;\r\n  &lt;div class=&quot;container-fluid&quot;&gt;\r\n    &lt;div class=&quot;navbar-header&quot;&gt;\r\n      &lt;button type=&quot;button&quot; class=&quot;navbar-toggle collapsed&quot; data-toggle=&quot;collapse&quot; data-target=&quot;#navbar-collapse-header&quot; aria-expanded=&quot;false&quot;&gt;\r\n        &lt;span class=&quot;sr-only&quot;&gt;Toggle navigation&lt;/span&gt;\r\n        &lt;span class=&quot;icon-bar&quot;&gt;&lt;/span&gt;\r\n        &lt;span class=&quot;icon-bar&quot;&gt;&lt;/span&gt;\r\n        &lt;span class=&quot;icon-bar&quot;&gt;&lt;/span&gt;\r\n      &lt;/button&gt;\r\n    &lt;/div&gt;\r\n\r\n    &lt;div class=&quot;collapse navbar-collapse&quot; id=&quot;navbar-collapse-header&quot;&gt;\r\n      &lt;ul class=&quot;nav navbar-nav&quot;&gt;\r\n        &lt;li {{#if route_posts}}class=&quot;active&quot;{{/if}}&gt;&lt;a href=&quot;/posts&quot;&gt;Posts&lt;span class=&quot;sr-only&quot;&gt;(current)&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;\r\n        &lt;li&gt;&lt;a href=&quot;/premium&quot;&gt;Premium Content&lt;/a&gt;&lt;/li&gt;\r\n      &lt;/ul&gt;\r\n      &lt;ul class=&quot;nav navbar-nav navbar-right&quot;&gt;\r\n        {{#if logged_in}}\r\n          &lt;li class=&quot;navbar-text text-center&quot;&gt;Welcome Back, {{user.first_name}}!&lt;/li&gt;\r\n          &lt;li&gt;&lt;a href=&quot;/logout&quot;&gt;Logout&lt;/a&gt;&lt;/li&gt;\r\n        {{/if}}\r\n\r\n        {{#unless logged_in}}\r\n          &lt;li {{#if route_login}}class=&quot;active&quot;{{/if}}&gt;&lt;a href=&quot;/login&quot;&gt;Login&lt;/a&gt;&lt;/li&gt;\r\n          &lt;li {{#if route_signup}}class=&quot;active&quot;{{/if}}&gt;&lt;a href=&quot;/plans&quot;&gt;Sign Up&lt;/a&gt;&lt;/li&gt;\r\n        {{/unless}}\r\n      &lt;/ul&gt;\r\n    &lt;/div&gt;\r\n  &lt;/div&gt;\r\n&lt;/nav&gt;</pre><p><strong>Note:</strong> In the header partial we take advantage of Handlebars&#39; built in <code>if</code> and <code>unless</code> helpers to make parts of our code route-specific. The we&#39;ll pass the relative booleans later in the route handlers.</p><p><strong>The Posts View</strong></p><p>On the Posts page we want to:</p><ol><li>Display the header</li><li>Show an error message if the user is trying to access premium posts without an account</li><li>Abstract the post display logic to its own partial to make our code cleaner and modular.</li></ol><p>For the error message, we&#39;ll rely on Handlebars&#39; <code>if</code> helper as we did before. For showing summaries of the posts, we&#39;ll be passing the posts to the view as an array of post objects. This lets us use the Handlebars <code>each</code> block helper to iterate over that array (each post being accessible as <code>this</code>). Our Posts view will then look like this:</p><pre>{{&gt; header}}\r\n&lt;div class=&quot;container&quot;&gt;\r\n  &lt;div class=&quot;row&quot;&gt;\r\n    {{#if error}}\r\n      &lt;div class=&quot;alert alert-danger&quot; role=&quot;alert&quot;&gt;\r\n        {{error}}\r\n      &lt;/div&gt;\r\n    {{/if}}\r\n    {{#each posts}}\r\n      {{&gt; post-container this}}\r\n    {{/each}}\r\n  &lt;/div&gt;\r\n&lt;/div&gt;</pre><p><strong>The Post Container partial:</strong></p><p>The next obvious step is to build the container to show summaries of each post on the Posts page. Beyond displaying the post&#39;s title and content (which is easily accessed with <code>this.title</code>, etc.) we want to show the user if the post is premium, as well as a truncation of the post&#39;s body and its creation date.</p><p>We&#39;ll again turn to the <code>if</code> helper to show a star beside the post if <code>this.metadata.premium</code> returns <code>true</code>, which is simple enough. For the blurb and creation date, we need to modify the <code>content</code> and <code>created_at</code> properties of the Post object; in the first place, to shorten it, in the latter, because Cosmic stores the date in ISO datetime format. To keep display logic out of our views, Handlebars provides us with functionality to write own helpers.</p><p>First, get the view code in place:</p><pre>&lt;!-- /views/partials/post-container.handlebars --&gt;\r\n\r\n&lt;div style=&quot;border-bottom: 3px solid #337ab7&quot; class=&quot;col-xs-12 col-md-8 col-md-offset-2&quot;&gt;\r\n  &lt;h2&gt;\r\n    {{#if this.metadata.premium}}\r\n      &lt;span style=&quot;font-size: 0.5em&quot; class=&quot;glyphicon glyphicon-star&quot;&gt;&lt;/span&gt;\r\n    {{/if}}\r\n    &lt;a href=&quot;/post/{{this.slug}}&quot;&gt;{{this.title}}&lt;/a&gt;\r\n  &lt;/h2&gt;\r\n  &lt;p style=&quot;margin: 35px 40px&quot;&gt;\r\n    {{truncateText this.content 20}} &lt;a href=&quot;/post/{{this.slug}}&quot;&gt;Read more&lt;/a&gt;\r\n  &lt;/p&gt;\r\n  &lt;em style=&quot;margin: 20px 0&quot; class=&quot;pull-right&quot;&gt;\r\n    {{date this.created_at}}\r\n  &lt;/em&gt;\r\n&lt;/div&gt;</pre><p>(Hint: our handlebars helpers will be named <em>truncateText</em> and <em>date</em>.)</p><p>Open <code>app.js</code> and find the snippet of code that sets Handlebars as the view engine. <code>exphbs</code> is a reference to <code>express-handlebars</code> and the object passed to it contains the parameters used to instantiate the engine. We need to add the <code>helpers</code> property to that object. The <code>helpers</code> property will then point to the <code>date</code> and <code>truncateText</code>methods as follows:</p><pre>// app.js\r\n\r\n// etc...\r\napp.engine(&#39;handlebars&#39;, exphbs({\r\n  defaultLayout: &#39;main&#39;,\r\n  partialsDir: [&#39;views/partials/&#39;],\r\n  helpers: {\r\n    date: function(date) {\r\n      return dateFormat(new Date(date), &quot;dddd, mmmm dS, yyyy&quot;)\r\n    },\r\n    truncateText: function(text, length) {\r\n      return truncate(text, length, { stripTags: true, byWords: true })\r\n    }\r\n  }\r\n}));\r\napp.set(&#39;views&#39;, path.join(__dirname, &#39;views&#39;));\r\napp.set(&#39;view engine&#39;, &#39;handlebars&#39;);\r\n// etc...</pre><p>To illustrate, <code>{{truncateText this.content 20}}</code> tells Handlebars to render the result of <code>truncate(this.content, 20, {...} )</code> .</p><p><strong>The Post View:</strong></p><p>Our users need to be able to read individual posts, so we&#39;ll build a simple view that get&#39;s passed an array that&#39;s one post long. (In the future, outside the scope of this guide, we may find it useful to use the view to display multiple full posts in succession.)</p><p>We&#39;ll also display an error if the post isn&#39;t found. Create your post view like so:</p><pre>&lt;!-- /views/post.handlebars --&gt;\r\n\r\n{{&gt; header}}\r\n{{#if not_found}}\r\n  &lt;div class=&quot;container&quot;&gt;\r\n    &lt;div class=&quot;row text-center&quot;&gt;\r\n      &lt;div class=&quot;col-xs12 col-md-6 col-md-offset-3&quot;&gt;\r\n        &lt;div class=&quot;alert alert-danger&quot;&gt;\r\n          Post Not Found!\r\n        &lt;/div&gt;\r\n        &lt;a href=&quot;/posts&quot;&gt;See All Posts&lt;/a&gt;\r\n      &lt;/div&gt;\r\n    &lt;/div&gt;\r\n  &lt;/div&gt;\r\n{{/if}}\r\n\r\n{{#each post}}\r\n  &lt;article class=&quot;container&quot;&gt;\r\n    &lt;div class=&quot;row&quot;&gt;\r\n      &lt;div class=&quot;col-xs-12 col-sm-8 col-sm-offset-2&quot;&gt;\r\n        &lt;h1&gt;{{this.title}}&lt;/h1&gt;\r\n        &lt;div class=&quot;lead&quot; style=&quot;font-size: 1.5em&quot;&gt;\r\n          {{{this.content}}}\r\n        &lt;/div&gt;\r\n        &lt;em class=&quot;pull-right&quot;&gt;\r\n          &lt;time&gt;{{date this.created_at}}&lt;/time&gt;\r\n        &lt;/em&gt;\r\n      &lt;/div&gt;\r\n    &lt;/div&gt;\r\n  &lt;/article&gt;\r\n{{/each}}</pre><p><strong>The Login Page:</strong></p><p>The login page will be the simplest yet - a basic form that POSTs to a login route.</p><pre>&lt;!-- /views/login.handlebars --&gt;\r\n\r\n{{&gt; header}}\r\n\r\n&lt;div class=&quot;container&quot;&gt;\r\n  &lt;div class=&quot;row&quot;&gt;\r\n    &lt;div class=&quot;col-xs-12 col-sm-4 col-sm-offset-4&quot;&gt;\r\n      &lt;h1&gt;Log In&lt;/h1&gt;\r\n      &lt;p class=&quot;text-muted&quot;&gt;\r\n        Log in to view premium content.\r\n      &lt;/p&gt;\r\n\r\n      &lt;form method=&quot;post&quot;&gt;\r\n        &lt;input class=&quot;form-control&quot; type=&quot;email&quot; name=&quot;email&quot; placeholder=&quot;Email&quot; required/&gt;\r\n        &lt;input type=&quot;password&quot; class=&quot;form-control&quot; name=&quot;password&quot; placeholder=&quot;Password&quot; required /&gt;\r\n        &lt;button class=&quot;btn btn-lg btn-primary btn-block submit-btn&quot; type=&quot;submit&quot;&gt;Log in&lt;/button&gt;\r\n      &lt;/form&gt;\r\n    &lt;/div&gt;\r\n  &lt;/div&gt;\r\n&lt;/div&gt;\r\n\r\n&lt;style&gt;\r\n  form &gt; input, button {\r\n    margin-top: 12px;\r\n  }\r\n&lt;/style&gt;</pre><p><strong>The Plans Page:</strong></p><p>Obviously, our users will need to be able to signup before they can login, but since we&#39;re giving them the option to choose one of three subscription plans we&#39;ll build out a view that shows them their options just before checking out. Later, we&#39;ll need to pass the Subscriptions object to this view so we can set the plan prices from Cosmic, rather than hard coding them. The view will look like this:</p><pre>&lt;!-- /views/plans.handlebars --&gt;\r\n\r\n{{&gt; header}}\r\n\r\n&lt;div class=&quot;container&quot;&gt;\r\n  &lt;div class=&quot;row text-center lead&quot;&gt;\r\n    &lt;h1&gt;Choose a Plan to Read Premium Content&lt;/h1&gt;\r\n    &lt;p&gt;\r\n      Sign up to view Premium Content on {{config.site_title}}\r\n    &lt;/p&gt;\r\n  &lt;/div&gt;\r\n\r\n  &lt;div class=&quot;row&quot;&gt;\r\n    &lt;div class=&quot;col-sm-4&quot;&gt;\r\n      &lt;h3 class=&quot;text-center text-muted&quot;&gt;\r\n        Monthly\r\n      &lt;/h3&gt;\r\n      &lt;p class=&quot;text-center&quot;&gt;\r\n        &lt;strong&gt;Billed every month&lt;/strong&gt;\r\n      &lt;/p&gt;\r\n      &lt;h1 class=&quot;text-center text-success&quot;&gt;{{subscriptions.monthly_price}}&lt;/h1 class=&quot;text-center text-success&quot;&gt;\r\n      &lt;ul class=&quot;list-unstyled lead&quot; style=&quot;padding: 0 20px&quot;&gt;\r\n        &lt;li&gt;\r\n          &lt;span class=&quot;glyphicon glyphicon-ok text-success&quot;&gt;&lt;/span&gt;Here&#39;s a good benefit\r\n        &lt;/li&gt;\r\n        &lt;li&gt;\r\n          &lt;span class=&quot;glyphicon glyphicon-ok text-success&quot;&gt;&lt;/span&gt;A reason to buy\r\n        &lt;/li&gt;\r\n        &lt;li&gt;\r\n          &lt;span class=&quot;glyphicon glyphicon-ok text-success&quot;&gt;&lt;/span&gt;Why you have to have it\r\n        &lt;/li&gt;\r\n        &lt;li&gt;\r\n          &lt;span class=&quot;glyphicon glyphicon-ok text-success&quot;&gt;&lt;/span&gt;Why you shouldn&#39;t miss out\r\n        &lt;/li&gt;\r\n        &lt;li&gt;\r\n          &lt;span class=&quot;glyphicon glyphicon-ok text-success&quot;&gt;&lt;/span&gt;Believe it.\r\n        &lt;/li&gt;\r\n      &lt;/ul&gt;\r\n      &lt;a href=&quot;/signup?plan=monthly&quot;&gt;&lt;button class=&quot;btn btn-block btn-default btn-lg&quot;&gt;Sign Up&lt;/button&gt;&lt;/a&gt;\r\n    &lt;/div&gt;\r\n    &lt;div class=&quot;col-sm-4&quot; style=&quot;border: 2px solid #3c763d&quot;&gt;\r\n      &lt;h3 style=&quot;background: #3c763d;color: white;padding: 7px 0&quot; class=&quot;text-center text-success&quot;&gt;\r\n        Yearly\r\n      &lt;/h3&gt;\r\n      &lt;p class=&quot;text-center&quot;&gt;\r\n        &lt;strong&gt;Billed every 12 months&lt;/strong&gt;\r\n      &lt;/p&gt;\r\n      &lt;h1 class=&quot;text-center text-success&quot;&gt;{{subscriptions.yearly_price}}&lt;/h1&gt;\r\n        &lt;ul class=&quot;list-unstyled lead&quot; style=&quot;padding: 0 20px&quot;&gt;\r\n          &lt;li&gt;\r\n            &lt;span class=&quot;glyphicon glyphicon-ok text-success&quot;&gt;&lt;/span&gt;Here&#39;s a good benefit\r\n          &lt;/li&gt;\r\n          &lt;li&gt;\r\n            &lt;span class=&quot;glyphicon glyphicon-ok text-success&quot;&gt;&lt;/span&gt;A reason to buy\r\n          &lt;/li&gt;\r\n          &lt;li&gt;\r\n            &lt;span class=&quot;glyphicon glyphicon-ok text-success&quot;&gt;&lt;/span&gt;Why you have to have it\r\n          &lt;/li&gt;\r\n          &lt;li&gt;\r\n            &lt;span class=&quot;glyphicon glyphicon-ok text-success&quot;&gt;&lt;/span&gt;Why you shouldn&#39;t miss out\r\n          &lt;/li&gt;\r\n          &lt;li&gt;\r\n            &lt;span class=&quot;glyphicon glyphicon-ok text-success&quot;&gt;&lt;/span&gt;Believe it.\r\n          &lt;/li&gt;\r\n        &lt;/ul&gt;\r\n        &lt;a href=&quot;/signup?plan=yearly&quot;&gt;&lt;button class=&quot;btn btn-block btn-default btn-lg&quot;&gt;Sign Up&lt;/button&gt;&lt;/a&gt;\r\n    &lt;/div&gt;\r\n    &lt;div class=&quot;col-sm-4&quot;&gt;\r\n      &lt;h3 class=&quot;text-center text-muted&quot;&gt;\r\n        Quarterly\r\n      &lt;/h3&gt;\r\n      &lt;p class=&quot;text-center&quot;&gt;\r\n        &lt;strong&gt;Billed every 3 months&lt;/strong&gt;\r\n      &lt;/p&gt;\r\n      &lt;h1 class=&quot;text-center text-success&quot;&gt;{{subscriptions.quarterly_price}}&lt;/h1 class=&quot;text-center text-success&quot;&gt;\r\n        &lt;ul class=&quot;list-unstyled lead&quot; style=&quot;padding: 0 30px&quot;&gt;\r\n          &lt;li&gt;\r\n            &lt;span class=&quot;glyphicon glyphicon-ok text-success&quot;&gt;&lt;/span&gt;Here&#39;s a good benefit\r\n          &lt;/li&gt;\r\n          &lt;li&gt;\r\n            &lt;span class=&quot;glyphicon glyphicon-ok text-success&quot;&gt;&lt;/span&gt;A reason to buy\r\n          &lt;/li&gt;\r\n          &lt;li&gt;\r\n            &lt;span class=&quot;glyphicon glyphicon-ok text-success&quot;&gt;&lt;/span&gt;Why you have to have it\r\n          &lt;/li&gt;\r\n          &lt;li&gt;\r\n            &lt;span class=&quot;glyphicon glyphicon-ok text-success&quot;&gt;&lt;/span&gt;Why you shouldn&#39;t miss out\r\n          &lt;/li&gt;\r\n          &lt;li&gt;\r\n            &lt;span class=&quot;glyphicon glyphicon-ok text-success&quot;&gt;&lt;/span&gt;Believe it.\r\n          &lt;/li&gt;\r\n        &lt;/ul&gt;\r\n        &lt;a href=&quot;/signup?plan=quarterly&quot;&gt;&lt;button class=&quot;btn btn-block btn-default btn-lg&quot;&gt;Sign Up&lt;/button&gt;&lt;/a&gt;\r\n    &lt;/div&gt;\r\n  &lt;/div&gt;\r\n&lt;/div&gt;\r\n\r\n\r\n\r\n&lt;style&gt;\r\n  form &gt; input, button {\r\n    margin-top: 12px;\r\n  }\r\n  ul.lead {\r\n    margin-top: 40px\r\n  }\r\n  .lead &gt; li {\r\n    margin: 8px 0\r\n  }\r\n  .glyphicon {\r\n    margin-right: 12px\r\n  }\r\n  .btn {\r\n    margin: 35px 0px;\r\n  }\r\n&lt;/style&gt;</pre><p><em>Notice that each Sign Up button links to the <code>signup</code> route, passing a query paramter associated with the plan selected. I.e. <code>/signup?plan={:plan}</code></em></p><p><strong>The Signup Page:</strong></p><p>Last, but certainly not least - the money maker. We&#39;ve saved our most complicated view for last. These are our requirements:</p><ol><li>We need to pass the plan chosen on the page before in <code>planName</code>. (Later we&#39;ll do this in a URL query string)</li><li>We need to use the Stripe Elements API for collecting credit card information. This is what we included <code>Stripe.js</code> in the Main layout earlier. At the end of our checkout form we need two <code>div</code>s; one ID&#39;d <code>card-element</code> and the other ID&#39;d <code>card-errors</code> for <code>Stripe.js</code> to inject into after the initial DOM rendering.</li><li>We need to pass our publishable stripe key to make it all work.</li></ol><p>Starting with the HTML we have:</p><pre>&lt;!-- /views/signup.handlebars --&gt;\r\n{{&gt;header}}\r\n\r\n&lt;div class=&quot;container&quot;&gt;\r\n  &lt;div class=&quot;row&quot;&gt;\r\n    &lt;form method=&quot;post&quot; id=&quot;payment-form&quot;&gt;\r\n      &lt;div class=&quot;col-xs-12 text-center&quot;&gt;\r\n        &lt;h4 class=&quot;lead&quot;&gt;&lt;em&gt;You&#39;re one step away from a &lt;u&gt;{{planName}}&lt;/u&gt; subscription to {{config.site_title}}!&lt;/em&gt;&lt;/h4&gt;\r\n      &lt;/div&gt;\r\n    &lt;/div&gt;\r\n    &lt;div class=&quot;row&quot;  style=&quot;margin-top: 30px&quot;&gt;\r\n      &lt;div class=&quot;col-md-8 col-md-offset-2&quot;&gt;\r\n        &lt;h4&gt;Enter your account details and payment information&lt;/h4&gt;\r\n\r\n        &lt;label for=&quot;first_name&quot;&gt;First name:&lt;/label&gt;\r\n        &lt;input type=&quot;text&quot; name=&quot;first_name&quot; class=&quot;form-control&quot; placeholder=&quot;First name&quot; required /&gt;\r\n        &lt;label for=&quot;last_name&quot;&gt;Last name:&lt;/label&gt;\r\n        &lt;input type=&quot;text&quot; name=&quot;last_name&quot; class=&quot;form-control&quot; placeholder=&quot;Last name&quot; required /&gt;\r\n        &lt;label for=&quot;email&quot;&gt;Email:&lt;/label&gt;\r\n        &lt;input type=&quot;email&quot; name=&quot;email&quot; class=&quot;form-control&quot; placeholder=&quot;Email&quot; required /&gt;\r\n        &lt;label for=&quot;password&quot;&gt;Password&lt;/label&gt;\r\n        &lt;input type=&quot;password&quot; name=&quot;password&quot; class=&quot;form-control&quot; placeholder=&quot;Password&quot; required /&gt;\r\n        &lt;label for=&quot;card-element&quot;&gt;Credit or debit card&lt;/label&gt;\r\n        &lt;div class=&quot;form-control&quot; id=&quot;card-element&quot;&gt;&lt;/div&gt;\r\n        &lt;div id=&quot;card-errors&quot; role=&quot;alert&quot;&gt;&lt;/div&gt;\r\n        &lt;button id=&quot;submit-button&quot; class=&quot;btn-success btn btn-lg btn-block btn-default&quot; &gt;Submit Payment&lt;/button&gt;\r\n\r\n      &lt;/div&gt;\r\n    &lt;/div&gt;\r\n    &lt;/form&gt;\r\n&lt;/div&gt; </pre><p>Then, for simplicity, we&#39;ll follow this with an inline script that integrates Stripe:</p><pre>&lt;!-- views/signup.handlebars --&gt;\r\n\r\n&lt;script&gt;\r\n  var stripe = Stripe(&#39;{{stripeKeyPublishable}}&#39;)\r\n  var elements = stripe.elements()\r\n  var card = elements.create(&#39;card&#39;)\r\n  var style = {\r\n      base: {\r\n        color: &#39;#32325d&#39;,\r\n        lineHeight: &#39;24px&#39;,\r\n        fontFamily: &#39;&quot;Helvetica Neue&quot;, Helvetica, sans-serif&#39;,\r\n        fontSmoothing: &#39;antialiased&#39;,\r\n        fontSize: &#39;16px&#39;,\r\n        &#39;::placeholder&#39;: {\r\n          color: &#39;#aab7c4&#39;\r\n        }\r\n      },\r\n      invalid: {\r\n        color: &#39;#fa755a&#39;,\r\n        iconColor: &#39;#fa755a&#39;\r\n      }\r\n    };\r\n\r\n  card.mount(&#39;#card-element&#39;, {style: style})\r\n\r\n  // Handle real-time validation errors from the card Element.\r\ncard.addEventListener(&#39;change&#39;, function(event) {\r\n  var displayError = document.getElementById(&#39;card-errors&#39;);\r\n  if (event.error) {\r\n    displayError.textContent = event.error.message;\r\n  } else {\r\n    displayError.textContent = &#39;&#39;;\r\n  }\r\n});\r\n\r\n// Handle form submission\r\nvar form = document.getElementById(&#39;payment-form&#39;);\r\nvar submitButton = document.getElementById(&#39;submit-button&#39;);\r\nform.addEventListener(&#39;submit&#39;, function(event) {\r\n  event.preventDefault();\r\n  submitButton.disabled=true\r\n  stripe.createToken(card).then(function(result) {\r\n    if (result.error) {\r\n      // Inform the user if there was an error\r\n      var errorElement = document.getElementById(&#39;card-errors&#39;);\r\n      errorElement.textContent = result.error.message;\r\n      submitButton.disabled=false\r\n    } else {\r\n      // Send the token to your server\r\n      stripeTokenHandler(result.token);\r\n    }\r\n  });\r\n});\r\n\r\nfunction stripeTokenHandler(token) {\r\n  // Insert the token ID into the form so it gets submitted to the server\r\n  var form = document.getElementById(&#39;payment-form&#39;);\r\n  var hiddenInput = document.createElement(&#39;input&#39;);\r\n  hiddenInput.setAttribute(&#39;type&#39;, &#39;hidden&#39;);\r\n  hiddenInput.setAttribute(&#39;name&#39;, &#39;stripeToken&#39;);\r\n  hiddenInput.setAttribute(&#39;value&#39;, token.id);\r\n  form.appendChild(hiddenInput);\r\n  // Submit the form\r\n  form.submit();\r\n}\r\n&lt;/script&gt;\r\n\r\n&lt;style&gt;\r\n  label,button {\r\n    margin-top: 22px;\r\n  }\r\n&lt;/style&gt;</pre><p>Here&#39;s what&#39;s going on:</p><ol><li>We instantiate Stripe with the Publishable key we passed, assign its <code>elements</code> library to its own variable, use that to create a <code>card</code> element, and finally mount that to the <code>&lt;div id=&quot;card-element&quot;&gt;</code> we created earlier. The card object handles card validation, comes packaged with good UX features, and reports errors back to the user in real time.</li><li>We attach an event listener to the card object that responds to any change in either the user-inputted card number, CCV, or expiration date. It mounts that error on <code>&lt;div id=&quot;card-errors&quot;&gt;</code></li><li>We handle the form submission manually. First, we prevent the default action and disable multiple submissions. Then, barring no errors, we attach a hidden field to the form that contains Stripe&#39;s validation token, provided by <code>Stripe.js</code>, and <em>then</em> submit the form to the <code>Signup</code> route.</li></ol><h3>7. Build the Routes</h3><p>With our views built, we know exactly what routes our application needs. Namely:</p><ul><li>Posts</li><li>Post</li><li>Premium</li><li>Login</li><li>Logout</li><li>Signup</li><li>Plans</li></ul><p>By default, your app has a <code>Users</code> route and an <code>Index</code> route. Delete <code>Users</code> and make <code>Index</code> redirect to <code>Posts</code> like so:</p><pre>// /routes/index.js\r\n\r\nvar express = require(&#39;express&#39;)\r\nvar router = express.Router()\r\n\r\nrouter.get(&#39;/&#39;, function(req, res) {\r\n  res.redirect(&#39;/posts&#39;)\r\n});\r\n\r\nmodule.exports = router</pre><p><strong>The Posts Route:</strong></p><p>Posts will use <code>async</code> to string together a series of async functions: one using the Cosmic client to get our Posts, the next using Cosmic to get the site config and render the <code>posts</code> view, passing in the relevant locals. If the user is not in an authenticated session, we&#39;ll use <code>lodash</code> to filter out the posts returned from Cosmic which <em>have not</em> been labelled premium (and are therefore free to read). We&#39;ll pass the Posts, Config, and route-specific view data via <code>res.locals</code>.</p><pre>var express = require(&#39;express&#39;);\r\nvar router = express.Router();\r\nvar cosmic = require(&#39;cosmicjs&#39;);\r\nvar async = require(&#39;async&#39;);\r\nvar _ = require(&#39;lodash&#39;)\r\n\r\nrouter.get(&#39;/&#39;, function(req, res) {\r\n  async.series([\r\n    function(cb) {\r\n      cosmic.getObjectType(req.app.locals.config, { type_slug: &#39;posts&#39; }, function(err, response) {\r\n        (req.session.user) ? res.locals.posts = response.objects.all : res.locals.posts = _.filter(response.objects.all, function(post) {\r\n          return !post.metadata.premium\r\n        })\r\n        cb()\r\n      })\r\n    },\r\n    function(cb) {\r\n      cosmic.getObject(req.app.locals.config, { slug: &#39;site&#39; }, function(err, response) {\r\n        res.locals.config = response.object.metadata\r\n        res.locals.user = req.session.user\r\n        res.locals.route_posts = true\r\n        if (req.session.user) res.locals.logged_in = true\r\n        return res.render(&#39;posts.handlebars&#39;)\r\n      })=\r\n    }\r\n  ])\r\n});\r\n\r\nmodule.exports = router;</pre><p><strong>The Post Route:</strong></p><p>Having a route for all posts, we&#39;ll need a companion route for a singular post that takes the post slug as a URL parameter and returns that post if it&#39;s found, utilizing similar logic as the <code>Posts</code> route.</p><pre>// routes/post.js\r\n\r\nvar express = require(&#39;express&#39;);\r\nvar router = express.Router();\r\nvar cosmic = require(&#39;cosmicjs&#39;);\r\nvar async = require(&#39;async&#39;);\r\nvar _ = require(&#39;lodash&#39;)\r\n\r\nrouter.get(&#39;/:slug&#39;, function(req, res) {\r\n  async.series([\r\n    function(cb) {\r\n      cosmic.getObjectType(req.app.locals.config, { type_slug: &#39;posts&#39; }, function(err, response) {\r\n        res.locals.post = _.filter(response.objects.all, function(post) {\r\n          return post.slug === req.params.slug\r\n        })\r\n        if (!res.locals.post) res.locals.not_found = true\r\n        cb()\r\n      })\r\n    },\r\n    function(cb) {\r\n      cosmic.getObject(req.app.locals.config, { slug: &#39;site&#39; }, function(err, response) {\r\n        res.locals.config = response.object.metadata\r\n        res.locals.user = req.session.user\r\n        return res.render(&#39;post.handlebars&#39;)\r\n      })\r\n    }\r\n  ])\r\n});\r\n\r\nmodule.exports = router</pre><p><strong>The Login Route:</strong></p><p>To let users have access to premium posts, we&#39;ll need to collect their login information, hash their password with bcrypt, and check it against the password associated with the email address stored in Cosmic.</p><p>A GET request will render the login form. We then handle the form&#39;s POST request by retrieiving all users from Cosmic and iteratating over all users with a series of two async functions: one using bcrypt to compare password hashes, the next saving the user&#39;s data into a session if they&#39;re found.</p><pre>// routes/login.js\r\n\r\nvar express = require(&#39;express&#39;);\r\nvar router = express.Router();\r\nvar cosmic = require(&#39;cosmicjs&#39;);\r\nvar async = require(&#39;async&#39;);\r\nvar _ = require(&#39;lodash&#39;)\r\nvar bcrypt = require(&#39;bcrypt&#39;)\r\n\r\nrouter.get(&#39;/&#39;, function(req, res) {\r\n  async.series([\r\n    function(cb) {\r\n      cosmic.getObject(req.app.locals.config, { slug: &#39;site&#39; }, function(err, response) {\r\n        res.locals.config = response.object.metadata\r\n        res.locals.route_login = true\r\n        return res.render(&#39;login.handlebars&#39;)\r\n      })\r\n    }\r\n  ])\r\n});\r\n\r\nrouter.post(&#39;/&#39;, function(req, res) {\r\n  cosmic.getObjectType(req.app.locals.config, { type_slug: &#39;users&#39; }, function (err, response) {\r\n    if (err) res.status(500).json({ status: &#39;error&#39;, data: response })\r\n    else {\r\n      async.eachSeries(response.objects.all, function (user, eachCb) {\r\n        if (!_.find(user.metafields, { key: &#39;email&#39;, value: req.body.email.trim().toLowerCase() }))\r\n          return eachCb()\r\n        const stored_password = _.find(user.metafields, { key: &#39;password&#39; }).value\r\n        bcrypt.compare(req.body.password, stored_password, function (err, correct) {\r\n          if (correct) res.locals.user_found = user\r\n          eachCb()\r\n        })\r\n      }, function () {\r\n        if (res.locals.user_found) {\r\n          req.session.user = {\r\n            first_name: res.locals.user_found.metafield.first_name.value,\r\n            last_name: res.locals.user_found.metafield.last_name.value,\r\n            email: res.locals.user_found.metafield.email.value\r\n          }\r\n          req.session.save()\r\n          return res.redirect(&#39;/posts&#39;)\r\n        }\r\n        return res.status(404).json({ status: &#39;error&#39;, message: &#39;User not found&#39; })\r\n      })\r\n    }\r\n  })\r\n})\r\n\r\nmodule.exports = router</pre><p><strong>The Plans Route:</strong></p><p>Before a user can log in, we need a sign up form so we can have users in the first place. As said before, we&#39;ll show them their subscription options right before the signup form. This does nothing more than pass the Site and Subscription configs before rendering the view:</p><pre>var express = require(&#39;express&#39;);\r\nvar router = express.Router();\r\nvar cosmic = require(&#39;cosmicjs&#39;);\r\nvar async = require(&#39;async&#39;)\r\n\r\nrouter.get(&#39;/&#39;, function(req, res) {\r\n  async.series([\r\n    function(cb) {\r\n      cosmic.getObject(req.app.locals.config, { slug: &#39;site&#39; }, function(err, response) {\r\n        res.locals.config = response.object.metadata\r\n        res.locals.route_signup = true\r\n        cb()\r\n      })\r\n    },\r\n    function(cb) {\r\n      cosmic.getObject(req.app.locals.config, { slug: &#39;subscriptions&#39; }, function(err, response) {\r\n        res.locals.subscriptions = response.object.metadata\r\n        res.render(&#39;plans.handlebars&#39;)\r\n      })\r\n    }\r\n  ])\r\n});\r\n\r\nmodule.exports = router;</pre><p><strong>The Signup Route:</strong></p><p>As you might have guessed, the signup route has the most going on out of them all. Here&#39;s what we need to implement:</p><ol><li>On a GET request, render the signup form and pass our publishable Stripe key through <code>res.locals</code> for Stripe.js to work.</li><li>On a Post request:<ol><li>Instantiate Stripe server-side with our secret key</li><li>If a user&#39;s already logged in, redirect them.</li><li>Run a series of two <em>named</em> async functions (so we can use their return values after both have completed) to fetch our subscription data from Cosmic and hash the password.</li><li>Having completed Step 3, we use the Stripe API to create a new customer, associating their payment method via the Stripe token we passed from the signup form.</li><li>We then charge that customer based on the plan selected and create a new subscription (again, via Stripe) so recurring payments are processed automatically.</li><li>We create a new User object based on our Cosmic schema, add that to our bucket, and once that&#39;s succesful we create a new session for the user and redirect them to the <code>Posts</code> route, where they&#39;ll now be able to view premium content.</li></ol></li></ol><p>All complete, it will look like this:</p><pre>// routes/signup.js\r\n\r\nvar express = require(&#39;express&#39;);\r\nvar router = express.Router();\r\nvar cosmic = require(&#39;cosmicjs&#39;);\r\nvar async = require(&#39;async&#39;);\r\nvar bcrypt = require(&#39;bcrypt&#39;)\r\n\r\nrouter.get(&#39;/&#39;, function(req, res) {\r\n  if (req.session.user) res.redirect(&#39;/&#39;)\r\n  async.series([\r\n    function(cb) {\r\n      cosmic.getObject(req.app.locals.config, { slug: &#39;site&#39; }, function(err, response) {\r\n        res.locals.config = response.object.metadata\r\n        res.locals.route_signup = true\r\n        cb()\r\n      })\r\n    },\r\n    function(cb) {\r\n      cosmic.getObject(req.app.locals.config, { slug: &#39;subscriptions&#39; }, function(err, response) {\r\n        res.locals.subscriptions = response.object.metadata\r\n        res.locals.stripeKeyPublishable = req.app.locals.stripeKeyPublishable\r\n        res.locals.planName = req.query.plan\r\n        res.render(&#39;signup.handlebars&#39;)\r\n      })\r\n    }\r\n  ])\r\n});\r\n\r\nrouter.post(&#39;/&#39;, function(req, res) {\r\n  var stripe = require(&#39;stripe&#39;)(req.app.locals.stripeKeySecret)\r\n  if (req.session.user) res.redirect(&#39;/&#39;)\r\n\r\n  async.series({\r\n    subscriptions: function(callback) {\r\n      cosmic.getObject(req.app.locals.config, { slug: &#39;subscriptions&#39; }, function(err, response) {\r\n        callback(null, response.object.metadata)\r\n      })\r\n    },\r\n    hash: function (callback) {\r\n      bcrypt.hash(req.body.password, 10, function (err, hash) {\r\n        callback(null, hash)\r\n      })\r\n    }\r\n  }, function (err, results) {\r\n\r\n    stripe.customers.create({\r\n      email: req.body.email,\r\n      source: req.body.stripeToken\r\n    }).then(function (customer) {\r\n      return stripe.charges.create({\r\n        amount: results.subscriptions[req.query.plan + &quot;_price&quot;].replace(/[$]/,&#39;&#39;) + &#39;00&#39;,\r\n        currency: &quot;usd&quot;,\r\n        customer: customer.id\r\n      })\r\n    }).then(function (charge) {\r\n      stripe.subscriptions.create({\r\n        customer: charge.customer,\r\n        items: [\r\n          {\r\n            plan: &#39;subscription-&#39; + req.query.plan\r\n          }\r\n        ]\r\n      })\r\n      var object = {\r\n        type_slug: &#39;users&#39;,\r\n        title: req.body.first_name + &#39; &#39; + req.body.last_name,\r\n        metafields: [\r\n          {\r\n            title: &#39;First name&#39;,\r\n            key: &#39;first_name&#39;,\r\n            type: &#39;text&#39;,\r\n            value: req.body.first_name\r\n          },\r\n          {\r\n            title: &#39;Last name&#39;,\r\n            key: &#39;last_name&#39;,\r\n            type: &#39;text&#39;,\r\n            value: req.body.last_name\r\n          },\r\n          {\r\n            title: &#39;Password&#39;,\r\n            key: &#39;password&#39;,\r\n            type: &#39;text&#39;,\r\n            value: results.hash\r\n          },\r\n          {\r\n            title: &#39;Email&#39;,\r\n            key: &#39;email&#39;,\r\n            type: &#39;text&#39;,\r\n            value: req.body.email\r\n          },\r\n          {\r\n            title: &#39;Stripe Id&#39;,\r\n            key: &#39;stripe_id&#39;,\r\n            type: &#39;text&#39;,\r\n            value: charge.customer\r\n          },\r\n          {\r\n            title: &#39;Subscription Type&#39;,\r\n            key: &#39;subscription_type&#39;,\r\n            type: &#39;text&#39;,\r\n            value: req.query.plan\r\n          }\r\n        ]\r\n      }\r\n      if (req.app.locals.config.bucket.write_key) object.write_key = req.app.locals.config.bucket.write_key\r\n      cosmic.addObject(req.app.locals.config, object, function (err, reponse) {\r\n        if (err)\r\n          res.status(500).json({ data: reponse })\r\n        else {\r\n          req.session.user = {\r\n            first_name: req.body.first_name,\r\n            last_name: req.body.last_name,\r\n            email: req.body.email\r\n          }\r\n          req.session.save()\r\n          res.redirect(&#39;/posts&#39;)\r\n        }\r\n      })\r\n    })\r\n  })\r\n})\r\n\r\nmodule.exports = router</pre><p><strong>The Logout Route:</strong></p><p>To be user friendly we&#39;ll need to give our users a chance to log out. All this requires is a POST request to <code>/logout</code>and a quick <code>session.destroy()</code> call.</p><pre>var express = require(&#39;express&#39;)\r\nvar router = express.Router()\r\n\r\n/* GET home page. */\r\n\r\nrouter.get(&#39;/&#39;, function(req, res) {\r\n  req.session.destroy()\r\n  return res.redirect(&#39;/&#39;)\r\n});\r\n\r\nmodule.exports = router</pre><p><strong>Wiring Them All Together:</strong></p><p>Having all of our routes built and ready to work as we need them to, we&#39;ll <code>require</code> them all in our app and point their associated enpoints to them via <code>app.use()</code></p><pre>// app.js\r\n\r\nvar routes = require(&#39;./routes/index&#39;);\r\nvar posts = require(&#39;./routes/posts&#39;);\r\nvar post = require(&#39;./routes/post&#39;)\r\nvar login = require(&#39;./routes/login&#39;)\r\nvar logout = require(&#39;./routes/logout&#39;)\r\nvar signup = require(&#39;./routes/signup&#39;)\r\nvar plans = require(&#39;./routes/plans&#39;)\r\nvar premium = require(&#39;./routes/premium&#39;)\r\nvar api = require(&#39;./routes/api&#39;)\r\n\r\napp.use(&#39;/&#39;, routes);\r\napp.use(&#39;/post&#39;, post)\r\napp.use(&#39;/posts&#39;, posts)\r\napp.use(&#39;/login&#39;, login)\r\napp.use(&#39;/logout&#39;, logout)\r\napp.use(&#39;/signup&#39;, signup)\r\napp.use(&#39;/plans&#39;, plans)\r\napp.use(&#39;/premium&#39;, premium)\r\napp.use(&#39;/api&#39;, api)</pre><p><strong>Moving On to the Extension:</strong></p><p>If you&#39;ve done everything right up until this point, your blog now works exactly as you&#39;d expect it to. To test, go ahead and run <code>npm start</code>, create a few posts in Cosmic and verify that they&#39;re being fetched. Then create a dummy account and make sure it&#39;s being stored in Cosmic and registered by Stripe. Then, we&#39;ll build our dashboard extension for Cosmic.</p><h1>Part 2: Building the Extension</h1><p>Stripe provides us with an impressive amount of analytics, however we want a central location to get a quick glance at a list of all of our users, what subscription plan they&#39;re on, and three key metrics about our blog: revenue to date, active subscriptions, and cancellations to date.</p><p>Cosmic gives us the ability to do this by utilizing its extension feature, which lets us upload a SPA with <code>index.html</code> as an entry point that gets loaded into a frame in our Cosmic dashboard. Bucket keys are then provided to it via URL query strings.</p><p>We&#39;ll be building the extension with React, namely because our extension only requires a view layer.</p><h3>Setup</h3><p>To keep ourselves organized we&#39;ll store our app under our <code>CosmicUserBlog</code> directory. Our tree will look like this:</p><pre><code>CosmicUserBlog\r\n|\r\n|--extensions\r\n| |--subscription-management\r\n| | |--client\r\n| | | |--components\r\n| | | |--index.js\r\n| | | |--index.html\r\n| | |--dist\r\n</code></pre><p>Once you have your directory structure in place, run <code>yarn init</code> and we&#39;ll move onto installaitons.</p><h3>Installations</h3><p>We need these packages:</p><ul><li>async</li><li>axios</li><li>babel-preset-2015</li><li>Babel-preset-2016</li><li>cosmicjs</li><li>html-webpack-plugin - for generating our html with webpack</li><li>lodash</li><li>query-string - an easy way to parse bucket keys</li><li>path</li><li>react</li><li>react-dom</li><li>react-loading</li><li>webpack</li><li>babel-core</li><li>babel-loader</li><li>babel-preset-react</li></ul><p>Run <code>yarn add async axios babel-preset-2015 babel-preset-2016 cosmicjs html-webpack-plugin lodash query-string path react react-dom react-loading webpack babel-core babel-loader-babel-preset-react</code>, then we&#39;ll dive in.</p><h3>Configure Webpack and Babel</h3><p>First, make <code>.babelrc</code> in the root folder and tell it how to transpile our code:</p><pre>// .babelrc\r\n\r\n{\r\n  &quot;presets&quot;: [\r\n    &quot;es2016&quot;, &quot;es2015&quot;, &quot;react&quot;\r\n  ]\r\n}</pre><p>Then, again under <code>CosmicUserBlog/extensions/subscription-management</code>, make <code>webpack.config.js</code> so we can tell Webpack how to package our modules.</p><pre>const path = require(&#39;path&#39;)\r\nconst HtmlWebpackPlugin = require(&#39;html-webpack-plugin&#39;)\r\n\r\nmodule.exports = {\r\n  entry: &#39;./client/index.js&#39;,\r\n  output: {\r\n    path: path.resolve(&#39;dist&#39;),\r\n    filename: &#39;index_bundle.js&#39;\r\n  },\r\n  module: {\r\n    loaders: [\r\n      { test: /\\.js$/, loader: &#39;babel-loader&#39;, exclude: /node_modules/ }\r\n    ]\r\n  },\r\n  plugins: [\r\n    new HtmlWebpackPlugin({\r\n      template: &#39;./client/index.html&#39;,\r\n      filename: &#39;index.html&#39;,\r\n      inject: &#39;body&#39;\r\n    })\r\n  ]\r\n}</pre><p><code>dist</code> will contain all of our output files (those being <code>index_bundle.js</code> and <code>index.html</code>) and we&#39;ll ultimately compress <code>dist</code> to upload as our extension. html-webpack-plugin will take our html template from <code>client/index.html</code> and link to our compiled javascript in <code>dist/index.html</code> upon building.</p><h3>Create an Entry File</h3><p>We want to use Boostrap and we need a <code>div</code> (which we&#39;ll ID as <code>root</code>) for our React App to mount onto. <code>client/index.html</code> should look like this:</p><pre>&lt;!DOCTYPE html&gt;\r\n&lt;html&gt;\r\n  &lt;head&gt;\r\n    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css&quot; /&gt;\r\n  &lt;/head&gt;\r\n  &lt;body&gt;\r\n    &lt;div id=&quot;root&quot;&gt;\r\n      &lt;script\r\n        src=&quot;https://code.jquery.com/jquery-3.2.1.min.js&quot;\r\n        integrity=&quot;sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=&quot;\r\n        crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;\r\n      &lt;script src=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js&quot;&gt;&lt;/script&gt;\r\n  &lt;/body&gt;\r\n&lt;/html&gt;</pre><h3>Build the React App</h3><p><strong>1. Create an Entry Point</strong></p><p>We have everything in place to start getting our hands dirty. We&#39;ll use <code>client/index.js</code> as an entry point for our React app. We&#39;ll import React, set it as a global, pass our cosmic keys to it in its props, and mount the App component (which we&#39;ll make next) to <code>&lt;div id=&quot;root&quot;&gt;</code>.</p><pre>import React from &#39;react&#39;\r\nimport ReactDom from &#39;react-dom&#39;\r\nimport App from &#39;./components/App&#39;\r\nimport QueryString from &#39;query-string&#39;\r\n\r\nwindow.React = React\r\nconst url = QueryString.parse(location.search)\r\n\r\nconst cosmic = { bucket: {\r\n    slug: url.bucket_slug,\r\n    write_key: url.write_key,\r\n    read_key: url.read_key\r\n  }\r\n}\r\n\r\nReactDom.render(\r\n  &lt;App cosmic={cosmic}/&gt;,\r\n  document.getElementById(&#39;root&#39;)\r\n)</pre><p><strong>2. Build the App Component</strong></p><p>To keep our app modular, we&#39;ll have a tiered component structure that looks like this:</p><pre><code>components\r\n|\r\n|--App.js\r\n|--Header.js\r\n|--SubscriberData\r\n| |\r\n| |--SubscriberContainer.js\r\n| |--Loader.js\r\n| |--StatsContainer.js\r\n| |--StatTicker.js\r\n| |--UserList.js\r\n</code></pre><p><code>Header</code> and <code>SubscriberContainer</code> will be immediate children of <code>App</code>. <code>Loader</code>, <code>UserList</code>, and <code>StatsContainer</code> will all be immediate children of <code>SubcriberContainer</code>. Finally, <code>StatsContainer</code> will be composed of <code>StatTicker</code>s.</p><p>Aside from keeping an organized project, this structure allows us to maximize our number of <em>stateless functional components</em> which are not React classes and also happen to be fast.</p><p>Starting at the top of the heirarchy, we&#39;ll build an App component that stores our Cosmic keys in its state and renders a <code>Header</code> and a <code>SubscriberContainer</code>.</p><pre>// components/App.js\r\n\r\nimport { Component } from &#39;react&#39;\r\nimport Header from &#39;./Header&#39;\r\nimport SubscriberContainer from &#39;./SubscriberData/SubscriberContainer&#39;\r\n\r\nexport default class App extends Component {\r\n\r\n  constructor(props) {\r\n    super(props)\r\n    this.state = {\r\n      cosmic: this.props.cosmic\r\n    }\r\n  }\r\n\r\n  render() {\r\n    return (\r\n      &lt;div&gt;\r\n        &lt;Header\r\n          bucket={this.state.cosmic.bucket.slug} /&gt;\r\n        &lt;SubscriberContainer\r\n          cosmic={this.state.cosmic} /&gt;\r\n      &lt;/div&gt;\r\n    )\r\n  }\r\n}</pre><p>The next obvious step is to build out the Header component.</p><p><strong>Build the Header:</strong></p><p>Header will be our first stateless functional component, taking only our bucket slug as a prop:</p><pre>const Header = ({ bucket }) =&gt;\r\n  &lt;nav className=&quot;navbar navbar-default&quot;&gt;\r\n    &lt;div className=&quot;container-fluid&quot;&gt;\r\n      &lt;ul className=&quot;nav navbar-nav&quot;&gt;\r\n        &lt;li className=&quot;navbar-text&quot;&gt;&lt;strong&gt;Managing Subscriptions for: &lt;/strong&gt;&lt;em&gt;{bucket}&lt;/em&gt;&lt;/li&gt;\r\n      &lt;/ul&gt;\r\n    &lt;/div&gt;\r\n  &lt;/nav&gt;\r\n\r\nexport default Header</pre><p><strong>Build the Subscriber Container:</strong></p><p><code>SubscriberContainer</code> will handle all of the logic associated with our subscriber data and render <code>StatsContainer</code> and <code>UserList</code> to display the data it processes.</p><p><code>SubscriberContainer</code> will be a stateful React class containing the following:</p><ol><li>A constructor that initializes <code>SubscriberContainer</code>&#39;s state to contain our Cosmic keys (which we&#39;ve passed as props) and reflect our subscriber data. We intialize the Revenue, Users, and Cancellations stats to <code>&#39;Loading&hellip;&#39;</code>and their loading state to <code>true</code>.</li><li>An override for <code>componentDidMount()</code> to get our component to fetch the data we need after it mounts to the DOM, and then refresh that data every minute.</li><li>A <code>getRevenue()</code> method to fetch (in an admittedly hack-ish way) our revenue by iterating over the subscription types of our active users from Cosmic and storing the calculated revenue in the state.</li><li>A <code>getUsers()</code> method to fetch all of our users from Cosmic and store them in an array in the state, as well as their total.</li><li>A <code>getCancellations()</code> method to grab the amount of cancelled subscriptions from our <code>Subscriptions</code> config object. (Later we&#39;ll be updating that number with a webhook from Stripe.)</li><li>A <code>render()</code> method to render our <code>Loader</code> component (only if we&#39;re fetching data), <code>StatsContainer</code>, and <code>UserList</code>.</li></ol><p>All put together, we have this:</p><pre>import { Component } from &#39;react&#39;\r\nimport Cosmic from &#39;cosmicjs&#39;\r\nimport async from &#39;async&#39;\r\nimport _ from &#39;lodash&#39;\r\nimport StatsContainer from &#39;./StatsContainer&#39;\r\nimport Loader from &#39;./Loader&#39;\r\nimport UserList from &#39;./UserList&#39;\r\n\r\nconst formatter = new Intl.NumberFormat(&#39;en-US&#39;, {\r\n  style: &#39;currency&#39;,\r\n  currency: &#39;USD&#39;,\r\n  minimumFractionDigits: 2\r\n})\r\n\r\nexport default class App extends Component {\r\n \r\n  constructor(props) {\r\n    super(props)\r\n    this.state = {\r\n      cosmic: this.props.cosmic,\r\n      stats: {\r\n        revenue: &#39;Loading...&#39;,\r\n        users: &#39;Loading...&#39;,\r\n        cancellations: &#39;Loading...&#39;\r\n      },\r\n      users: [],\r\n      fetchingRevenue: true,\r\n      fetchingUsers: true,\r\n    }\r\n  }\r\n\r\n  fetchData() {\r\n    this.getRevenue();this.getUsers();this.getCancellations()\r\n  }\r\n\r\n  componentDidMount() {\r\n    this.fetchData()\r\n    setInterval(() =&gt; {\r\n      this.fetchData()\r\n    }, 60000)\r\n  }\r\n\r\n  getRevenue(cosmic) {\r\n    this.setState({ fetchingRevenue: true})\r\n    async.series([\r\n      callback =&gt; {\r\n        Cosmic.getObject(this.state.cosmic, { slug: &#39;subscriptions&#39; }, (err, response) =&gt; {\r\n          callback(null, response.object)\r\n        })\r\n      },\r\n      callback =&gt; {\r\n        Cosmic.getObjectType(this.state.cosmic, { type_slug: &#39;users&#39; }, (err, response) =&gt; {\r\n          callback(null, response.objects.all)\r\n        })\r\n      }\r\n    ], (err, results) =&gt; {\r\n      let subscriptions = results[0], users = results[1];\r\n      let currentStats = this.state.stats\r\n      currentStats.revenue = formatter.format(users.map(user =&gt;\r\n        parseInt(subscriptions.metadata[`${user.metadata.subscription_type}_price`].replace(&#39;$&#39;, &#39;&#39;))\r\n      )\r\n      .reduce((sum, val) =&gt; sum + val))\r\n      this.setState({ stats: currentStats })\r\n      this.setState({ fetchingRevenue: false })\r\n    })\r\n  }\r\n\r\n  getUsers(cosmic) {\r\n    this.setState({ fetchingUsers: true })\r\n    Cosmic.getObjectType(this.state.cosmic, { type_slug: &#39;users&#39; }, (err, response) =&gt; {\r\n      if (err) {\r\n        currentStats = this.state.stats\r\n        currentStats.users = &#39;Error&#39;\r\n        this.setState({ stats: currentStats })\r\n      } else {\r\n        let currentStats = this.state.stats\r\n        currentStats.users = isNaN(response.total) ? 0 : response.total\r\n        this.setState({ stats: currentStats })\r\n        this.setState({ users: response.objects.all })\r\n        this.setState({ fetchingUsers: false })\r\n      }\r\n    })\r\n  }\r\n\r\n  getCancellations(cosmic) {\r\n    this.setState({ fetchingCancellations: true})\r\n    Cosmic.getObject(this.state.cosmic, { slug: &#39;subscriptions&#39; }, (err, response) =&gt; {\r\n      if (err) {\r\n        currentStats = this.state.stats\r\n        currentStats.users = &#39;Error&#39;\r\n        this.setState({ stats: currentStats })\r\n      } else {\r\n        let currentStats = this.state.stats\r\n        currentStats.cancellations = isNaN(response.object.metadata.cancellations) ? 0: response.object.metadata.cancellations\r\n        this.setState({ stats: currentStats })\r\n        this.setState({ fetchingCancellations: false })\r\n      }\r\n    })\r\n  }\r\n\r\n  render() {\r\n    return (\r\n      &lt;div className=&quot;container&quot;&gt;\r\n        &lt;Loader loadingState={this.state.fetchingUsers || this.state.fetchingRevenue || this.state.fetchingCancellations} /&gt;\r\n        &lt;StatsContainer stats={this.state.stats} /&gt;\r\n        &lt;UserList users={this.state.users}/&gt;\r\n      &lt;/div&gt;\r\n    )\r\n  }\r\n}</pre><p>We&#39;re now left with four stateless functional components to build out. These are:</p><p><strong>1. Loader:</strong></p><pre>import ReactLoading from &#39;react-loading&#39;\r\n\r\nconst Loader = ({ loadingState }) =&gt;\r\n  &lt;div className=&quot;row&quot; style={{display: loadingState ? &#39;block&#39; : &#39;none&#39; }}&gt;\r\n    &lt;div className=&quot;col-xs-12&quot;&gt;\r\n      &lt;div className=&quot;pull-right&quot;&gt;\r\n        &lt;ReactLoading height=&#39;20px&#39; width=&#39;20px&#39; type=&quot;spin&quot; color=&quot;#444&quot; /&gt;\r\n      &lt;/div&gt;\r\n    &lt;/div&gt;\r\n  &lt;/div&gt;\r\n\r\nexport default Loader</pre><p>Which makes use of the handy <code>react-loading</code> package.</p><p><strong>2. StatsContainer:</strong></p><pre>import StatTicker from &#39;./StatTicker&#39;\r\n\r\nconst StatsContainer = ({ stats }) =&gt;\r\n  &lt;div className=&quot;row&quot;&gt;{Object.keys(stats).map((key, index) =&gt;\r\n      &lt;div key={index} className=&quot;col-md-4 text-center&quot;&gt;&lt;StatTicker name={key} value={stats[key]} /&gt;&lt;/div&gt;\r\n    )}\r\n  &lt;/div&gt;\r\n\r\n\r\nexport default StatsContainer</pre><p><strong>3. StatTicker:</strong></p><pre>const StatTicker = ({ name, value }) =&gt;\r\n  &lt;div&gt;&lt;h3 className=&quot;lead text-muted&quot;&gt;{name}&lt;/h3&gt;&lt;h1 className=&quot;text-primary&quot;&gt;{value}&lt;/h1&gt;&lt;/div&gt;\r\n\r\nexport default StatTicker</pre><p>and finally...</p><p><strong>4. UserList:</strong></p><pre>const UserList = ({ users, deleteUser }) =&gt;\r\n  &lt;div style={{marginTop: 50 + &#39;px&#39;}} className=&quot;row&quot;&gt;\r\n    &lt;div className=&quot;col-xs-12&quot;&gt;\r\n      &lt;h4 className=&quot;pull-left lead&quot;&gt;All Users:&lt;/h4&gt;\r\n      &lt;table className=&quot;table table-responsive table-hover&quot;&gt;\r\n        &lt;thead&gt;\r\n          &lt;tr&gt;\r\n            &lt;th&gt;Stripe ID&lt;/th&gt;\r\n            &lt;th&gt;First Name&lt;/th&gt;\r\n            &lt;th&gt;Last Name&lt;/th&gt;\r\n            &lt;th&gt;Email&lt;/th&gt;\r\n          &lt;/tr&gt;\r\n        &lt;/thead&gt;\r\n        &lt;tbody&gt;\r\n          {users.map((user, index) =&gt;\r\n            &lt;tr key={index}&gt;\r\n              &lt;td&gt;{user.metadata.stripe_id}&lt;/td&gt;\r\n              &lt;td&gt;{user.metadata.first_name}&lt;/td&gt;\r\n              &lt;td&gt;{user.metadata.last_name}&lt;/td&gt;\r\n              &lt;td&gt;{user.metadata.email}&lt;/td&gt;\r\n            &lt;/tr&gt;\r\n          )}\r\n        &lt;/tbody&gt;\r\n      &lt;/table&gt;\r\n    &lt;/div&gt;\r\n  &lt;/div&gt;\r\n\r\n\r\nexport default UserList</pre><h3>Integrate Stripe Webhooks</h3><p>To get our cancelled subscriber count, we&#39;ll udpate a <code>cancellations</code> metafield in our Cosmic <code>Subscriptions</code> object. To do this, we&#39;ll receive a webhook from Stripe through our Express app every time we delete a subscription on Stripe.</p><ol><li>Set up webhooks in Stripe and point them to the domain your Express app is deployed to.</li><li>Create an <code>api</code> route at <code>CosmicUserBlog/routes/api.js</code> and <code>require</code> it in <code>App.js</code>.</li><li>Handle POST requests with a <code>switch</code> statement acting on <code>req.body</code>. When Stripe sends us a subscription cancellation webhook, <code>req.body.type</code> will be <code>customer.subscription.deleted</code>.</li><li>Delete the User object from Cosmic, get the Subscription object from Cosmic, shallow copy the object, increment <code>metadata.cancellations</code>, then use Cosmic&#39;s REST API to push the changes to the object.</li><li>Respond with a <code>200</code> code so Stripe can confirm receipt of the webhook.</li></ol><p>Here&#39;s the finshed product:</p><pre>var express = require(&#39;express&#39;)\r\nvar router = express.Router()\r\nvar cosmic = require(&#39;cosmicjs&#39;)\r\nvar axios = require(&#39;axios&#39;)\r\n\r\nrouter.post(&#39;/&#39;, function(req, res) {\r\n  event = req.body\r\n  switch (event.type) {\r\n    case &#39;customer.subscription.deleted&#39;:\r\n      cosmic.deleteObject(req.app.locals.config, { slug: &#39;user&#39;, write_key: req.app.locals.config.bucket.slug }, function (err, response) {\r\n        cosmic.getObject(req.app.locals.config, { slug: &#39;subscriptions&#39; }, function (err, response) {\r\n          var currentObject = response.object\r\n          currentObject.metadata.cancellations = currentObject.metadata.cancellations + 1\r\n          currentObject.metafield.cancellations.value = currentObject.metadata.cancellations + 1\r\n          currentObject.write_key = req.app.locals.config.bucket.write_key\r\n          axios({\r\n            method: &#39;put&#39;,\r\n            url: `https://api.cosmicjs.com/v1/${req.app.locals.config.bucket.slug}/edit-object`,\r\n            data: currentObject\r\n          }).then(function (axRes) {\r\n            console.log(&#39;Success&#39;)\r\n          }).catch(function (axError) {\r\n            console.log(&#39;Error&#39;)\r\n          })\r\n        })\r\n      })\r\n      return res.json({ received: true})\r\n      break;\r\n    default:\r\n      return res.json({ received: false })\r\n  }\r\n});\r\n\r\nmodule.exports = router</pre><h3>Deploy</h3><p>To tell Cosmic what your extension is, you&#39;ll need to add <code>extension.json</code> to your <code>dist</code> folder. We&#39;ll configure our extension like this:</p><pre>// dist/extension.json\r\n\r\n{\r\n  &quot;title&quot;: &quot;Subscription Management&quot;,\r\n  &quot;font_awesome_class&quot;: &quot;fa-gears&quot;,\r\n  &quot;image_url&quot;: &quot;&quot;\r\n}</pre><h1>Conclusion</h1><p>Using Cosmic, Express, Stripe, and React, we&#39;ve built both a monetizable blog that lets our readers subscribe to read premium content and a convenient dashboard to view data about our blog. We&#39;ve integrated Stripe for secure payments and we&#39;ve built an app that does as much as we want it to do with room to grow.</p><p>With how quickly we&#39;ve been able to build our app and with the simplicity of deploying and maintaining it, it&#39;s clear that Cosmic is one of a kind in its API first approach to content management. Clearly, CosmisJS is a money maker.</p><p><em>Matt Cain builds smart web applications and writes about the tech used to build them. You can learn more about him on his <a href=\"http://mattcain.io/\">portfolio</a></em>.</p>","metafields":[{"object_type":"authors","value":"59528e59833ff0503d000e98","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"59528e59833ff0503d000e98","slug":"matt-cain","title":"Matt Cain","content":"","metafields":[{"value":"9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg","imgix_url":"https://imgix.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-06-27T16:56:57.686Z","created_by":"5357ef811693be2118000001","created":"2017-06-27T16:56:57.686Z","status":"published","modified_at":"2023-01-20T22:01:28.380Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg"}},{"value":"<p>Using Cosmic, Express, Stripe, and React, we&#39;ve built both a monetizable blog that lets our readers subscribe to read premium content and a convenient dashboard to view data about our blog. We&#39;ve integrated Stripe for secure payments and we&#39;ve built an app that does as much as we want it to do with room to grow.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"48d487e0-81d3-11e7-8612-9d67c44fe43c-joe-shillington-240205.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/48d487e0-81d3-11e7-8612-9d67c44fe43c-joe-shillington-240205.jpg","imgix_url":"https://imgix.cosmicjs.com/48d487e0-81d3-11e7-8612-9d67c44fe43c-joe-shillington-240205.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-08-15T16:03:43.313Z","created_by":"5357ef811693be2118000001","created":"2017-08-15T16:03:43.313Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","metadata":{"author":{"_id":"59528e59833ff0503d000e98","slug":"matt-cain","title":"Matt Cain","content":"","metafields":[{"value":"9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg","imgix_url":"https://imgix.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-06-27T16:56:57.686Z","created_by":"5357ef811693be2118000001","created":"2017-06-27T16:56:57.686Z","status":"published","modified_at":"2023-01-20T22:01:28.380Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg","imgix_url":"https://imgix.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg"}}},"teaser":"<p>Using Cosmic, Express, Stripe, and React, we&#39;ve built both a monetizable blog that lets our readers subscribe to read premium content and a convenient dashboard to view data about our blog. We&#39;ve integrated Stripe for secure payments and we&#39;ve built an app that does as much as we want it to do with room to grow.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/48d487e0-81d3-11e7-8612-9d67c44fe43c-joe-shillington-240205.jpg","imgix_url":"https://imgix.cosmicjs.com/48d487e0-81d3-11e7-8612-9d67c44fe43c-joe-shillington-240205.jpg"}}},{"_id":"598340e080aaa86220000afd","order":111,"slug":"how-to-build-a-vuejs-photo-gallery","title":"How to Build a Vue.js Photo Gallery","content":"<p>In this tutorial I&rsquo;m going to show you how to build a photo gallery with a ready-to-use template from <a data-href=\"https://html5up.net/\" href=\"https://html5up.net/\" rel=\"nofollow noopener\" target=\"_blank\">HTML5UP</a>, powered by the <a data-href=\"https://www.cosmicjs.com\" href=\"https://www.cosmicjs.com/\" rel=\"nofollow noopener\" target=\"_blank\">Cosmic</a> API, hosted on the Cosmic App Server.</p><p><a href=\"https://github.com/cosmicjs/vuejs-photo-gallery/blob/master/article/img1.jpg\" target=\"_blank\"><img src=\"https://github.com/cosmicjs/vuejs-photo-gallery/raw/master/article/img1.jpg\" alt=\"\" class=\"fr-fic fr-dii\"></a></p><h2>TL;DR</h2><p><a href=\"https://www.cosmicjs.com/apps/vuejs-photo-gallery\" rel=\"noopener noreferrer\" target=\"_blank\">View demo</a><br><a href=\"https://github.com/cosmicjs/vuejs-photo-gallery\" rel=\"noopener noreferrer\" target=\"_blank\">View the codebase on GitHub</a></p><h2>Prerequisites</h2><p>You&rsquo;ll need Node JS and npm. Make sure you already have them before you start.</p><h2>Getting Started</h2><p>First of all we&rsquo;ll need to install VueJS CLI and start the new project. &nbsp;Run the following commands to do this:</p><pre class=\"prism\">npm install -g vue-cli\r\nvue init webpack vuejs-photo-gallery\r\ncd vuejs-photo-gallery\r\nnpm install</pre><p>After you&rsquo;ll setup this project you&rsquo;ll be able to run</p><pre class=\"prism\">cd vuejs-photo-gallery\r\nnpm run dev</pre><p>And play with your app in browser</p><h2>Doing everything using the existing git repo</h2><p>First of all, you have to be sure you have node &gt; 6.x installed, than run the following commands:</p><pre class=\"prism\">npm install -g vue-cli\r\ngit clone https://github.com/cosmicjs/vuejs-photo-gallery.git\r\ncd vuejs-photo-gallery\r\nnpm install\r\nnpm run dev</pre><p>Browser window will open automatically once you&#39;ll run the last command</p><h2>Setting up Cosmic library</h2><p>First of all, install Cosmic Angular/JavaScript library</p><pre class=\"prism\">npm install cosmicjs --save</pre><p>Now you should be able to import Cosmic object and perform Cosmic API calls like following:</p><pre class=\"prism\">import Cosmic from &#39;cosmicjs&#39;;\r\nconst bucket = { slug: &#39;your-bucket-slug&#39; };\r\n\r\nCosmic.getObjects({ bucket }, (err, res) =&gt; {\r\n  console.log(res.objects);\r\n});</pre><h2>Setting up things with Cosmic</h2><p>Create the bucket and remeber the bucket name (<code>vuejs-photo-gallery</code> in our case):</p><p>Than create a new object type named Photo.</p><p>We also need a way to store the picture itself. Please enter the &ldquo;Metafields Template&rdquo; tab and add &ldquo;Image/File&rdquo; type metafield with key <code>image</code>. This metafield will store the image. We don&rsquo;t need anything more,\r\nso just set the name and save object type. After save you&rsquo;ll be redirected to &lsquo;New Photo&rsquo; page. Create some photos using this page and save them - we&#39;ll use them as test data.</p><p><a href=\"https://github.com/cosmicjs/vuejs-photo-gallery/blob/master/article/img2.png\" target=\"_blank\"><img src=\"https://github.com/cosmicjs/vuejs-photo-gallery/raw/master/article/img2.png\" alt=\"\" class=\"fr-fic fr-dii\"></a></p><p>The only thing left is to set site-wide things, such as title, tagline, social icons and footer text. Let&#39;s create one more object type named Global. And add the following metafields:</p><ul><li>Tagline - Plain Text Area</li><li>Twitter - Plain Text Input</li><li>Instagram - Plain Text Input</li><li>Github - Plain Text Input</li><li>Email - Plain Text Input</li><li>Footer - Plain Text Area</li></ul><h2>VueJS environments</h2><p>We want to pick our bucket name automatically on deploy. In this case we&#39;ll need configuration file, which we&#39;ll populate with correct data during deploy. Create <code>src/config.js</code> to match the following:</p><pre class=\"prism\">Config = {\r\n    bucket: &#39;vuejs-photo-gallery&#39;\r\n};\r\n\r\nmodule.exports = Config;</pre><h2>Prepare assets</h2><p>Download the template ZIP and unzip it somewhere. In our case we have the following content:</p><p><code>index.html</code> - this is our HTML markup, we&#39;ll move it to Vue components later. <code>images</code> - this is sample images folder. We don&#39;t need it, our images will be served from Cosmic servers <code>assets</code> - other assets such as CSS, fonts, javascript files. We&#39;ll need CSS and fonts. Let&#39;s ignore Javascript for now, since we&#39;re planning to use VueJS. Let&#39;s copy <code>assets/css</code> and <code>assets/fonts</code> folders to <code>static</code> folder inside our project. This will allow us to add these files to the build automatically as static assets.</p><h2>Prepare index.html</h2><p>Now it&#39;s time to include our assets to <code>index.html</code>. Add the following to the <code>head</code> section:</p><pre class=\"prism\">&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot; /&gt;\r\n&lt;!--[if lte IE 8]&gt;&lt;script src=&quot;assets/js/ie/html5shiv.js&quot;&gt;&lt;/script&gt;&lt;![endif]--&gt;\r\n&lt;link rel=&quot;stylesheet&quot; href=&quot;static/css/main.css&quot; /&gt;\r\n&lt;!--[if lte IE 8]&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;assets/css/ie8.css&quot; /&gt;&lt;![endif]--&gt;\r\n&lt;!--[if lte IE 9]&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;assets/css/ie9.css&quot; /&gt;&lt;![endif]--&gt;\r\n&lt;noscript&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;static/css/noscript.css&quot; /&gt;&lt;/noscript&gt;</pre><p>This will include our static assets. Once we&#39;ll implement correct markup, appearance will be automatically set via CSS.</p><h2>VueJS components</h2><p>Looking into our page, we can define components we&#39;ll need:</p><p><code>Header</code> and <code>Footer</code> - for this will be very simple components, which will display global data which will be loaded on app startup <code>Thumbs</code> - this component will display photos thumbnails <code>Viwer</code> - this component will display the big photo and provide prev/next navigation. Please note - we&#39;re creating component&#39;s templates markup using template we downloaded before (doing copy-paste from index.html and applying VueJS directives).</p><p><code>Header</code> component:</p><pre class=\"prism\">&lt;template&gt;\r\n    &lt;header id=&quot;header&quot;&gt;\r\n        &lt;h1&gt;{{ header }}&lt;/h1&gt;\r\n        &lt;div v-html=&quot;text&quot;&gt;&lt;/div&gt;\r\n        &lt;ul class=&quot;icons&quot;&gt;\r\n            &lt;li&gt;&lt;a :href=&quot;twitter&quot; class=&quot;icon fa-twitter&quot;&gt;&lt;span class=&quot;label&quot;&gt;Twitter&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;\r\n            &lt;li&gt;&lt;a :href=&quot;instagram&quot; class=&quot;icon fa-instagram&quot;&gt;&lt;span class=&quot;label&quot;&gt;Instagram&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;\r\n            &lt;li&gt;&lt;a :href=&quot;github&quot; class=&quot;icon fa-github&quot;&gt;&lt;span class=&quot;label&quot;&gt;Github&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;\r\n            &lt;li&gt;&lt;a :href=&quot;email&quot; class=&quot;icon fa-envelope-o&quot;&gt;&lt;span class=&quot;label&quot;&gt;Email&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;\r\n        &lt;/ul&gt;\r\n    &lt;/header&gt;\r\n&lt;/template&gt;\r\n\r\n&lt;script&gt;\r\nimport {EventBus} from &#39;../event_bus&#39;;\r\n\r\nexport default {\r\n    name: &#39;app-header&#39;,\r\n    created() {\r\n        EventBus.$on(&#39;global_loaded&#39;, (obj) =&gt; {\r\n            this.header = obj.title;\r\n            this.text = obj.metafield.tagline.value;\r\n            this.twitter = obj.metafield.twitter.value;\r\n            this.instagram = obj.metafield.instagram.value;\r\n            this.github = obj.metafield.github.value;\r\n            this.email = &#39;mailto:&#39; + obj.metafield.email.value;\r\n        });\r\n    },\r\n    data () {\r\n        return {\r\n            text: null,\r\n            twitter: &#39;&#39;,\r\n            instagram: &#39;&#39;,\r\n            github: &#39;&#39;,\r\n            email: &#39;&#39;,\r\n            header: &#39;&#39;\r\n        }\r\n    }\r\n}\r\n&lt;/script&gt;</pre><p><code>Footer</code> component is very similar:</p><pre class=\"prism\">&lt;template&gt;\r\n    &lt;footer id=&quot;footer&quot;&gt;\r\n        &lt;div v-html=&quot;text&quot;&gt;&lt;/div&gt;\r\n    &lt;/footer&gt;\r\n&lt;/template&gt;\r\n\r\n&lt;script&gt;\r\nimport {EventBus} from &#39;../event_bus&#39;;\r\n\r\nexport default {\r\n    name: &#39;app-footer&#39;,\r\n    created() {\r\n        EventBus.$on(&#39;global_loaded&#39;, (obj) =&gt; {\r\n            this.text = obj.metafield.footer.value;\r\n        });\r\n    },\r\n    data () {\r\n        return {\r\n            text: null\r\n        }\r\n    }\r\n}\r\n&lt;/script&gt;</pre><p>Both components uses <code>EventBus</code> to receive data from parent component. I&#39;ll tell about the Event bus later in this post.</p><h2>Thumbs component</h2><p>This component is more complicated than previous two:</p><pre class=\"prism\">&lt;template&gt;\r\n    &lt;section id=&quot;thumbnails&quot;&gt;\r\n        &lt;article v-for=&quot;(item, index) in items&quot; v-bind:class=&quot;{ &#39;active&#39;: activeIndex == index }&quot;&gt;\r\n            &lt;a class=&quot;thumbnail&quot; v-on:click=&quot;selectImage(item, index)&quot;&gt;\r\n                &lt;img v-bind:src=&quot;item.metafield.image.imgix_url&quot; alt=&quot;&quot; /&gt;\r\n            &lt;/a&gt;\r\n            &lt;h2&gt;{{ item.title }}&lt;/h2&gt;\r\n            &lt;div v-html=&quot;item.content&quot;&gt;&lt;/div&gt;\r\n        &lt;/article&gt;\r\n    &lt;/section&gt;\r\n&lt;/template&gt;\r\n\r\n&lt;script&gt;\r\nimport Cosmic from &#39;cosmicjs&#39;;\r\nimport * as Config from &#39;../config&#39;;\r\nimport {EventBus} from &#39;../event_bus&#39;;\r\n\r\nconst bucket = { slug: Config.bucket };\r\n\r\nexport default {\r\n    name: &#39;thumbs&#39;,\r\n    props: [&#39;bus&#39;],\r\n    created() {\r\n        Cosmic.getObjectType({ bucket }, { type_slug: &#39;photos&#39; }, (err, res) =&gt; {\r\n            this.items = res.objects.all;\r\n            EventBus.$emit(&#39;loaded&#39;, this.items[0]);\r\n        });\r\n        EventBus.$on(&#39;move&#39;, (dir) =&gt; {\r\n            this.activeIndex = this.activeIndex + dir;\r\n            if (dir &gt; 0 &amp;&amp; this.activeIndex &gt;= this.items.length) {\r\n                this.activeIndex = 0;\r\n            }\r\n            if (dir &lt; 0 &amp;&amp; this.activeIndex &lt; 0) {\r\n                this.activeIndex = this.items.length - 1;\r\n            }\r\n            EventBus.$emit(&#39;loaded&#39;, this.items[this.activeIndex]);\r\n        });\r\n    },\r\n    data () {\r\n        return {\r\n            items: [],\r\n            activeIndex: 0\r\n        }\r\n    },\r\n    methods: {\r\n        selectImage (itm, index) {\r\n            EventBus.$emit(&#39;loaded&#39;, itm);\r\n            this.activeIndex = index;\r\n        }\r\n    }\r\n}\r\n&lt;/script&gt;</pre><p>On component creation we&#39;re fetching our photos list and subscribes to Event bus &#39;move&#39; event. Than we just render these photos and emit a new event each time when user selects a new photo.</p><h2>Viewer component</h2><pre class=\"prism\">&lt;template&gt;\r\n    &lt;div id=&quot;viewer&quot;&gt;\r\n        &lt;div class=&quot;inner&quot;&gt;\r\n            &lt;div class=&quot;nav-next&quot; v-on:click=&quot;selectNext()&quot;&gt;&lt;/div&gt;\r\n            &lt;div class=&quot;nav-previous&quot; v-on:click=&quot;selectPrev()&quot;&gt;&lt;/div&gt;\r\n        &lt;/div&gt;\r\n        &lt;div class=&quot;slide active&quot; v-if=&quot;img&quot;&gt;\r\n            &lt;div class=&quot;caption&quot;&gt;\r\n                &lt;h2&gt;{{ img.title }}&lt;/h2&gt;\r\n                &lt;div v-html=&quot;img.content&quot;&gt;&lt;/div&gt;\r\n            &lt;/div&gt;\r\n            &lt;div class=&quot;image&quot; v-bind:style=&#39;{ backgroundImage: &quot;url(&quot; + img.metafield.image.imgix_url + &quot;)&quot; }&#39;&gt;\r\n            &lt;/div&gt;\r\n        &lt;/div&gt; \r\n    &lt;/div&gt;\r\n&lt;/template&gt;\r\n\r\n&lt;script&gt;\r\nimport {EventBus} from &#39;../event_bus&#39;;\r\n\r\nexport default {\r\n    name: &#39;viewer&#39;,\r\n    props: [&#39;bus&#39;],\r\n    created() {\r\n        EventBus.$on(&#39;loaded&#39;, (obj) =&gt; {\r\n            this.img = obj;\r\n        });\r\n    },\r\n    data () {\r\n        return {\r\n            img: null\r\n        }\r\n    },\r\n    methods: {\r\n        selectNext() {\r\n            EventBus.$emit(&#39;move&#39;, 1);\r\n        },\r\n        selectPrev() {\r\n            EventBus.$emit(&#39;move&#39;, -1);\r\n        }\r\n    }\r\n}\r\n&lt;/script&gt;</pre><p>This component subscribes to <code>loaded</code> event via Event bus. This event means that uses selected a new photo and we have to show it bigger size; Another task of this component is to notify Thumbs component when users click prev/next buttons. Component uses Event bus for this purpose also.</p><h2>Event bus</h2><p>Event bus follows publish-subscribe pattern and allows us setup communication between Thumbs and Viewer components. Both components are on the same level (no parent-child relationship), so we need something more complicated than simple event emission.\r\nEvent bus implementation is very easy (<code>src/event_bus.js</code>):</p><pre class=\"prism\">import Vue from &#39;vue&#39;;\r\nexport const EventBus = new Vue();</pre><p>This event bus is used to fire events in one component (using <code>EventBus.$emit</code>) and subscribe on them in another component (using <code>EventBus.$on</code>).</p><h2>Concatenating everything together</h2><p>Now it&#39;s time to concat everything with <code>App</code> component:</p><pre class=\"prism\">&lt;template&gt;\r\n  &lt;div&gt;\r\n    &lt;div id=&quot;main&quot;&gt;\r\n      &lt;app-header&gt;&lt;/app-header&gt;\r\n      &lt;thumbs&gt;&lt;/thumbs&gt;\r\n      &lt;app-footer&gt;&lt;/app-footer&gt;\r\n    &lt;/div&gt;\r\n    &lt;viewer&gt;&lt;/viewer&gt;\r\n  &lt;/div&gt;\r\n&lt;/template&gt;\r\n\r\n&lt;script&gt;\r\nimport AppHeader from &#39;./components/AppHeader&#39;\r\nimport AppFooter from &#39;./components/AppFooter&#39;\r\nimport Thumbs from &#39;./components/Thumbs&#39;\r\nimport Viewer from &#39;./components/Viewer&#39;\r\nimport Vue from &#39;vue&#39;;\r\nimport Cosmic from &#39;cosmicjs&#39;;\r\nimport * as Config from &#39;./config&#39;;\r\nimport {EventBus} from &#39;./event_bus&#39;;\r\n\r\nconst bucket = { slug: Config.bucket };\r\n\r\nexport default {\r\n  name: &#39;app&#39;,\r\n  components: {\r\n    AppFooter,\r\n    AppHeader,\r\n    Thumbs,\r\n    Viewer\r\n  },\r\n  created() {\r\n    Cosmic.getObjectType({ bucket }, { type_slug: &#39;globals&#39; }, (err, res) =&gt; {\r\n      EventBus.$emit(&#39;global_loaded&#39;, res.objects.all[0]);\r\n      console.log(res.objects.all[0]);\r\n    });\r\n  },\r\n}\r\n&lt;/script&gt;</pre><p>This component loads globals data on creation and notify <code>AppHeader</code> and <code>AppFooter</code> components via <code>EventBus</code>.</p><h2>Deploy to Cosmic servers</h2><p>Cosmic has some requirements for deploying apps:</p><ul><li>it must be in public git repo</li><li><a href=\"https://devcenter.heroku.com/\">Specific requirements</a> depending on your platform must be met</li></ul><p>In our case we actually have HTML5 app, so we&#39;ll need some additional software.</p><h2>Prepare config</h2><p>Create a <code>prepare.js</code> file in your project directory:</p><pre class=\"prism\">var fs = require(&#39;fs&#39;);\r\n\r\nvar str = `\r\n    Config = {\r\n        bucket: &#39;${process.env.COSMIC_BUCKET}&#39;\r\n    };\r\n\r\n    module.exports = Config;\r\n`;\r\nfs.writeFile(&quot;./src/config.js&quot;, str, function(err) {\r\n    if(err) {\r\n        return console.log(err);\r\n    }\r\n    console.log(&quot;The file was saved!&quot;);\r\n});</pre><p>This script will rewrite application config file (see more info above) file to use your Cosmic bucket write key and bucket name.</p><h2>Modify package.json</h2><p>VueJS CLI adds some packaged on <code>package.json</code> as <code>devDependencies</code>. We have to move them all into <code>dependencies</code> to make our scripts work in Cosmic servers.</p><h2>Prepare software</h2><p>We&#39;ll also need something to serve our Angular app. We&#39;ll use Express framework:</p><pre class=\"prism\">npm install --save express</pre><p>Add the following to your package.json:</p><pre class=\"prism\">{\r\n  ...\r\n  &quot;scripts&quot;: {\r\n    ...\r\n    &quot;start&quot;: &quot;node app.js&quot;\r\n  },\r\n  ...\r\n}</pre><p>The main point is to have <code>start</code> command defined in the <code>scripts</code> section (you can safely replace default angular <code>start</code> command). This is the command which will be run to start our app. So now we have the only thing left - create the <code>app.js</code> file:</p><pre class=\"prism\">const express = require(&#39;express&#39;)\r\nconst app = express()\r\n\r\napp.use(express.static(&#39;./dist&#39;));\r\n\r\napp.listen(process.env.PORT, function () {\r\n});</pre><p>This is a simple Express app which serves <code>dist</code> dir as dir of static files. Please take note - app listens on port specified via <code>PORT</code> environment variable, it&#39;s important to run apps on Cosmic App Server.</p><h2>Build VueJS app for production</h2><p>We&#39;ll use <code>app.json</code> to do this (dokku <code>predeploy</code> section):</p><pre class=\"prism\">{\r\n    &quot;scripts&quot;: {\r\n        &quot;dokku&quot;: {\r\n            &quot;predeploy&quot;: &quot;node prepare.js &amp;&amp; npm run build&quot;\r\n        }\r\n    }\r\n}</pre><p>This script will be executed before we&#39;ll launch our express app to build the VueJS app for production.</p><h2>Run it!</h2><p>Now you can enter &#39;Deploy Web App&#39; page in your Cosmic Dashboard.</p><p><a href=\"https://github.com/cosmicjs/vuejs-photo-gallery/blob/master/article/img-deploy.png\" target=\"_blank\"><img src=\"https://github.com/cosmicjs/vuejs-photo-gallery/raw/master/article/img-deploy.png\" alt=\"\" class=\"fr-fic fr-dii\"></a></p><p>Simply enter your repo URL and click &#39;Deploy to Web&#39; - deploy process will be started and app become ready in a couple of minutes.</p><h2>Conclusion</h2><p>Using Cosmic App Server allows quickly deploy the application to hosting using a git repo and don&#39;t worry about server configuration and software installation - everything will be done by Cosmic servers.</p>","metafields":[{"object_type":"authors","value":"591dcc617b17dbf10500212d","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"591dcc617b17dbf10500212d","slug":"ivan-larionov","title":"Ivan Larionov","content":"","metafields":[{"value":"713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg","imgix_url":"https://imgix.cosmicjs.com/713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-18T16:31:29.363Z","created_by":"5357ef811693be2118000001","created":"2017-05-18T16:31:29.363Z","status":"published"}},{"value":"<p>In this tutorial I&rsquo;m going to show you how to build photo gallery with ready-to-use template, which will be hosted on Cosmic App Server.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"37222e70-7860-11e7-b95a-5b714b6ab507-will-langenberg-8989.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/37222e70-7860-11e7-b95a-5b714b6ab507-will-langenberg-8989.jpg","imgix_url":"https://imgix.cosmicjs.com/37222e70-7860-11e7-b95a-5b714b6ab507-will-langenberg-8989.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-08-03T15:27:28.290Z","created_by":"5357ef811693be2118000001","created":"2017-08-03T15:27:28.290Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"591dcc617b17dbf10500212d","slug":"ivan-larionov","title":"Ivan Larionov","content":"","metafields":[{"value":"713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg","imgix_url":"https://imgix.cosmicjs.com/713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-18T16:31:29.363Z","created_by":"5357ef811693be2118000001","created":"2017-05-18T16:31:29.363Z","status":"published","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg","imgix_url":"https://imgix.cosmicjs.com/713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg"}}},"teaser":"<p>In this tutorial I&rsquo;m going to show you how to build photo gallery with ready-to-use template, which will be hosted on Cosmic App Server.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/37222e70-7860-11e7-b95a-5b714b6ab507-will-langenberg-8989.jpg","imgix_url":"https://imgix.cosmicjs.com/37222e70-7860-11e7-b95a-5b714b6ab507-will-langenberg-8989.jpg"}}},{"_id":"598081a385fadb6701000040","order":112,"slug":"new-features-metafield-options-help-text-and-more","title":"New Features: Metafield Options, Help Text and More","content":"<p><img src=\"https://cosmicjs.imgix.net/0afa7760-76be-11e7-a00c-4fed1ad8a55e-guillaume-bolduc-259596.jpg?w=1300\" class=\"fr-fic fr-dib\" style=\"width: 100%;\"></p><p>We&#39;re happy to announce that we&#39;ve rolled out some new features requested by members of our community.. &nbsp;Here are some of the new features:</p><p><strong>Metafield Options</strong><br>For Metafields that require options, you will now notice the ability to easily edit those options right on the Metafield.</p><p style=\"text-align: center;\"><img src=\"https://www.cosmicjs.com/uploads/708a38e0-76be-11e7-af7d-550e1f662aae-n7kaWSW2tQ.gif\" class=\"fr-fic fr-dib\" style=\"width: 100%;\"></p><p><strong>Metafield Min/Max Length</strong><br>You can now restrict Text and Textarea Metafield Min/Max lengths for your content editors.</p><p><strong>Metafield Help Text</strong><br>You can now add help text to all Metafields to easily send tips to the content editor.</p><p><strong>Get Draft Objects from the API</strong><br>You can now add a query parameter to your endpoint to get all Objects including draft status Objects. &nbsp;Simply add &quot;status=all&quot; to the endpoint. &nbsp;The default behavior is still only published Objects. &nbsp;Check it out on the <a href=\"https://www.cosmicjs.com/docs/rest\">API docs page</a>.</p><p>To get more updates and submit feature requests to us directly, <a href=\"https://www.cosmicjs.com/community\">join our Slack community</a> and <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>We&#39;re happy to announce that we&#39;ve rolled out some new features requested by members of our community. &nbsp;Here are some of the new features:</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"0afa7760-76be-11e7-a00c-4fed1ad8a55e-guillaume-bolduc-259596.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0afa7760-76be-11e7-a00c-4fed1ad8a55e-guillaume-bolduc-259596.jpg","imgix_url":"https://imgix.cosmicjs.com/0afa7760-76be-11e7-a00c-4fed1ad8a55e-guillaume-bolduc-259596.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-08-01T13:26:59.054Z","created_by":"5357ef811693be2118000001","created":"2017-08-01T13:26:59.054Z","status":"published","modified_at":"2020-08-10T14:04:22.001Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We&#39;re happy to announce that we&#39;ve rolled out some new features requested by members of our community. &nbsp;Here are some of the new features:</p>","featured_image":{"url":"https://cdn.cosmicjs.com/0afa7760-76be-11e7-a00c-4fed1ad8a55e-guillaume-bolduc-259596.jpg","imgix_url":"https://imgix.cosmicjs.com/0afa7760-76be-11e7-a00c-4fed1ad8a55e-guillaume-bolduc-259596.jpg"}}},{"_id":"596f775955010484610000bd","order":113,"slug":"language-agnostic-content-management-with-cosmic-js","title":"Language Agnostic Content Management With Cosmic","content":"<section name=\"9403\"><h1 id=\"5e39\" name=\"5e39\"><img src=\"https://www.cosmicjs.com/uploads/d1b502f0-6c94-11e7-aaee-1fa45137f0d8-1*B0HsQ8_mzLFpNoEEDLYgNg.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></h1><p>If you&rsquo;re a developer and need to open up a new blog for yourself or a client, the idea of using WordPress probably makes you cringe.</p><p id=\"378f\" name=\"378f\">64.5% of developers <a data-href=\"https://medium.com/r/?url=https%3A%2F%2Finsights.stackoverflow.com%2Fsurvey%2F2017\" href=\"https://insights.stackoverflow.com/survey/2017\" rel=\"noopener noreferrer\" target=\"_blank\">surveyed</a> on StackOverflow stated that WordPress was one of their most dreaded platforms to work with.</p><p id=\"1535\" name=\"1535\">The dread makes sense. You can&rsquo;t hand code an entire blog if you use WordPress for your content management system (CMS). You have to work within the WordPress stack and then use plugins for the extra pieces you need. This is antithetical to most people who write plain code.</p><p id=\"f8d1\" name=\"f8d1\">What you probably want is a system that lets you input your content, store your content, and fetch it in a manner that is straightforward and easy. If you can input your content in a WYSIWYG dashboard even better&sup1;.</p><p id=\"dcbd\" name=\"dcbd\">While looking for something that did this I stumbled on Cosmic. It turns out that Cosmic is exactly that, a programming language agnostic CMS. You can write your blog in whatever language you want for whatever platform you want.</p><p id=\"1e1c\" name=\"1e1c\">You put your content in and it gives you simple API endpoints to retrieve it from. One get request and your work is returned to you in a JSON object.</p><p id=\"8029\" name=\"8029\">Here&rsquo;s how you can setup a CMS for your blog in no time flat&hellip;</p><p id=\"6f36\" name=\"6f36\">Once you&rsquo;ve created and logged into your account go ahead and create a new bucket. Buckets are exactly what they sound like. A container that holds objects. The objects could all be of the same type or they could be different.</p><p name=\"6f36\"><br></p><figure id=\"ef6a\" name=\"ef6a\"><img data-src=\"https://cdn-images-1.medium.com/max/800/0*EqZm6I-oKKhf2vST.png\" src=\"https://cdn-images-1.medium.com/max/800/0*EqZm6I-oKKhf2vST.png\" class=\"fr-fic fr-dii\"></figure><p><br></p><p id=\"e06f\" name=\"e06f\">Once you&rsquo;ve created your bucket and you click on it you&rsquo;ll notice a new menu on the sidebar. One of the options will be <em>Add Object Type</em>.</p><p name=\"e06f\"><br></p><figure id=\"b8d2\" name=\"b8d2\"><img data-src=\"https://cdn-images-1.medium.com/max/800/0*WOcyjrI83rS1dGHV.png\" src=\"https://cdn-images-1.medium.com/max/800/0*WOcyjrI83rS1dGHV.png\" class=\"fr-fic fr-dii\"></figure><p name=\"a9bd\"><br></p><p id=\"a9bd\" name=\"a9bd\">This is how we add a new type of object to our bucket. We&rsquo;re going to be creating a <strong>Blog Post</strong> type object that will hold all of the content and metadata associated with each of our blog posts.</p><figure id=\"3c36\" name=\"3c36\"><img data-src=\"https://cdn-images-1.medium.com/max/800/0*M2ZQQ-gxUD5hMSKO.png\" src=\"https://cdn-images-1.medium.com/max/800/0*M2ZQQ-gxUD5hMSKO.png\" class=\"fr-fic fr-dii\"></figure><p name=\"71e2\"><br></p><p id=\"71e2\" name=\"71e2\">Once you&rsquo;ve clicked <em>Add Object Type</em> and input a name into the name field note that the name has been mapped to an API endpoint. These endpoints, which you&rsquo;ll find on every single object page in Cosmic, are the beauty to the system. This endpoint will return all of your <strong>Blog Post</strong> type objects.</p><p id=\"d59f\" name=\"d59f\">Make a simple get request to it and you&rsquo;ll receive a JSON object that contains each of your posts and the metadata associated with each one. If you have 5 posts, it will return 5. 100, it will return 100.</p><p id=\"0f51\" name=\"0f51\">At it&rsquo;s base every object in a bucket automatically includes a title field and an HTML input field. So right off the bat without adding any metafields you have the basic components of a blog post.</p><p id=\"c059\" name=\"c059\">To show more of the power Cosmic has lets add a cover image and description field to our <strong>Blog Object</strong>. While you&rsquo;re creating your new object, clicking on the Metafields Template tab at the top will bring up the UI to add these.</p><figure id=\"ee73\" name=\"ee73\"><img data-src=\"https://cdn-images-1.medium.com/max/800/0*Q7yha0lDr_s7NhZ8.png\" src=\"https://cdn-images-1.medium.com/max/800/0*Q7yha0lDr_s7NhZ8.png\" class=\"fr-fic fr-dii\"></figure><p name=\"1573\"><br></p><p id=\"1573\" name=\"1573\">Now that we have our object type created we can create an actual object of that type.</p><figure name=\"9746\"><br></figure><figure id=\"9746\" name=\"9746\"><img data-src=\"https://cdn-images-1.medium.com/max/800/0*vSJkUbNVc-7bA5zM.png\" src=\"https://cdn-images-1.medium.com/max/800/0*vSJkUbNVc-7bA5zM.png\" class=\"fr-fic fr-dii\"></figure><p name=\"256f\"><br></p><p id=\"256f\" name=\"256f\">Once you&rsquo;ve clicked <em>Blog Posts</em> you can <em>+Add Blog Post. </em>Inside<em>&nbsp;</em>you&rsquo;ll see the structure of the <strong>Blog Post</strong> type object that we specified. All we need to do now is fill in each field with the content that we want.</p><figure name=\"c9ce\"><br></figure><figure id=\"c9ce\" name=\"c9ce\"><img data-src=\"https://cdn-images-1.medium.com/max/800/0*276vWdeBeymm_Quy.png\" src=\"https://cdn-images-1.medium.com/max/800/0*276vWdeBeymm_Quy.png\" class=\"fr-fic fr-dii\"></figure><p name=\"dad8\"><br></p><p id=\"dad8\" name=\"dad8\">Once you&rsquo;ve input your content and hit publish or save draft&sup2; you&rsquo;ll be given an API endpoint. To retrieve just this post you would send a get request to that endpoint and you&rsquo;ll get your entire pre-formatted post back in JSON form.</p><figure name=\"51ee\"><br></figure><figure id=\"51ee\" name=\"51ee\"><img data-src=\"https://cdn-images-1.medium.com/max/800/0*BCOmRaoWGfC0_-EI.png\" src=\"https://cdn-images-1.medium.com/max/800/0*BCOmRaoWGfC0_-EI.png\" class=\"fr-fic fr-dii\"></figure><p name=\"e3e4\"><br></p><p id=\"e3e4\" name=\"e3e4\">Notice our added metafields and, most importantly, that our content remains in it&rsquo;s HTML format.</p><figure name=\"1434\"><br></figure><figure id=\"1434\" name=\"1434\"><img data-src=\"https://cdn-images-1.medium.com/max/800/1*bGVZYKxE4b8pYA9AZAx4kg.png\" src=\"https://cdn-images-1.medium.com/max/800/1*bGVZYKxE4b8pYA9AZAx4kg.png\" class=\"fr-fic fr-dii\"></figure><p id=\"02d7\" name=\"02d7\">That&rsquo;s all there is to it. All you have to do is build out the front-end of your blog in whatever specs you like, write some content, retrieve your content, and then inject that content wherever you need to.</p><p id=\"a1ab\" name=\"a1ab\">&sup1;Though you could opt to build out or implement your own editor. Cosmic&rsquo;s API does include tools for that.</p><p id=\"de7f\" name=\"de7f\">&sup2;The API endpoint will not be live if you save as a draft.</p></section><section name=\"2456\"><p id=\"8fef\" name=\"8fef\">Developer, entrepreneur, and writer. You can find me over at <a data-href=\"https://medium.com/r/?url=https%3A%2F%2Fphilandrews.io%2Fblog\" href=\"https://philandrews.io/blog\" rel=\"noopener noreferrer\" target=\"_blank\">philandrews.io</a> where I write about current projects, tech, code, and sometimes life itself.</p><p id=\"9d22\" name=\"9d22\"><em>Article originally appears on </em><a data-href=\"https://philandrews.io/blog\" href=\"https://philandrews.io/blog\" rel=\"nofollow noopener\" target=\"_blank\"><em>https://philandrews.io/blog</em></a></p></section>","metafields":[{"object_type":"authors","value":"596f7774804e4a0c61000098","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"596f7774804e4a0c61000098","slug":"phil-andrews","title":"Phil Andrews","content":"","metafields":[{"value":"1b623f80-6c95-11e7-95fb-e75796c08fcc-gOyHLnup_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/1b623f80-6c95-11e7-95fb-e75796c08fcc-gOyHLnup_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/1b623f80-6c95-11e7-95fb-e75796c08fcc-gOyHLnup_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-06-27T16:56:57.686Z","created_by":"5357ef811693be2118000001","created":"2017-07-19T15:15:00.525Z","status":"published","modified_at":"2017-07-19T15:15:35.891Z","modified_by":"5716b504e9c686d006000073"}},{"value":"<p>If you&rsquo;re a developer and need to open up a new blog for yourself or a client, the idea of using Wordpress probably makes you cringe.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"f6a86480-6c94-11e7-aaee-1fa45137f0d8-1*B0HsQ8_mzLFpNoEEDLYgNg.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f6a86480-6c94-11e7-aaee-1fa45137f0d8-1*B0HsQ8_mzLFpNoEEDLYgNg.png","imgix_url":"https://imgix.cosmicjs.com/f6a86480-6c94-11e7-aaee-1fa45137f0d8-1*B0HsQ8_mzLFpNoEEDLYgNg.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-07-19T15:14:33.536Z","created_by":"5716b504e9c686d006000073","created":"2017-07-19T15:14:33.536Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"596f7774804e4a0c61000098","slug":"phil-andrews","title":"Phil Andrews","content":"","metafields":[{"value":"1b623f80-6c95-11e7-95fb-e75796c08fcc-gOyHLnup_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/1b623f80-6c95-11e7-95fb-e75796c08fcc-gOyHLnup_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/1b623f80-6c95-11e7-95fb-e75796c08fcc-gOyHLnup_400x400.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-06-27T16:56:57.686Z","created_by":"5357ef811693be2118000001","created":"2017-07-19T15:15:00.525Z","status":"published","modified_at":"2017-07-19T15:15:35.891Z","modified_by":"5716b504e9c686d006000073","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/1b623f80-6c95-11e7-95fb-e75796c08fcc-gOyHLnup_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/1b623f80-6c95-11e7-95fb-e75796c08fcc-gOyHLnup_400x400.jpg"}}},"teaser":"<p>If you&rsquo;re a developer and need to open up a new blog for yourself or a client, the idea of using Wordpress probably makes you cringe.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/f6a86480-6c94-11e7-aaee-1fa45137f0d8-1*B0HsQ8_mzLFpNoEEDLYgNg.png","imgix_url":"https://imgix.cosmicjs.com/f6a86480-6c94-11e7-aaee-1fa45137f0d8-1*B0HsQ8_mzLFpNoEEDLYgNg.png"}}},{"_id":"5964c29442669c904c00092e","order":114,"slug":"developer-spotlight-phil-andrews","title":"Developer Spotlight: Phil Andrews","content":"<p><img src=\"https://cosmicjs.imgix.net/9f962830-6659-11e7-90d7-b12899dcdab2-pexels-photo-90807.jpg?w=1200\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>It&#39;s a bird; it&#39;s a plane! No, it&#39;s just the latest installment of the <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> Developer Spotlight Series, where Developers serve as the Hero of our story. We sat down with <a href=\"https://www.philandrews.io/blog\" rel=\"noopener noreferrer\" target=\"_blank\">Phil Andrews</a>, a web application developer and JavaScript evangelist. Check him out on <a href=\"https://twitter.com/phl_andrews\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, <a href=\"https://medium.com/@PhilipAndrews\" rel=\"noopener noreferrer\" target=\"_blank\">Medium</a> and enjoy the Q/A.<br><br><strong>How long have you been building software?</strong><br>I&rsquo;m relatively new to the game, having started writing software a little less than three years ago. I needed some custom software for my company. The problem was that I didn&rsquo;t know exactly what I wanted but I knew how expensive it would be\r\nto have someone else build it and then always have to contract them back each time a change was necessary. So I decided to learn how to do it myself.</p><p>I started with <a href=\"https://www.cosmicjs.com/knowledge-base/ios-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Swift</a>, then <a href=\"https://www.cosmicjs.com/knowledge-base/python-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Python</a>, then <a href=\"https://www.cosmicjs.com/knowledge-base/javascript-cms\" rel=\"noopener noreferrer\" target=\"_blank\">JavaScript</a>. Haven&rsquo;t looked backed since. In fact, I&rsquo;m shutting down my previous company at the end of this month in order to split time between freelancing and personal projects.<br><br><strong>What is your preferred development stack?</strong><br>If it made sense I wouldn&rsquo;t leave the Apple ecosystem. The tools (Xcode), the language (Swift), they&rsquo;re just too good to not love. Particularly when they&rsquo;re paired together. It&rsquo;s very impressive the power Apple has put behind their\r\nIDE.</p><p>But in the real world <a href=\"https://www.cosmicjs.com/knowledge-base/nodejs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Node</a> / <a href=\"https://www.cosmicjs.com/knowledge-base/emberjs-cms\" rel=\"noopener noreferrer\" target=\"_blank\">Express</a> / <a href=\"https://www.cosmicjs.com/knowledge-base/react-cms\" rel=\"noopener noreferrer\" target=\"_blank\">React</a> are my everyday tools. JavaScript, written everywhere developers want to be. That really should be it&rsquo;s tagline. For all my backend needs I use AWS. They handle all of my database, server, and storage components. My IDE is Atom. Again, if it worked the same for every language you can&rsquo;t beat Xcode.<br><br><strong>What past projects are you most proud of and why?</strong><br>The second thing that I built was far too complex for my skillset. A multiplayer iOS trivia app. It came complete with matchmaking, global leaderboards, complicated game logic (It was more like chess and less like Trivia Crack), and almost the entire suite of mobile add-ons from payments to geolocation to push notifications. I was in over my head. Which was great as it forced me to learn an immense amount in a short period of time. The app, landing page, preview video, I wrote everything. It was a big weight off my shoulders when that came to a completion.<br><br><strong>Talk a little bit more about your process for building apps in your world and vertical. How has Cosmic sped up your time to market for project delivery deadlines?</strong><br>If I want to use all of my JavaScript toolbox to put together a beautiful blog, where should I store my content? I&rsquo;m going to need to retrieve and update large portions of it frequently. Plus it needs to have rich-text editing and preservation capabilities\r\nbuilt-in to the dashboard.</p><p>The answer is the place where it takes the fewest lines of code to retrieve your pre-formatted content in a manner that is simple and flexible to work with.</p><p><img src=\"https://www.cosmicjs.com/uploads/be31e5b0-65d5-11e7-a710-914452bb3308-Screen Shot 2017-07-10 at 8.10.04 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>That is a single endpoint that returns a bunch of objects (all of my blog posts) or just one object (one blog post). It&rsquo;s at the top of every object page in <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a>. Sending\r\na get request to it will return a JSON response object that includes all of the associated content and metadata. And for me specifically, post body content is delivered in HTML form so it can be directly injected into a page.</p><p>That link being at the top of the page is great design. Copy and paste it into any browser and you can see the JSON object instantly. It makes testing and debugging very quick.</p><p>Two input boxes below that and there&rsquo;s a full-powered editor. It toggles between WYSIWYG and straight HTML formatting. That allows you to easily add in custom classes or tags.</p><p><img src=\"https://www.cosmicjs.com/uploads/d213c580-65d5-11e7-86e5-bf100f537df6-Screen Shot 2017-07-10 at 8.10.15 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>&nbsp;To top it all off <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> is platform agnostic. I can write a post once and access it from anywhere. One fetch request, one post. Or, one fetch request, all my posts. I don&rsquo;t need to incorporate anything else into my project. No add-ons, no downloads, just a simple and effective content delivery system.</p><p>It was a few hours before I stumbled on <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a>. But as soon as I played around with it for a few minutes I stopped searching. For content management of a blog or portfolio I can&rsquo;t think of a better system. I&rsquo;m already thinking about how to incorporate it into client projects since the interface is friendly to developers and non-developers.<br><br><strong>What are some technologies you are excited about that you are using today, or want to learn more about?</strong><br>I have bit hook, line, and sinker on React for frontend work. The next big project I&rsquo;m working on is a dual-platform React Native app so I&rsquo;ll be wading even deeper into those waters. To me, the really interesting stuff is in the world of AI.\r\nSelf-driving cars captivate me. The idea of not having to drive places will have a profound effect on society. I&rsquo;m a full proponent of &ldquo;If it can be automated, it should be automated&rdquo;.</p><p>The personal project I&rsquo;m working on right now relies heavily on machine learning. The more I incorporate it the more I realize just how far off we are from the AI we are all fictionally familiar with, i.e. Jarvis from Iron Man. The main problem is in processing power. I believe that we won&rsquo;t get a stellar AI experience until we develop a new kind of CPU. But I digress. We&rsquo;ll get there. Even just the fraction of AI that we have right now is really useful.<br><br><strong>Cosmic Developer Spotlight Series</strong></p><p><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-jason-price\" rel=\"noopener noreferrer\" target=\"_blank\">Developer Spotlight: Jason Price</a>\r\n<a href=\"https://www.cosmicjs.com/blog/developer-spotlight-abe-hendricks\" rel=\"noopener noreferrer\" target=\"_blank\"></a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-abe-hendricks\" rel=\"noopener noreferrer\" target=\"_blank\"></a><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-abe-hendricks\" rel=\"noopener noreferrer\" target=\"_blank\">Developer Spotlight: Abe Hendricks</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-brian-mullis\" rel=\"noopener noreferrer\" target=\"_blank\">Developer Spotlight: Brian Mullis</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-micah-walter\" rel=\"noopener noreferrer\" target=\"_blank\">Developer Spotlight: Micah Walter</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-joe-tuson\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Developer Spotlight: Joe Tuson</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-coding-dojo\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Developer Spotlight: Coding Dojo</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-simple-media\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Developer Spotlight: Simple Media</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-jon-kalfayan\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Developer Spotlight: Jon Kalfayan</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-jon-bloomer\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Developer Spotlight: Jon Bloomer</a></p><p style=\" color: rgb(0, 0, 0); font-family: 'Open Sans', sans-serif; font-size: 14px; text-align: start;\"><a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Cosmic</a> is an API-first cloud-based content management platform that makes it easy to manage applications and content. If you have questions about the <a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Cosmic API</a>, please reach out to us on <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Twitter</a> or join the community on <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>&quot;I started with Swift, then Python, then JavaScript... JavaScript, written everywhere developers want to be.&quot;</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"13b24d90-6662-11e7-86e5-bf100f537df6-code.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/13b24d90-6662-11e7-86e5-bf100f537df6-code.jpg","imgix_url":"https://imgix.cosmicjs.com/13b24d90-6662-11e7-86e5-bf100f537df6-code.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-07-11T12:20:36.211Z","created_by":"5716b504e9c686d006000073","created":"2017-07-11T12:20:36.211Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>&quot;I started with Swift, then Python, then JavaScript... JavaScript, written everywhere developers want to be.&quot;</p>","featured_image":{"url":"https://cdn.cosmicjs.com/13b24d90-6662-11e7-86e5-bf100f537df6-code.jpg","imgix_url":"https://imgix.cosmicjs.com/13b24d90-6662-11e7-86e5-bf100f537df6-code.jpg"}}},{"_id":"59637cbc7f3a99b437000d3b","order":115,"slug":"how-to-build-an-emoji-game-using-angularjs","title":"How to Build an Emoji Game Using AngularJS","content":"<p style=\"text-align: center;\"><img src=\"https://cosmicjs.imgix.net/199c1a20-6571-11e7-9c7d-5db69f32654d-angular-emoji-app.png\" style=\"width: 300px;\" class=\"fr-fic fr-dib\"></p><p>In this tutorial I&#39;m going to show you how to create a &quot;Emoji&quot; game using a little bit of Node, and Cosmic. For the sake of understanding how to consume Restful API&rsquo;s, this tutorial will show how to make simple AJAX requests\r\nto the Cosmic API in order to retrieve, update, and delete data in our Cosmic Buckets. Let&#39;s get started.</p><h2>TL;DR</h2><p><a href=\"https://github.com/cosmicjs/angular-emoji-game\" rel=\"noopener noreferrer\" target=\"_blank\">Download the GitHub repo.</a><br><a href=\"https://www.cosmicjs.com/apps/angular-emoji-game\" rel=\"noopener noreferrer\" target=\"_blank\">Check out the demo.</a></p><h2>Getting Started:</h2><p>First, let&rsquo;s make a new directory to build our project in and lets also make a package.json file.</p><pre class=\"prism\">mkdir emoji-app</pre><pre class=\"prism\">emoji-app$ touch package.json</pre><p>Now, in your package.json, copy and paste the code below:</p><pre class=\"prism\">//emoji-app/package.json\r\n{\r\n  &quot;name&quot;: &quot;emoji-app&quot;,\r\n  &quot;version&quot;: &quot;1.0.0&quot;,\r\n  &quot;main&quot;: &quot;app-server.js&quot;,\r\n  &quot;engines&quot;: {\r\n    &quot;node&quot;: &quot;4.1.2&quot;,\r\n    &quot;npm&quot;: &quot;3.5.2&quot;\r\n  },\r\n  &quot;description&quot;: &quot;&quot;,\r\n  &quot;dependencies&quot;: {\r\n    &quot;body-parser&quot;: &quot;^1.17.2&quot;,\r\n    &quot;bower&quot;: &quot;^1.7.7&quot;,\r\n    &quot;buffer-to-vinyl&quot;: &quot;^1.1.0&quot;,\r\n    &quot;express&quot;: &quot;^4.13.3&quot;,\r\n    &quot;gulp&quot;: &quot;^3.9.1&quot;,\r\n    &quot;gulp-autoprefixer&quot;: &quot;^3.1.0&quot;,\r\n    &quot;gulp-concat&quot;: &quot;^2.6.0&quot;,\r\n    &quot;gulp-concat-css&quot;: &quot;^2.2.0&quot;,\r\n    &quot;gulp-env&quot;: &quot;^0.4.0&quot;,\r\n    &quot;gulp-minify-css&quot;: &quot;^1.2.4&quot;,\r\n    &quot;gulp-ng-config&quot;: &quot;^1.4.0&quot;,\r\n    &quot;gulp-npm-script-sync&quot;: &quot;^1.1.0&quot;,\r\n    &quot;gulp-webserver&quot;: &quot;^0.9.1&quot;,\r\n    &quot;http-server&quot;: &quot;^0.9.0&quot;,\r\n    &quot;stripe&quot;: &quot;^4.22.0&quot;,\r\n    &quot;wiredep&quot;: &quot;^3.0.0&quot;\r\n  },\r\n  &quot;scripts&quot;: {\r\n    &quot;postinstall&quot;: &quot;bower install &amp;&amp; gulp config &amp;&amp; gulp js&quot;,\r\n    &quot;start&quot;: &quot;npm run production&quot;,\r\n    &quot;production&quot;: &quot;node app-server.js&quot;,\r\n    &quot;gulp&quot;: &quot;gulp&quot;\r\n  },\r\n  &quot;author&quot;: &quot;&quot;,\r\n  &quot;license&quot;: &quot;ISC&quot;,\r\n  &quot;devDependencies&quot;: {\r\n    &quot;gulp-npm-script-sync&quot;: &quot;^1.1.0&quot;,\r\n    &quot;gulp-remote-src&quot;: &quot;^0.4.2&quot;\r\n  }\r\n}/\r\n            </pre><p>Second, let&rsquo;s make a bower.json file.</p><pre class=\"prism\">emoji-app$ touch bower.json</pre><p>Now, in your bower.json, copy and paste the code below:</p><pre class=\"prism\">//emoji-app/bower.json\r\n{\r\n  &quot;name&quot;: &quot;emoji-app&quot;,\r\n  &quot;description&quot;: &quot;Emoji App&quot;,\r\n  &quot;version&quot;: &quot;0.0.0&quot;,\r\n  &quot;homepage&quot;: &quot;https://github.com/kutsaniuk/emoji-app&quot;,\r\n  &quot;license&quot;: &quot;MIT&quot;,\r\n  &quot;private&quot;: true,\r\n  &quot;dependencies&quot;: {\r\n    &quot;angular&quot;: &quot;~1.5.x&quot;,\r\n    &quot;angular-mocks&quot;: &quot;~1.5.x&quot;,\r\n    &quot;angular-bootstrap&quot;: &quot;~1.1.x&quot;,\r\n    &quot;angular-cookies&quot;: &quot;~1.5.x&quot;,\r\n    &quot;angular-route&quot;: &quot;~1.5.x&quot;,\r\n    &quot;angular-ui-router&quot;: &quot;0.2.x&quot;,\r\n    &quot;angular-resource&quot;: &quot;1.5.x&quot;,\r\n    &quot;angular-animate&quot;: &quot;~1.5.x&quot;,\r\n    &quot;ng-dialog&quot;: &quot;0.6.1&quot;,\r\n    &quot;bootstrap&quot;: &quot;3.3.x&quot;,\r\n    &quot;cr-acl&quot;: &quot;&quot;,\r\n    &quot;angular-chosen-localytics&quot;: &quot;*&quot;,\r\n    &quot;bootstrap-chosen&quot;: &quot;*&quot;,\r\n    &quot;ng-flow&quot;: &quot;^2.7.4&quot;,\r\n    &quot;angular-mask&quot;: &quot;*&quot;,\r\n    &quot;checklist-model&quot;: &quot;0.9.0&quot;,\r\n    &quot;angular-ui-notification&quot;: &quot;^0.2.0&quot;,\r\n    &quot;angular-ui-calendar&quot;: &quot;^1.0.2&quot;,\r\n    &quot;angular-ui-switch&quot;: &quot;^0.1.1&quot;,\r\n    &quot;ng-scrollbars&quot;: &quot;^0.0.11&quot;,\r\n    &quot;jquery.scrollbar&quot;: &quot;*&quot;,\r\n    &quot;angular-flash-alert&quot;: &quot;^2.4.0&quot;,\r\n    &quot;components-font-awesome&quot;: &quot;^4.7.0&quot;,\r\n    &quot;angular-loading-bar&quot;: &quot;^0.9.0&quot;,\r\n    &quot;angular-environment&quot;: &quot;^1.0.8&quot;,\r\n    &quot;angular-emoji-popup&quot;: &quot;&quot;,\r\n    &quot;angular-dragdrop&quot;: &quot;&quot;,\r\n    &quot;angular-sanitize&quot;: &quot;1.5.*&quot;,\r\n    &quot;angular-drag-and-drop-directives&quot;: &quot;&quot;,\r\n    &quot;jquery-ui-touch-punch&quot;: &quot;&quot;,\r\n    &quot;angular-touch&quot;:&quot;1.5.*&quot;,\r\n    &quot;textAngular&quot;:&quot;1.5.*&quot;\r\n  },\r\n  &quot;resolutions&quot;: {\r\n    &quot;angular&quot;: &quot;~1.5.x&quot;\r\n  },\r\n  &quot;devDependencies&quot;: {\r\n    &quot;cr-acl&quot;: &quot;^0.5.0&quot;\r\n  }\r\n}\r\n            </pre><p>Config app server:</p><pre class=\"prism\">emoji-app$ touch app-server.js</pre><pre class=\"prism\">//events-app/app-server.js\r\nvar express = require(&#39;express&#39;);\r\nvar bodyParser = require(&#39;body-parser&#39;);\r\nvar app = express();\r\napp.set(&#39;port&#39;, process.env.PORT || 3000)\r\napp.use(express.static(__dirname))\r\napp.use(bodyParser.json())\r\nvar http = require(&#39;http&#39;).Server(app)\r\n// Route\r\napp.get(&#39;/&#39;, (req, res) =&gt; {\r\n  res.sendFile(__dirname + &#39;/index.html&#39;);\r\n})\r\nhttp.listen(app.get(&#39;port&#39;), () =&gt; {\r\n  console.log(&#39;Emoji App listening on &#39; + app.get(&#39;port&#39;))\r\n})\r\n            </pre><h2>What we&#39;re installing and why:</h2><ol><li>We&#39;re going to use the AngularJS framework to build Single-page application</li><li>We&#39;re installing angular-ui-router for create multi views.</li><li>We are going to use gulp for build all js and css files into one file.</li></ol><h2>Building our app:</h2><p>Now we&#39;re going to build out our file structure a bit more so that we can organize our angular modules and js files. This is what our emoji-app directory should look like:</p><pre class=\"prism\">emoji-app\r\n|----app\r\n|       |----auth\r\n|                 |----auth.ctrl.js\r\n|                 |----auth.service.js\r\n|       |----config\r\n|                 |----config.js\r\n|       |----watch\r\n|                 |----profile\r\n|                           |----watch.profile.ctrl.js\r\n|                           |----watch.profile.mdl.js\r\n|                 |----watch.ctrl.js\r\n|                 |----watch.mdl.js\r\n|                 |----watch.service.js\r\n|       |----admin\r\n|                 |----authors\r\n|                           |----add\r\n|                                   |----admin.authors.add.ctrl.js\r\n|                                   |----admin.authors.add.mdl.js\r\n|                           |----edit\r\n|                                   |----admin.authors.edit.ctrl.js\r\n|                                   |----admin.authors.edit.mdl.js\r\n|                           |----admin.authors.ctrl.js\r\n|                           |----admin.authors.mdl.js\r\n|                           |----admin.authors.service.js\r\n|                 |----quotes\r\n|                           |----add\r\n|                                   |----admin.quotes.add.ctrl.js\r\n|                                   |----admin.quotes.add.mdl.js\r\n|                           |----edit\r\n|                                   |----admin.quotes.edit.ctrl.js\r\n|                                   |----admin.quotes.edit.mdl.js\r\n|                           |----admin.quotes.ctrl.js\r\n|                           |----admin.quotes.mdl.js\r\n|                           |----admin.quotes.service.js\r\n|                 |----admin.ctrl.js\r\n|                 |----admin.mdl.js\r\n|       |----author\r\n|                 |----author.ctrl.js\r\n|                 |----author.mdl.js\r\n|       |----emoji\r\n|                 |----emoji.ctrl.js\r\n|                 |----emoji.mdl.js\r\n|                 |----emoji.service.js\r\n|       |----user\r\n|                 |----user.service.js\r\n|       |----main.mdl.js\r\n|----dist\r\n|       |----css\r\n|       |----img\r\n|       |----js\r\n|----css\r\n|----views\r\n|----resources\r\n|----gulpfile.js\r\n|----app-server.js\r\n|----bower.json\r\n|----package.json\r\n            </pre><p>Now we we will set up our index.html. Copy and paste the following code into your index.html file:</p><pre class=\"prism\">&lt;!DOCTYPE html&gt;\r\n&lt;html lang=&quot;en&quot; ng-app=&quot;main&quot;&gt;\r\n&lt;head&gt;\r\n    &lt;meta charset=&quot;utf-8&quot;&gt;\r\n    &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;\r\n    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;\r\n    &lt;meta name=&quot;description&quot; content=&quot;&quot;&gt;\r\n    &lt;meta name=&quot;author&quot; content=&quot;&quot;&gt;\r\n\r\n    &lt;title&gt;Emoji App&lt;/title&gt;\r\n\r\n    &lt;!-- bower:css --&gt;\r\n    &lt;!-- endbower --&gt;\r\n\r\n    &lt;!-- Bootstrap Core CSS --&gt;\r\n    &lt;link href=&quot;bower_components/bootstrap/dist/css/bootstrap.min.css&quot; rel=&quot;stylesheet&quot;&gt;\r\n\r\n    &lt;!-- Custom CSS --&gt;\r\n\r\n    &lt;link href=&quot;dist/css/main.min.css&quot; rel=&quot;stylesheet&quot;&gt;\r\n\r\n\r\n    &lt;!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --&gt;\r\n    &lt;!-- WARNING: Respond.js doesn&#39;t work if you view the page via file:// --&gt;\r\n    &lt;!--[if lt IE 9]&gt;\r\n    &lt;script src=&quot;https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js&quot;&gt;&lt;/script&gt;\r\n    &lt;script src=&quot;https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js&quot;&gt;&lt;/script&gt;\r\n    &lt;![endif]--&gt;\r\n\r\n&lt;/head&gt;\r\n&lt;body&gt;\r\n\r\n&lt;div ui-view&gt;&lt;/div&gt;\r\n\r\n&lt;!-- bower:js --&gt;\r\n&lt;!-- endbower --&gt;\r\n\r\n&lt;script src=&quot;dist/js/main.js&quot;&gt;&lt;/script&gt;\r\n&lt;/body&gt;\r\n&lt;/html&gt;\r\n            </pre><p>Here, we are going to target our &quot;root&quot; view to place our angular modules in later. The main.js file located in our dist directory is what our gulpfile.js file will spit out after bundling all of our angular modules Now, set up our gulpfile.js\r\nfile to bundle all of our js files and export that bundle file to our dist directory. Copy the following code into your gulpfile.js file:</p><pre class=\"prism\">//emoji-app/gulpfile.js\r\n&#39;use strict&#39;;\r\n\r\nvar gulp = require(&#39;gulp&#39;),\r\n    webserver = require(&#39;gulp-webserver&#39;),\r\n    minifyCSS = require(&#39;gulp-minify-css&#39;),\r\n    concat = require(&#39;gulp-concat&#39;),\r\n    wiredep = require(&#39;wiredep&#39;).stream,\r\n    gulpNgConfig = require(&#39;gulp-ng-config&#39;),\r\n    autoprefixer = require(&#39;gulp-autoprefixer&#39;),\r\n    b2v = require(&#39;buffer-to-vinyl&#39;),\r\n    sync = require(&#39;gulp-npm-script-sync&#39;);\r\n\r\nsync(gulp);\r\n\r\ngulp.task(&#39;css&#39;, function () {\r\n  return gulp.src(&#39;css/**/*.css&#39;)\r\n    .pipe(minifyCSS())\r\n    .pipe(concat(&#39;main.min.css&#39;))\r\n    .pipe(autoprefixer())\r\n    .pipe(gulp.dest(&#39;dist/css&#39;));\r\n});\r\n\r\ngulp.task(&#39;js&#39;, function() {\r\n    return gulp.src(&#39;app/**/**/*.js&#39;)\r\n        .pipe(concat(&#39;main.js&#39;))\r\n        .pipe(gulp.dest(&#39;dist/js/&#39;));\r\n});\r\n\r\ngulp.task(&#39;config&#39;, function () {\r\n    const json = JSON.stringify({\r\n        BUCKET_SLUG: process.env.COSMIC_BUCKET,\r\n        MEDIA_URL: &#39;https://api.cosmicjs.com/v1/&#39; + process.env.COSMIC_BUCKET + &#39;/media&#39;,\r\n        URL: &#39;https://api.cosmicjs.com/v1/&#39;,\r\n        READ_KEY: process.env.COSMIC_READ_KEY || &#39;&#39;,\r\n        WRITE_KEY: process.env.COSMIC_WRITE_KEY || &#39;&#39;,\r\n        DEFAULT_IMAGE: process.env.DEFAULT_IMAGE || &#39;&#39;\r\n    });\r\n    return b2v.stream(new Buffer(json), &#39;config.js&#39;)\r\n        .pipe(gulpNgConfig(&#39;config&#39;))\r\n        .pipe(gulp.dest(&#39;app/config&#39;));\r\n});\r\n\r\ngulp.task(&#39;default&#39;, function () {\r\n  gulp.watch(&#39;css/**/*.css&#39;, [&#39;css&#39;]);\r\n  gulp.watch(&#39;app/**/**/*.js&#39;, [&#39;js&#39;]);\r\n  gulp.watch(&#39;bower.json&#39;, [&#39;bower&#39;]);\r\n});\r\n\r\ngulp.task(&#39;bower&#39;, function () {\r\n  gulp.src(&#39;index.html&#39;)\r\n    .pipe(wiredep({\r\n      directory: &#39;bower_components&#39;\r\n    }))\r\n    .pipe(gulp.dest(&#39;&#39;));\r\n});\r\n\r\n            </pre><p>After that we can create main module. Copy and paste the following code into your main.mdl.js file:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;, [\r\n            &#39;ui.router&#39;,\r\n            &#39;ui.bootstrap&#39;,\r\n            &#39;ngMask&#39;,\r\n            &#39;ngCookies&#39;,\r\n            &#39;ngRoute&#39;,\r\n            &#39;ngDialog&#39;,\r\n            &#39;cr.acl&#39;,\r\n            &#39;ui-notification&#39;,\r\n            &#39;ngFlash&#39;,\r\n            &#39;ngAnimate&#39;,\r\n            &#39;textAngular&#39;,\r\n            &#39;flow&#39;,\r\n            &#39;angular-loading-bar&#39;,\r\n            &#39;ngDragDrop&#39;,\r\n            &#39;ngEmoticons&#39;,\r\n            &#39;ngSanitize&#39;,\r\n            &#39;ngTouch&#39;,\r\n\r\n            &#39;emoji&#39;,\r\n            &#39;admin&#39;,\r\n            &#39;author&#39;,\r\n\r\n            &#39;config&#39;\r\n        ])\r\n        .config(config)\r\n        .run(run);\r\n\r\n    config.$inject = [&#39;$stateProvider&#39;, &#39;$urlRouterProvider&#39;, &#39;cfpLoadingBarProvider&#39;, &#39;NotificationProvider&#39;];\r\n    function config($stateProvider, $urlRouterProvider, cfpLoadingBarProvider, NotificationProvider) {\r\n        cfpLoadingBarProvider.includeSpinner = false;\r\n\r\n        NotificationProvider.setOptions({\r\n            startTop: 25,\r\n            startRight: 25,\r\n            verticalSpacing: 20,\r\n            horizontalSpacing: 20,\r\n            positionX: &#39;right&#39;,\r\n            positionY: &#39;bottom&#39;\r\n        });\r\n\r\n        $urlRouterProvider.otherwise(function ($injector) {\r\n            var $state = $injector.get(&quot;$state&quot;);\r\n            var $location = $injector.get(&quot;$location&quot;);\r\n            var crAcl = $injector.get(&quot;crAcl&quot;);\r\n\r\n            var state = &quot;&quot;;\r\n\r\n            switch (crAcl.getRole()) {\r\n                case &#39;ROLE_ADMIN&#39;:\r\n                    state = &#39;admin.authors&#39;;\r\n                    break;\r\n                default : state = &#39;main.emoji&#39;;\r\n            }\r\n\r\n            if (state) $state.go(state);\r\n            else $location.path(&#39;/&#39;);\r\n        });\r\n\r\n        $stateProvider\r\n            .state(&#39;main&#39;, {\r\n                url: &#39;/&#39;,\r\n                abstract: true,\r\n                templateUrl: &#39;../views/main.html&#39;,\r\n                // controller: &#39;CartCtrl as cart&#39;,\r\n                data: {\r\n                    is_granted: [&#39;ROLE_GUEST&#39;]\r\n                }\r\n            })\r\n            .state(&#39;blog&#39;, {\r\n                url: &#39;/blog&#39;,\r\n                templateUrl: &#39;../blog.html&#39;\r\n            })\r\n            .state(&#39;auth&#39;, {\r\n                url: &#39;/login&#39;,\r\n                templateUrl: &#39;../views/auth/login.html&#39;,\r\n                controller: &#39;AuthCtrl as auth&#39;,\r\n                onEnter: [&#39;AuthService&#39;, &#39;crAcl&#39;, function(AuthService, crAcl) {\r\n                    AuthService.clearCredentials();\r\n                    crAcl.setRole();\r\n                }],\r\n                data: {\r\n                    is_granted: [&#39;ROLE_GUEST&#39;]\r\n                }\r\n            });\r\n    }\r\n\r\n    run.$inject = [&#39;$rootScope&#39;, &#39;$cookieStore&#39;, &#39;$state&#39;, &#39;crAcl&#39;];\r\n    function run($rootScope, $cookieStore, $state, crAcl) {\r\n        // keep user logged in after page refresh\r\n        $rootScope.globals = $cookieStore.get(&#39;globals&#39;) || {};\r\n\r\n        crAcl\r\n            .setInheritanceRoles({\r\n                &#39;ROLE_ADMIN&#39;: [&#39;ROLE_ADMIN&#39;, &#39;ROLE_GUEST&#39;],\r\n                &#39;ROLE_GUEST&#39;: [&#39;ROLE_GUEST&#39;]\r\n            });\r\n\r\n        crAcl\r\n            .setRedirect(&#39;main.emoji&#39;);\r\n\r\n        if ($rootScope.globals.currentUser) {\r\n            crAcl.setRole($rootScope.globals.currentUser.metadata.role);\r\n            // $state.go(&#39;admin.watches&#39;);\r\n        }\r\n        else {\r\n            crAcl.setRole();\r\n        }\r\n\r\n    }\r\n    angular.module(&#39;main&#39;)\r\n        .directive(&#39;compile&#39;, [&#39;$compile&#39;, function ($compile) {\r\n            return function (scope, element, attrs) {\r\n                scope.$watch(\r\n                    function (scope) {\r\n                        // watch the &#39;compile&#39; expression for changes\r\n                        return scope.$eval(attrs.compile);\r\n                    },\r\n                    function (value) {\r\n                        element.html(value);\r\n\r\n                        $compile(element.contents())(scope);\r\n                    }\r\n                );\r\n            };\r\n        }]);\r\n})();\r\n             </pre><p>Now we we will set up our Auth Controller. Copy and paste the following code into your auth.ctrl.js file:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .controller(&#39;AuthCtrl&#39;, AuthCtrl);\r\n\r\n    function AuthCtrl(crAcl, $state, AuthService, Flash, $log) {\r\n        var vm = this;\r\n\r\n        vm.login = login;\r\n\r\n        vm.loginForm = null;\r\n\r\n        vm.credentials = {};\r\n        vm.user = {};\r\n\r\n        function login(credentials) {\r\n            function success(response) {\r\n                function success(response) {\r\n                    if (response.data.status !== &#39;empty&#39;) {\r\n                        var currentUser = response.data.objects[0];\r\n\r\n                        crAcl.setRole(currentUser.metadata.role);\r\n                        AuthService.setCredentials(currentUser);\r\n                        $state.go(&#39;admin.authors&#39;);\r\n                    }\r\n                    else\r\n                        Flash.create(&#39;danger&#39;, &#39;Incorrect username or password&#39;);\r\n                }\r\n\r\n                function failed(response) {\r\n                    $log.error(response);\r\n                }\r\n\r\n                if (response.data.status !== &#39;empty&#39;)\r\n                    AuthService\r\n                        .checkPassword(credentials)\r\n                        .then(success, failed);\r\n                else\r\n                    Flash.create(&#39;danger&#39;, &#39;Incorrect username or password&#39;);\r\n\r\n                $log.info(response);\r\n            }\r\n\r\n            function failed(response) {\r\n                $log.error(response);\r\n            }\r\n\r\n            if (vm.loginForm.$valid)\r\n                AuthService\r\n                    .checkUsername(credentials)\r\n                    .then(success, failed);\r\n        }\r\n\r\n    }\r\n})();\r\n            </pre><p>Create Auth Service, copy and paste the code below:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .service(&#39;AuthService&#39;, function ($http,\r\n                                          $cookieStore,\r\n                                          $q,\r\n                                          $rootScope,\r\n                                          URL, BUCKET_SLUG, READ_KEY, WRITE_KEY) {\r\n            var authService = this;\r\n            $http.defaults.headers.common[&#39;X-Requested-With&#39;] = &#39;XMLHttpRequest&#39;;\r\n\r\n            authService.checkUsername = function (credentials) {\r\n                return $http.get(URL + BUCKET_SLUG + &#39;/object-type/users/search&#39;, {\r\n                    params: {\r\n                        metafield_key: &#39;email&#39;,\r\n                        metafield_value_has: credentials.email,\r\n                        limit: 1,\r\n                        read_key: READ_KEY\r\n                    }\r\n                });\r\n            };\r\n            authService.checkPassword = function (credentials) {\r\n                return $http.get(URL + BUCKET_SLUG + &#39;/object-type/users/search&#39;, {\r\n                    ignoreLoadingBar: true,\r\n                    params: {\r\n                        metafield_key: &#39;password&#39;,\r\n                        metafield_value: credentials.password,\r\n                        limit: 1,\r\n                        read_key: READ_KEY\r\n                    }\r\n                });\r\n            };\r\n            authService.setCredentials = function (user) {\r\n                $rootScope.globals = {\r\n                    currentUser: user\r\n                };\r\n\r\n                $cookieStore.put(&#39;globals&#39;, $rootScope.globals);\r\n            };\r\n            authService.clearCredentials = function () {\r\n                var deferred = $q.defer();\r\n                $cookieStore.remove(&#39;globals&#39;);\r\n\r\n                if (!$cookieStore.get(&#39;globals&#39;)) {\r\n                    $rootScope.globals = {};\r\n                    deferred.resolve(&#39;Credentials clear success&#39;);\r\n                } else {\r\n                    deferred.reject(&#39;Can\\&#39;t clear credentials&#39;);\r\n                }\r\n\r\n                return deferred.promise;\r\n            };\r\n        });\r\n})();\r\n            </pre><h2>What&#39;s going on here:</h2><ol><li>We are using the ui-router for config routes.</li><li>We created Auth Service for our asynchronous calls to our Cosmic API.</li><li>We created Auth Controller for checking credentials.</li></ol><p>Create User Service for get and update User, copy and paste the code below:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .service(&#39;UserService&#39;, function ($http,\r\n                                          $cookieStore,\r\n                                          $q,\r\n                                          $rootScope,\r\n                                          URL, BUCKET_SLUG, READ_KEY, WRITE_KEY) {\r\n            $http.defaults.headers.common[&#39;X-Requested-With&#39;] = &#39;XMLHttpRequest&#39;;\r\n\r\n            this.getCurrentUser = function (ignoreLoadingBar) {\r\n                return $http.get(URL + BUCKET_SLUG + &#39;/object/&#39; + $rootScope.globals.currentUser.slug, {\r\n                    ignoreLoadingBar: ignoreLoadingBar,\r\n                    params: {\r\n                        read_key: READ_KEY\r\n                    }\r\n                });\r\n            };\r\n            this.getUser = function (slug, ignoreLoadingBar) {\r\n                return $http.get(URL + BUCKET_SLUG + &#39;/object/&#39; + slug, {\r\n                    ignoreLoadingBar: ignoreLoadingBar,\r\n                    params: {\r\n                        read_key: READ_KEY\r\n                    }\r\n                });\r\n            };\r\n            this.updateUser = function (user) {\r\n                user.write_key = WRITE_KEY;\r\n\r\n                return $http.put(URL + BUCKET_SLUG + &#39;/edit-object&#39;, user, {\r\n                    ignoreLoadingBar: false\r\n                });\r\n            };\r\n\r\n        });\r\n})();\r\n            </pre><p>Create Emoji Service for get emoji from words, copy and paste the code below:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .service(&#39;EmojiService&#39;, function ($http) {\r\n\r\n            var that = this;\r\n\r\n            that.Quote = function (text, author, slug) {\r\n                this.text = text;\r\n                this.author = author;\r\n                this.slug = slug;\r\n            };\r\n\r\n            that.Emoji = function (code, position) {\r\n                this.code = code;\r\n                this.position = position;\r\n            };\r\n\r\n            that.Container = function (type, item) {\r\n                this.type = type;\r\n                this.item = item;\r\n            };\r\n\r\n            that.Random = {\r\n                randNumOld: 0,\r\n                getRandomInt: function (min, max) {\r\n                    var randNum = Math.floor(Math.random() * (max - min + 1)) + min;\r\n                    if (randNum == this.randNumOld) return this.getRandomInt(min, max);\r\n                    this.randNumOld = randNum;\r\n\r\n                    return randNum;\r\n                }\r\n            };\r\n\r\n            this.getEmojisFromWords = function (quote) {\r\n                var words = [];\r\n                var word = &#39;&#39;;\r\n\r\n                quote += &quot; &quot;;\r\n\r\n                for (var i = 0; i &lt; quote.length; i++) {\r\n                    if (quote[i] !== &#39; &#39;) word += quote[i];\r\n                    else {\r\n                        words.push(word);\r\n                        word = &#39;&#39;;\r\n                    }\r\n                }\r\n\r\n                for (var j = 0; j &lt; words.length; j++) {\r\n                    if (getMeAnEmoji(words[j]) !== &quot;&quot;) words[j] = &quot;:&quot; + getMeAnEmoji(words[j]) + &quot;:&quot;;\r\n                }\r\n\r\n                console.log(words);\r\n                return words;\r\n            };\r\n\r\n            this.getEmoji = function (quote, emojis, containers, checkAnswers) {\r\n                var i = 0;\r\n                var position = 0;\r\n                var result;\r\n                var word = &#39;&#39;;\r\n                var isEmoji = new RegExp(&quot;:&quot;);\r\n                var _quote = quote;\r\n\r\n                while (i &lt; quote.text.length) {\r\n                    if (isEmoji.test(quote.text[i])) {\r\n                        result = ( /\\:(\\w+)\\:/.exec(quote.text) )[1];\r\n                        emojis.push(new that.Emoji(&quot;:&quot; + result + &quot;:&quot;, i));\r\n                        containers.push(new that.Container(&#39;emoji&#39;, []));\r\n                        checkAnswers.push(new that.Emoji(&quot;:&quot; + result + &quot;:&quot;, position));\r\n\r\n                        quote.text[i] = quote.text[i].replace(&#39;:&#39; + result + &#39;:&#39;, &#39;_emoji_&#39;);\r\n\r\n                        position++;\r\n                    }\r\n                    else {\r\n                        containers.push(new that.Container(&#39;word&#39;, quote.text[i]));\r\n                    }\r\n                    word = &#39;&#39;;\r\n                    i++;\r\n                }\r\n\r\n                $http.get(&#39;/resources/emojis.json&#39;)\r\n                    .success(function (data) {\r\n                        for (var j = 0; j &lt; 3; j++) {\r\n                            emojis.push(new that.Emoji(&quot;:&quot; + data[parseInt(Math.random() * data.length)] + &quot;:&quot;));\r\n                        }\r\n                    });\r\n\r\n                return _quote;\r\n            };\r\n\r\n        });\r\n})();\r\n            </pre><p>Create Emoji Controller for get quotes and checking results, copy and paste the code below:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .controller(&#39;EmojiCtrl&#39;, EmojiCtrl);\r\n\r\n    function EmojiCtrl($scope, DEFAULT_IMAGE, EmojiService, AdminQuotesService, $log) {\r\n        var vm = this;\r\n\r\n        vm.checkAnswers = [];\r\n        vm.quote = {};\r\n        vm.quotes = [];\r\n        vm.emojis = [];\r\n        vm.containers = [];\r\n        vm.win = false;\r\n\r\n        vm.DEFAULT_IMAGE = DEFAULT_IMAGE;\r\n\r\n        var random = EmojiService.Random;\r\n        var getEmojisFromWords = EmojiService.getEmojisFromWords;\r\n        var getEmoji = EmojiService.getEmoji;\r\n        var Quote = EmojiService.Quote;\r\n        var Emoji = EmojiService.Emoji;\r\n\r\n        var getRandomQuote = _getRandomQuote;\r\n        var getUserAnswers = _getUserAnswers;\r\n\r\n        vm.getUserAnswerLength = getUserAnswerLength;\r\n        vm.nextQuote = nextQuote;\r\n        vm.checkAnswer = checkAnswer;\r\n        vm.getUserAnswerLength = getUserAnswerLength;\r\n\r\n        $scope.getOptionsContainer = getOptionsContainer;\r\n\r\n        function _getRandomQuote(quotes) {\r\n            var _random = random.getRandomInt(0, quotes.length - 1);\r\n            console.log(quotes[_random]);\r\n            return quotes[_random].slug;\r\n        }\r\n\r\n        function _getUserAnswers(containers) {\r\n            var userAnswers = [];\r\n            var position = 0;\r\n\r\n            for (var i = 0; i &lt; containers.length; i++) {\r\n\r\n                if (!Array.isArray(containers[i].item)) continue;\r\n                userAnswers.push(new Emoji(containers[i].item[0].code, position));\r\n                position++;\r\n\r\n            }\r\n\r\n            return userAnswers;\r\n        }\r\n\r\n        function getUserAnswerLength() {\r\n            var userAnswersLength = 0;\r\n\r\n            for (var k = 0; k &lt; vm.containers.length; k++) {\r\n                if (!Array.isArray(vm.containers[k].item)) continue;\r\n                if (vm.containers[k].item.length !== 0) userAnswersLength += 1;\r\n            }\r\n            return userAnswersLength;\r\n        }\r\n\r\n        function nextQuote() {\r\n            getQuote(getRandomQuote(vm.quotes));\r\n        }\r\n\r\n        function checkAnswer() {\r\n            var result = [];\r\n            var position = 0;\r\n\r\n            function in_array(value, array) {\r\n                for (var i = 0; i &lt; array.length; i++) {\r\n                    if (array[i] == value) return true;\r\n                }\r\n                return false;\r\n            }\r\n\r\n            if (vm.getUserAnswerLength() === vm.checkAnswers.length) {\r\n                var userAnswers = getUserAnswers(vm.containers);\r\n                for (var j = 0; j &lt; userAnswers.length; j++) {\r\n                    vm.checkAnswers[j].code === userAnswers[j].code ? result.push(true) : result.push(false);\r\n                }\r\n\r\n                console.log(result);\r\n\r\n                for (var i = 0; i &lt; vm.containers.length; i++) {\r\n\r\n                    if (!Array.isArray(vm.containers[i].item)) continue;\r\n                    if (!result[position]) {\r\n                        vm.emojis[vm.containers[i].item[0].jqyoui_pos] = new Emoji(vm.containers[i].item[0].code, i);\r\n                        vm.containers[i].item.splice(0, 1);\r\n                    }\r\n                    position++;\r\n\r\n                }\r\n\r\n                console.log(vm.emojis);\r\n                !in_array(false, result) ? vm.win = true : vm.win = false;\r\n            }\r\n        }\r\n\r\n        function getOptionsContainer(container) {\r\n            return {\r\n                accept: function (dragEl) {\r\n                    if (container.length &gt;= 1) {\r\n                        return false;\r\n                    } else {\r\n                        return true;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        function getQuotes() {\r\n            function success(response) {\r\n                response.data.objects.forEach(function (quote) {\r\n                    vm.quotes.push(\r\n                        new Quote(\r\n                            getEmojisFromWords(quote.metadata.text),\r\n                            quote.metadata.author,\r\n                            quote.slug\r\n                        )\r\n                    );\r\n                });\r\n                $log.info(vm.quotes);\r\n\r\n                getQuote(getRandomQuote(vm.quotes));\r\n\r\n            }\r\n\r\n            function failed(response) {\r\n                $log.error(response);\r\n            }\r\n\r\n            AdminQuotesService\r\n                .getQuotes(true)\r\n                .then(success, failed);\r\n        }\r\n\r\n        function getQuote(slug) {\r\n            function success(response) {\r\n                vm.quote = new Quote(\r\n                    getEmojisFromWords(response.data.object.metadata.text),\r\n                    response.data.object.metadata.author,\r\n                    response.data.object.slug\r\n                );\r\n\r\n                vm.emojis = [];\r\n                vm.containers = [];\r\n                vm.checkAnswers = [];\r\n                vm.win = false;\r\n\r\n                getEmoji(\r\n                    vm.quote,\r\n                    vm.emojis,\r\n                    vm.containers,\r\n                    vm.checkAnswers\r\n                );\r\n\r\n                vm.emojis.sort(function (a, b) {\r\n                    return a.code.charCodeAt(1) - b.code.charCodeAt(2)\r\n                });\r\n\r\n                vm.emojis.reverse();\r\n                console.log(&#39;emojis&#39;, vm.emojis);\r\n            }\r\n\r\n            function failed(response) {\r\n                $log.error(response);\r\n            }\r\n\r\n            AdminQuotesService\r\n                .getQuoteBySlug(slug)\r\n                .then(success, failed);\r\n        }\r\n\r\n        getQuotes();\r\n\r\n        $(&#39;.emoji&#39;).draggable(); // FOR TouchScreen\r\n    }\r\n})();\r\n            </pre><p>Create Emoji Module, copy and paste the code below:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;emoji&#39;, [])\r\n        .config(config);\r\n\r\n    config.$inject = [&#39;$stateProvider&#39;, &#39;$urlRouterProvider&#39;];\r\n    function config($stateProvider, $urlRouterProvider) {\r\n\r\n        $stateProvider\r\n            .state(&#39;main.emoji&#39;, {\r\n                url: &#39;&#39;,\r\n                templateUrl: &#39;../views/emoji/emoji.html&#39;,\r\n                controller: &#39;EmojiCtrl as emojiCtrl&#39;\r\n            });\r\n    }\r\n})();\r\n            </pre><h2>What&#39;s going on here:</h2><ol><li>We created Emoji Service for get emoji from words.</li><li>We created Emoji Controller for drag and drop emoji, get quotes and checking results.</li><li>We created Emoji Module.</li></ol><p>Create Author Controller for getting information of author, copy and paste the code below:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .controller(&#39;AuthorCtrl&#39;, AuthorCtrl);\r\n\r\n    function AuthorCtrl($stateParams, $scope, DEFAULT_IMAGE, AdminAuthorsService, Flash, $log) {\r\n        var vm = this;\r\n\r\n        vm.author = {};\r\n\r\n        vm.DEFAULT_IMAGE = DEFAULT_IMAGE;\r\n\r\n        getAuthor($stateParams.slug);\r\n\r\n        function getAuthor(slug) {\r\n            function success(response) {\r\n                response.data.object.metadata.born = new Date(response.data.object.metafields[2].value);\r\n                response.data.object.metadata.died = new Date(response.data.object.metafields[3].value);\r\n                vm.author = response.data.object;\r\n            }\r\n\r\n            function failed(response) {\r\n                $log.error(response);\r\n            }\r\n\r\n            AdminAuthorsService\r\n                .getAuthorBySlug(slug)\r\n                .then(success, failed);\r\n        }\r\n    }\r\n})();</pre><p>Create Author Module, copy and paste the code below:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;author&#39;, [])\r\n        .config(config);\r\n\r\n    config.$inject = [&#39;$stateProvider&#39;, &#39;$urlRouterProvider&#39;];\r\n    function config($stateProvider, $urlRouterProvider) {\r\n\r\n        $stateProvider\r\n            .state(&#39;main.author&#39;, {\r\n                url: &#39;author/:slug&#39;,\r\n                templateUrl: &#39;../views/author/author.html&#39;,\r\n                controller: &#39;AuthorCtrl as vm&#39;,\r\n                data: {\r\n                    is_granted: [&#39;ROLE_GUEST&#39;]\r\n                }\r\n            });\r\n    }\r\n})();</pre><h2>What&#39;s going on here:</h2><ol><li>We can see information about authors.</li></ol><h2>Conclusion:</h2><p>We were able to consume the Cosmic API with our actions and dispatcher functions. I hope you enjoyed this tutorial as much as I did, if you have any questions <a href=\"https://twitter.com/cosmic_js\">reach out to us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\">join our community on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5914999aa57d9d4b390034d5","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5914999aa57d9d4b390034d5","slug":"dmytro-kutsaniuk","title":"Dmytro Kutsaniuk","content":"","metafields":[{"value":"e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg","imgix_url":"https://imgix.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-11T17:04:26.061Z","created_by":"5357ef811693be2118000001","created":"2017-05-11T17:04:26.061Z","status":"published"}},{"value":"<p>In this tutorial I&#39;m going to show you how to create a &quot;Emoji&quot; app using a little bit of Node, and Cosmic. For the sake of understanding how to consume Restful API&rsquo;s, this tutorial will show how to make simple AJAX requests to the Cosmic API in order to retrieve, update, and delete data in our Cosmic buckets. Let&#39;s get started.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"199c1a20-6571-11e7-9c7d-5db69f32654d-angular-emoji-app.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/199c1a20-6571-11e7-9c7d-5db69f32654d-angular-emoji-app.png","imgix_url":"https://imgix.cosmicjs.com/199c1a20-6571-11e7-9c7d-5db69f32654d-angular-emoji-app.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-07-10T13:10:20.023Z","created_by":"5357ef811693be2118000001","created":"2017-07-10T13:10:20.023Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5914999aa57d9d4b390034d5","slug":"dmytro-kutsaniuk","title":"Dmytro Kutsaniuk","content":"","metafields":[{"value":"e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg","imgix_url":"https://imgix.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-11T17:04:26.061Z","created_by":"5357ef811693be2118000001","created":"2017-05-11T17:04:26.061Z","status":"published","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg","imgix_url":"https://imgix.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg"}}},"teaser":"<p>In this tutorial I&#39;m going to show you how to create a &quot;Emoji&quot; app using a little bit of Node, and Cosmic. For the sake of understanding how to consume Restful API&rsquo;s, this tutorial will show how to make simple AJAX requests to the Cosmic API in order to retrieve, update, and delete data in our Cosmic buckets. Let&#39;s get started.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/199c1a20-6571-11e7-9c7d-5db69f32654d-angular-emoji-app.png","imgix_url":"https://imgix.cosmicjs.com/199c1a20-6571-11e7-9c7d-5db69f32654d-angular-emoji-app.png"}}},{"_id":"595e451d64ba08b84e0025b6","order":116,"slug":"developer-spotlight-jason-price","title":"Developer Spotlight: Jason Price","content":"<p><img src=\"https://cosmic-s3.imgix.net/fc3ebe90-4671-11e9-85a3-e5db413f3dee-PuxTq4DwUHE.jpg?q=&w=1200&h=1200&fit=crop&crop=top,\" style=\"width: 100%;\" class=\"fr-fic fr-dib\" data-name=\"PuxTq4DwUHE.jpg\"></p><p>Dust off your cape, because a new Developer Hero joins us in our latest installment of the Cosmic Developer Spotlight Series. We sat down with Jason Price, a &nbsp;full stack web application developer and JavaScript enthusiast. Jason lives and works at <a href=\"http://www.airsquirrels.com\" rel=\"noopener noreferrer\" target=\"_blank\">Squirrels</a>, a product-centric dev shop that produces &quot;Apps to go Nuts for.&quot; Check him out on <a href=\"https://twitter.com/jmpstartjs\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, and enjoy the Q/A.<br><br><strong>How long have you been building software?</strong><br>I&rsquo;ve been building websites since the early days of just flat HTML sites. I got into PHP when I was trying to make a website for the t-shirt printing business that I was running out of my basement (around 2006). I kept working to make my website better and started spending less time actually printing shirts. So while my website was sweet, my business suffered. One day I was looking for freelance work and came across a job opening as a web application developer. I was hired on the spot and shut the t-shirt business down the same day. Been doing web apps ever since.<br><br><strong>What is your preferred development stack?</strong><br>I am a full stack JavaScript developer. I have a lot of different server setups but my favorite is Dokku on a Digital Ocean droplet with a Node app running Express. I have an app running FeathersJS out there too and I&rsquo;m starting to use that more and more. As for the client, I&rsquo;m still running a lot of Backbone apps but I&rsquo;m starting to move those over to React. React and Redux are just awesome. As for the data, I use a mixture of MongoDB / Mongoose, Firebase, and Cosmic.<br><br><strong>What past projects are you most proud of and why?</strong><br>My favorite project so far has been <a href=\"http://goditto.com\" rel=\"noopener noreferrer\" target=\"_blank\">GoDitto</a>. It&rsquo;s a really cool app that lets you mirror your screen instantly in any room that has an Apple TV or Chromecast. The way it works is you setup your receivers as rooms in the admin console. Once a room is setup, it&rsquo;s given a code that you can use to get a one time download of an application that knows to connect your screen to that receiver. There is A LOT going on under the hood and almost all of it is handled by Node and JavaScript.<br><br><strong>Talk about building apps in your world. &nbsp;Has Cosmic helped your development cycle?</strong><br>I&rsquo;d rather use Cosmic over other cloud-based database solutions or running my own database server. In some situations, you just need somewhere to put the data that someone who is kinda savvy can update. I can just set someone up as a user in my Cosmic Bucket and let them add and edit all the data they want. If they need more hand-holding, I have the freedom to build out a User Interface for specific Admin functions. If no one needs access, then they don&rsquo;t get it. I can make my calls to get the data from the client or the server which makes it great for universal apps. I&rsquo;ve honestly wanted to build something like Cosmic for years because I&rsquo;ve always needed it. When I stumbled across a Reddit post saying something like &ldquo;cloud-based CMS&rdquo;, I was overjoyed.<br><br><strong>What technologies are you excited about that you are using today or want to learn more about?</strong><br>I&rsquo;m looking forward to the advancement of things like isomorphic React apps, AWS Lambda, StdLib, and some various microservice architectures that are really changing the game with how a website or web app get data to the users. Also, watching Node and JavaScript grow into a first class programming language has been fun. I&rsquo;m anxious to see how much it&rsquo;s going to take over.<br><br><strong>Cosmic Developer Spotlight Series</strong>\r\n<a href=\"https://www.cosmicjs.com/blog/developer-spotlight-abe-hendricks\" rel=\"noopener noreferrer\" target=\"_blank\"></a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-abe-hendricks\" rel=\"noopener noreferrer\" target=\"_blank\">Developer Spotlight: Abe Hendricks</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-brian-mullis\" rel=\"noopener noreferrer\" target=\"_blank\">Developer Spotlight: Brian Mullis</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-micah-walter\" rel=\"noopener noreferrer\" target=\"_blank\">Developer Spotlight: Micah Walter</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-joe-tuson\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Developer Spotlight: Joe Tuson</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-coding-dojo\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Developer Spotlight: Coding Dojo</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-simple-media\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Developer Spotlight: Simple Media</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-jon-kalfayan\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Developer Spotlight: Jon Kalfayan</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-jon-bloomer\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Developer Spotlight: Jon Bloomer</a></p><p style=\" color: rgb(0, 0, 0); font-family: 'Open Sans', sans-serif; font-size: 14px; text-align: start;\"><a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Cosmic</a> is an API-first cloud-based content management platform that makes it easy to manage applications and content. If you have questions about the <a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Cosmic API</a>, please reach out to us on <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Twitter</a> or join the community on <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"key":"teaser","title":"Teaser","type":"html-textarea","children":null,"value":"<p>We sat down with Jason Price for our latest installment of the Cosmic Developer Spotlight Series.&nbsp;</p>"},{"value":"fc3ebe90-4671-11e9-85a3-e5db413f3dee-PuxTq4DwUHE.jpg?q=&w=1200&h=1200&fit=crop&crop=top,","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/fc3ebe90-4671-11e9-85a3-e5db413f3dee-PuxTq4DwUHE.jpg?q=&w=1200&h=1200&fit=crop&crop=top,","imgix_url":"https://imgix.cosmicjs.com/fc3ebe90-4671-11e9-85a3-e5db413f3dee-PuxTq4DwUHE.jpg?q=&w=1200&h=1200&fit=crop&crop=top,"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-07-06T14:11:41.283Z","created_by":"5716b504e9c686d006000073","created":"2017-07-06T14:11:41.283Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-03-14T16:00:14.485Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>We sat down with Jason Price for our latest installment of the Cosmic Developer Spotlight Series.&nbsp;</p>","featured_image":{"url":"https://cdn.cosmicjs.com/fc3ebe90-4671-11e9-85a3-e5db413f3dee-PuxTq4DwUHE.jpg?q=&w=1200&h=1200&fit=crop&crop=top,","imgix_url":"https://imgix.cosmicjs.com/fc3ebe90-4671-11e9-85a3-e5db413f3dee-PuxTq4DwUHE.jpg?q=&w=1200&h=1200&fit=crop&crop=top,"}}},{"_id":"595d587d64ba08b84e0014e4","order":117,"slug":"how-to-build-an-angular-js-image-feed","title":"How to Build an Angular Image Feed","content":"<p style=\"text-align: center;\"><img src=\"https://cosmicjs.imgix.net/965f5250-624e-11e7-9d28-7b65c66a2644-angular-image-feed.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>In this tutorial I&rsquo;m going to show you how to build a user-driven photo gallery, powered by Angular, hosted on the Cosmic App Server.</p><h2>TL;DR</h2><p><a href=\"https://www.cosmicjs.com/apps/angular-js-image-feed/demo\">View Demo</a><br><a href=\"https://github.com/cosmicjs/angular-image-feed\" rel=\"noopener noreferrer\" target=\"_blank\">View the full source code on GitHub</a><br><a href=\"https://www.cosmicjs.com/apps/angular-js-image-feed\">Install the App and deploy to the Cosmic App Server</a></p><h1>Prerequisites</h1><p>You&rsquo;ll need the node JS, npm and Angular cli pre-installed. Make sure you already have them before you start. Please refer to <a href=\"https://angular.io/guide/quickstart\">Angular docs</a> on how to do this.</p><h1>Getting Started</h1><p>First of all we&rsquo;ll need to create the Angular project. We&rsquo;ll use ng cli to do it. So once you&rsquo;ll have all prerequisites installed, you&rsquo;ll need to setup the new Angular project:</p><pre class=\"prism\">ng new cosmic-angular</pre><p>After you&rsquo;ll setup this project you&rsquo;ll be able to run</p><pre class=\"prism\">cd cosmic-angular\r\nng serve --open</pre><p>And play with your app in browser</p><h1>Doing everything using the existing git repo</h1><p>First of all, you have to be sure you have node &gt; 6.x installed, than run the following commands:</p><pre class=\"prism\">npm install -g @angular/cli\r\ngit clone https://github.com/cosmicjs/angular-image-feed\r\ncd cosmic-angular\r\nnpm install\r\nng serve --open</pre><p>The most recent ng cli version at the article creation moment was 1.1.3. Browser window will open automatically once you&#39;ll run the last command</p><h1>Setting up Cosmic library</h1><p>First of all, install the Cosmic npm module for Angular/JavaScript applications:</p><pre class=\"prism\">npm install cosmicjs --save</pre><p>Now you should be able to import Cosmic object and perform Cosmic API calls like following:</p><pre class=\"prism\">import Cosmic from &#39;cosmicjs&#39;;\r\nconst bucket = { slug: &#39;your-bucket-slug&#39; };\r\n\r\nCosmic.getObjects({ bucket }, (err, res) =&gt; {\r\n  console.log(res.objects);\r\n});</pre><h1>Setting up things with Cosmic</h1><p>Create the bucket and remember the bucket name (<code>&lsquo;cosmic-angular&rsquo;</code> in our case):</p><p>Than create a new object type named Photo and please remember the object type slug (photos&rsquo;).</p><p>We also need a way to store the picture itself. Please enter the &ldquo;Metafields Template&rdquo; tab and add &ldquo;Image/File&rdquo; type Metafield with key <code>&#39;photo&#39;</code>. This Metafield will store the image. We don&rsquo;t need anything\r\nmore, so just set the name and save Object Type. After save you&rsquo;ll be redirected to &lsquo;New Photo&rsquo; page. Create some photos using this page and save them - we&#39;ll use them as test data.</p><p>You&#39;ll also need to create the Bucket write key. It&#39;s necessary to allow users upload pictures and create photo Objects. Open Settings page and click &#39;Generate new key&#39; on API Write Access Key than copy generated key and save the changes.</p><p><a href=\"https://github.com/cosmicjs/angular-image-feed/blob/master/img2.png\" target=\"_blank\"><img src=\"https://github.com/cosmicjs/angular-image-feed/raw/master/img2.png\" alt=\"\" class=\"fr-fic fr-dii\"></a></p><h1>Angular environments</h1><p>Edit the <code>src/environments/environment.ts</code> to match the following:</p><pre class=\"prism\">export const environment = {\r\n  production: false,\r\n  write_key: &#39;YOURWRITEKEY&#39;,\r\n  bucket_name: &#39;YOURBUCKETNAME&#39;,\r\n  photos_type: &#39;photos&#39;\r\n};</pre><h1>Configuration service for Angular</h1><p>We&#39;re planning to use Cosmic Objects in more than one Angular component. In such case makes sense to create a dedicated configuration service and store all Cosmic related things such as bucket name, write key, etc in a single place. Let&#39;s create <code>src/services/cosmic_config.ts</code> with the following contents:</p><pre class=\"prism\">import {Injectable} from &#39;@angular/core&#39;;\r\n\r\n@Injectable()\r\nexport class CosmicConfigService {\r\n    private write_key;\r\n    private bucket_name;\r\n    private photos_type;\r\n\r\n    constructor() {\r\n        this.photos_type = environment.photos_type;\r\n        this.write_key = environment.write_key;\r\n        this.bucket_name = environment.bucket_name\r\n    }\r\n\r\n    public getReadCfg(): any {\r\n        return {\r\n            bucket: {\r\n                slug: this.bucket_name\r\n            }\r\n        };\r\n    }\r\n\r\n    public getWriteCfg(): any {\r\n        return {\r\n            bucket: {\r\n                slug: this.bucket_name,\r\n                write_key: this.write_key\r\n            }\r\n        };\r\n    }\r\n\r\n    public buildPhotoUploadObj(title, file): any {\r\n        return {\r\n            write_key: this.write_key,\r\n            type_slug: this.photos_type,\r\n            title: title,\r\n            metafields: [{\r\n                key: &#39;picture&#39;,\r\n                type: &#39;file&#39;,\r\n                value: file\r\n            }]\r\n        };\r\n    }\r\n\r\n    getPhotoSlug() {\r\n        return this.photos_type;\r\n    }\r\n}</pre><p>This service has a few methods:</p><ul><li><code>getReadCfg</code> - returns config object for reading data</li><li><code>getWriteCfg</code> - return config object for writing data (with write_key specified)</li><li><code>buildPhotoUploadObj</code> - builds object to create photo using file name and title</li><li><code>getPhotoSlug</code> - returns object type slug for photos</li></ul><p>We&#39;ll call these methods from our Angular components.</p><h1>View the gallery - Angular part</h1><p>Create <code>src/components/picture/picture.ts</code> file with the following content:</p><pre class=\"prism\">import { Component, Input } from &#39;@angular/core&#39;;\r\n\r\n@Component({\r\n    selector: &#39;picture&#39;,\r\n    templateUrl: &#39;./picture.html&#39;\r\n})\r\nexport class Picture {\r\n    @Input() picture: any;\r\n\r\n    constructor() {\r\n    }\r\n}</pre><p>Than create a template for Picture component:</p><pre class=\"prism\">&lt;div class=&quot;ui card picture-item&quot;&gt;\r\n  &lt;div class=&quot;image&quot;&gt;\r\n    &lt;img class=&quot;ui fluid image&quot; [src]=&quot;picture.metafield.picture.url&quot; alt=&quot;{{ picture.title }}&quot;&gt;\r\n  &lt;/div&gt;\r\n  &lt;div class=&quot;content&quot;&gt;\r\n    &lt;div class=&quot;description&quot;&gt;{{ picture.title }}&lt;/div&gt;\r\n  &lt;/div&gt;\r\n&lt;/div&gt;</pre><p>We&#39;ll use this component to display a single gallery picture item.</p><p>Now create <code>src/components/picture_upload/picture_upload.ts</code> file with the following content:</p><pre class=\"prism\">import { Component, Input, Output, EventEmitter } from &#39;@angular/core&#39;;\r\nimport Cosmic from &#39;cosmicjs&#39;;\r\nimport { CosmicConfigService } from &#39;../../services/cosmic_config&#39;;\r\n\r\n@Component({\r\n    selector: &#39;picture-upload&#39;,\r\n    templateUrl: &#39;./picture_upload.html&#39;\r\n})\r\nexport class PictureUpload {\r\n    private fl;\r\n    private title;\r\n    public uploading;\r\n    @Output() onUpload = new EventEmitter&lt;any&gt;();\r\n\r\n    constructor(\r\n        private cosmicConfig: CosmicConfigService\r\n    ) {\r\n        this.uploading = false;\r\n        this.fl = null;\r\n        this.title = &quot;&quot;;\r\n    }\r\n\r\n    onFileChange(ev) {\r\n        if (ev.target.files &amp;&amp; ev.target.files.length) {\r\n            this.fl = ev.target.files[0];\r\n        }\r\n    }\r\n\r\n    upload() {\r\n        this.uploading = true;\r\n        Cosmic.addMedia(this.cosmicConfig.getWriteCfg(), {\r\n            media: this.fl,\r\n            folder: this.fl.name\r\n        }, (error, response) =&gt; {\r\n            Cosmic.addObject(this.cosmicConfig.getWriteCfg(),\r\n                this.cosmicConfig.buildPhotoUploadObj(this.title, response.body.media.name),\r\n            (error, response) =&gt; {\r\n                this.title = &#39;&#39;;\r\n                this.fl = null;\r\n                this.uploading = false;\r\n                this.onUpload.emit({});\r\n            });\r\n        });\r\n    }\r\n}</pre><p>Than add the following template:</p><pre class=\"prism\">&lt;div class=&quot;picture-upload&quot;&gt;\r\n    &lt;div class=&quot;ui form&quot; [ngClass]=&quot;{ &#39;active dimmer&#39;: uploading }&quot;&gt;\r\n        &lt;div class=&quot;ui grid&quot; *ngIf=&quot;!uploading&quot;&gt;\r\n            &lt;div class=&quot;five wide column&quot;&gt;\r\n                &lt;div class=&quot;field&quot;&gt;\r\n                    &lt;input type=&quot;text&quot; placeholder=&quot;Title...&quot; (input)=&quot;title = $event.target.value&quot; [value]=&quot;title&quot;/&gt;\r\n                &lt;/div&gt;\r\n            &lt;/div&gt;\r\n            &lt;div class=&quot;six wide column&quot;&gt;\r\n                &lt;div class=&quot;field&quot;&gt;\r\n                    &lt;input type=&quot;file&quot; (change)=&quot;onFileChange($event)&quot;/&gt;\r\n                &lt;/div&gt;\r\n            &lt;/div&gt;\r\n            &lt;div class=&quot;five wide column&quot;&gt;\r\n                &lt;button class=&quot;ui primary button fluid&quot; (click)=&quot;upload()&quot;&gt;Upload photo&lt;/button&gt;\r\n            &lt;/div&gt;\r\n        &lt;/div&gt;\r\n        &lt;div *ngIf=&quot;uploading&quot; class=&quot;ui text loader&quot;&gt;Upload is in progress&lt;/div&gt;\r\n    &lt;/div&gt;\r\n&lt;/div&gt;</pre><p>Add <code>Picture</code> and <code>PictureUpload</code> components to app.module.ts as it&rsquo;s done with other components like AppComponent. This will allow us to use it in our app.</p><h2>What happens here?</h2><p>Our <code>Picture</code> component doesn&#39;t perform anything interesting - it just displays object properties. However <code>PuctureUpload</code> component doing much more interesting thing. It creates a record on Cosmic servers, but this record has an image attached, so this makes the whole process more complicated:</p><ul><li>upload the image to Cosmic servers (using <code>addMedia</code> method)</li><li>obtain uploaded image name</li><li>create the new Cosmic object (using <code>addObject</code> method) passing it obtained image name</li><li>fire an event to notify parent component about finished upload</li></ul><h1>Concatenating everything together</h1><p>Now we need to modify our <code>AppComponent</code> to use these newly created components. Modify <code>src/app/app.component.ts</code> to look like the following:</p><pre class=\"prism\">import { Component } from &#39;@angular/core&#39;;\r\nimport Cosmic from &#39;cosmicjs&#39;;\r\nimport {CosmicConfigService} from &#39;../services/cosmic_config&#39;;\r\n\r\n@Component({\r\n  selector: &#39;app-root&#39;,\r\n  templateUrl: &#39;./app.component.html&#39;,\r\n  styleUrls: [&#39;./app.component.css&#39;]\r\n})\r\nexport class AppComponent {\r\n  public items = [];\r\n  page = 0;\r\n  page_size = 2;\r\n  scrollEnabled = true;\r\n\r\n  constructor(\r\n    public cosmicCfg: CosmicConfigService\r\n  ) {\r\n    this.reload();\r\n  }\r\n\r\n  reload() {\r\n    this.items = [];\r\n    this.page = 0;\r\n    this.scrollEnabled = true;\r\n    let params = {\r\n      type_slug: this.cosmicCfg.getPhotoSlug(),\r\n      limit: this.page_size,\r\n      skip: 0\r\n    };\r\n    Cosmic.getObjectType(this.cosmicCfg.getReadCfg(), params, (err, res) =&gt; {\r\n      this.items = res.objects.all;\r\n    });\r\n  }\r\n\r\n  onUpload() {\r\n    this.reload();\r\n  }\r\n\r\n  onScroll() {\r\n    if (!this.scrollEnabled) {\r\n      return;\r\n    }\r\n    this.page++;\r\n    let params = {\r\n      type_slug: this.cosmicCfg.getPhotoSlug(),\r\n      limit: this.page_size,\r\n      skip: this.page * this.page_size\r\n    };\r\n    Cosmic.getObjectType(this.cosmicCfg.getReadCfg(), params, (err, res) =&gt; {\r\n      if (res.objects &amp;&amp; res.objects.all) {\r\n        res.objects.all.forEach((itm) =&gt; {\r\n          this.items.push(itm);\r\n        });\r\n      }\r\n      else {\r\n        this.scrollEnabled = false;\r\n      }\r\n    });\r\n  }\r\n}</pre><p>And make its template like following:</p><pre class=\"prism\">&lt;div infiniteScroll [infiniteScrollDistance]=&quot;1&quot; [infiniteScrollThrottle]=&quot;300&quot; (scrolled)=&quot;onScroll()&quot;&gt;\r\n    &lt;picture-upload (onUpload)=&quot;onUpload()&quot;&gt;&lt;/picture-upload&gt;\r\n&lt;picture *ngFor=&quot;let item of items&quot; [picture]=&quot;item&quot;&gt;&lt;/picture&gt;\r\n&lt;/div&gt;</pre><p>We&#39;re planning to have the infinite-scrollable gallery (and you can already see it&#39;s directives in code). This means we have to install the right library:</p><pre class=\"prism\">npm install --save ngx-infinite-scroll</pre><h2>What&rsquo;s happening here?</h2><ul><li>until we got empty response, we&#39;re assuming there are more photos on server</li><li>we&#39;re fetching photos in bulks of 2 (<code>page_size</code> property)</li><li>we&#39;re fetching only &#39;photo&#39; type objects (this is useful in case if we have more object types)</li><li>once we got empty response, we&#39;re setting the flag and stopping try to fetch more photos</li><li>once we&#39;re getting an event from <code>PhotoUpload</code> component, we&#39;re resetting the whole list.</li></ul><h1>Deploy to Cosmic servers</h1><p>Cosmic has some requirements for deploying apps:</p><ul><li>it must be in public git repo, or you need to <a href=\"https://www.cosmicjs.com/integrations\">connect your GitHub account</a> for private repo deployment</li><li><a href=\"https://devcenter.heroku.com/\">Specific requirements</a> depending on your platform must be met</li></ul><p>In our case we actually have HTML5 app, so we&#39;ll need some additional software.</p><h2>Prepare config</h2><p>Create a <code>prepare.js</code> file in your project directory:</p><pre class=\"prism\">var fs = require(&#39;fs&#39;);\r\n\r\nvar str = `\r\n    export const environment = {\r\n        production: true,\r\n        write_key: &#39;${process.env.COSMIC_WRITE_KEY}&#39;,\r\n        bucket_name: &#39;${process.env.COSMIC_BUCKET}&#39;,\r\n        photos_type: &#39;photos&#39;\r\n    };\r\n`;\r\nfs.writeFile(&quot;./src/environments/environment.prod.ts&quot;, str, function(err) {\r\n    if(err) {\r\n        return console.log(err);\r\n    }\r\n    console.log(&quot;The file was saved!&quot;);\r\n}); </pre><p>This script will rewrite default Angular production settings file to use your Cosmic bucket write key and bucket name.</p><h2>Modify package.json</h2><p>Angular cli adds some packaged on <code>package.json</code> as <code>devDependencies</code>. We have to move them in <code>dependencies</code> to make our scripts work:</p><pre class=\"prism\">...\r\n&quot;dependencies&quot;: {\r\n    &quot;@angular/cli&quot;: &quot;^1.1.3&quot;,\r\n    &quot;@angular/compiler-cli&quot;: &quot;^4.0.0&quot;,\r\n    ...\r\n},\r\n...</pre><h2>Prepare software</h2><p>We&#39;ll also need something to serve our Angular app. We&#39;ll use Express framework:</p><pre class=\"prism\">npm install --save express</pre><p>Add the following to your package.json:</p><pre class=\"prism\">{\r\n  ...\r\n  &quot;scripts&quot;: {\r\n    ...\r\n    &quot;start&quot;: &quot;node app.js&quot;\r\n  },\r\n  ...\r\n  &quot;engines&quot;: {\r\n    &quot;node&quot;: &quot;6.9.4&quot;,\r\n    &quot;npm&quot;: &quot;4.2.0&quot;\r\n  }\r\n  ...\r\n}</pre><p>The main point is to have <code>start</code> command defined in the <code>scripts</code> section (you can safely replace default angular <code>start</code> command). This is the command which will be run to start our app. So now we have the only thing left - create the <code>app.js</code> file:</p><pre class=\"prism\">const express = require(&#39;express&#39;)\r\nconst app = express()\r\n\r\napp.use(express.static(&#39;./dist&#39;));\r\n\r\napp.listen(process.env.PORT, function () {\r\n});</pre><p>This is a simple Express app which serves <code>dist</code> dir as dir of static files. Please take note - app listens on port specified via <code>PORT</code> environment variable, it&#39;s important to run apps on Cosmic App Server.</p><h2>Build Angular app for production</h2><p>We&#39;ll use <code>app.json</code> to do this (dokku <code>predeploy</code> section):</p><pre class=\"prism\">{\r\n    &quot;scripts&quot;: {\r\n        &quot;dokku&quot;: {\r\n            &quot;predeploy&quot;: &quot;node prepare.js &amp;&amp; ng build --aot --prod&quot;\r\n        }\r\n    }\r\n}</pre><p>This script will be executed before we&#39;ll launch our express app to build the Angular app for production.</p><h2>Run it!</h2><p>Now you can enter &#39;Deploy Web App&#39; page in your Cosmic Dashboard.</p><p><a href=\"https://github.com/cosmicjs/angular-image-feed/blob/master/img-deploy.png\" target=\"_blank\"><img src=\"https://github.com/cosmicjs/angular-image-feed/raw/master/img-deploy.png\" alt=\"\" class=\"fr-fic fr-dii\"></a></p><p>Simply enter your repo URL and click &#39;Deploy to Web&#39; - deploy process will be started and app become ready in a couple of minutes.</p><h1>Conclusion</h1><p>Using the Cosmic App Server allows us to quickly deploy the application to hosting using a git repo and you don&#39;t worry about server configuration and software installation - everything will be done by Cosmic servers.</p>","metafields":[{"object_type":"authors","value":"591dcc617b17dbf10500212d","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"591dcc617b17dbf10500212d","slug":"ivan-larionov","title":"Ivan Larionov","content":"","metafields":[{"value":"713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg","imgix_url":"https://imgix.cosmicjs.com/713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-18T16:31:29.363Z","created_by":"5357ef811693be2118000001","created":"2017-05-18T16:31:29.363Z","status":"published"}},{"value":"<p>In this tutorial I&rsquo;m going to show you how to build a user-driven photo gallery, powered by Angular JS, hosted on the Cosmic App Server.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"965f5250-624e-11e7-9d28-7b65c66a2644-angular-image-feed.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/965f5250-624e-11e7-9d28-7b65c66a2644-angular-image-feed.jpg","imgix_url":"https://imgix.cosmicjs.com/965f5250-624e-11e7-9d28-7b65c66a2644-angular-image-feed.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-07-06T21:22:05.857Z","created_by":"5357ef811693be2118000001","created":"2017-07-06T21:22:05.857Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"591dcc617b17dbf10500212d","slug":"ivan-larionov","title":"Ivan Larionov","content":"","metafields":[{"value":"713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg","imgix_url":"https://imgix.cosmicjs.com/713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-18T16:31:29.363Z","created_by":"5357ef811693be2118000001","created":"2017-05-18T16:31:29.363Z","status":"published","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg","imgix_url":"https://imgix.cosmicjs.com/713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg"}}},"teaser":"<p>In this tutorial I&rsquo;m going to show you how to build a user-driven photo gallery, powered by Angular JS, hosted on the Cosmic App Server.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/965f5250-624e-11e7-9d28-7b65c66a2644-angular-image-feed.jpg","imgix_url":"https://imgix.cosmicjs.com/965f5250-624e-11e7-9d28-7b65c66a2644-angular-image-feed.jpg"}}},{"_id":"595a7e5d0e2d88e933000f22","order":118,"slug":"cosmic-js-receipt-downloads-now-available","title":"Cosmic Receipt Downloads Now Available","content":"<p>As users add more and more Buckets to their Cosmic Dashboards, billing management can become hairy. Thanks to requests from and collaboration with the Cosmic Community, we have rolled out a new feature to help you manage your Buckets and their billing\r\ninformation for streamlined account management. Introducing Cosmic Receipt Downloads, now available in your Bucket Dashboard.&nbsp;</p><p><img src=\"https://www.cosmicjs.com/uploads/89c35ce0-600e-11e7-a11c-c75aa725cc8e-iAwCJb4SzR.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>To access receipts for your Buckets, navigate to your Cosmic Bucket &gt; Settings &gt; Billing. You will see detailed items such as your credit card information on file, your current plan and products as well as your payments table (pictured above).&nbsp;</p><p><img src=\"https://www.cosmicjs.com/uploads/d95b7360-600d-11e7-9629-dfb79cbd530f-Screen Shot 2017-07-03 at 11.36.47 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>If you have questions about the new Cosmic Receipt Downloads, <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">join our Slack community</a>.&nbsp;</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>Download receipts for your Cosmic Buckets within your Dashboard.&nbsp;</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"cc8dffc0-6014-11e7-8bef-13b197443c0f-1499119225_bill.svg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/cc8dffc0-6014-11e7-8bef-13b197443c0f-1499119225_bill.svg","imgix_url":"https://imgix.cosmicjs.com/cc8dffc0-6014-11e7-8bef-13b197443c0f-1499119225_bill.svg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-07-03T17:26:52.955Z","created_by":"5716b504e9c686d006000073","created":"2017-07-03T17:26:52.955Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>Download receipts for your Cosmic Buckets within your Dashboard.&nbsp;</p>","featured_image":{"url":"https://cdn.cosmicjs.com/cc8dffc0-6014-11e7-8bef-13b197443c0f-1499119225_bill.svg","imgix_url":"https://imgix.cosmicjs.com/cc8dffc0-6014-11e7-8bef-13b197443c0f-1499119225_bill.svg"}}},{"_id":"59599fde6ed8253e1d000c49","order":119,"slug":"building-and-publishing-a-cosmic-js-extension-using-bitbucket-pipelines","title":"Building and Publishing a Cosmic Extension Using Bitbucket Pipelines","content":"<p style=\"text-align: center;\"><img src=\"https://cosmicjs.imgix.net/26b41d70-5f9a-11e7-b120-9f6bc26aeb8f-amazon-product-search.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>Cosmic just released their new Extension functionally, which enables anyone to embed their own custom app inside the Cosmic CMS!</p><p>In this tutorial we&#39;ll be going through some of the steps required to make our Amazon Product Search Extension.</p><h2>TL;DR</h2><p><a href=\"https://github.com/cosmicjs/amazon-product-search\" rel=\"noopener noreferrer\" target=\"_blank\">View the full codebase on GitHub</a><br><a href=\"https://www.cosmicjs.com/login\">Install the Extension in your Bucket in Your Bucket &nbsp;&gt; Extensions &gt; Browse Extensions</a><a data-href=\"https://www.cosmicjs.com/docs/extensions\" href=\"https://www.cosmicjs.com/docs/extensions\" rel=\"noopener\" target=\"_blank\"></a><br><a data-href=\"https://www.cosmicjs.com/docs/extensions\" href=\"https://www.cosmicjs.com/docs/extensions\" rel=\"noopener\" target=\"_blank\">View the Extension documentation</a> for more information on building an Extension</p><h2>The extension we&#39;re building</h2><p>We&#39;re building a simple Extension that allows you to search the Amazon Product Catalogue and add Objects to your bucket with products&#39; name, description, image, and an affiliate link.</p><p>This is quite a simple app, built using react, and we won&#39;t be going into too many details on the parts that don&#39;t directly relate to the new Cosmic Extensions API.</p><h2>Getting access to the Cosmic API in your Extension</h2><p>Cosmic embeds extensions as an <code>&lt;iframe&gt;</code> inside its CMS interface, the extension is given a url with a querystring providing all the information needed for your app to access the relevant bucket like so:</p><p><code>https://43d32000-5ce7-11e7-8fc4-c1f6eec4f920.cosmicext.com/?bucket_slug=my-bucket-slug&amp;read_key=foo&amp;write_key=bar</code></p><p>Extracting these variables, is very easy, and even easier using a library like <code>qs</code>:</p><pre class=\"prism\">import qs from &quot;qs&quot;;\r\n\r\nconst { bucket_slug, read_key, write_key, } = qs.parse(window.location.search.slice(1, Infinity));\r\n\r\nconsole.log({\r\n   bucket_slug,\r\n   read_key,\r\n   write_key,\r\n});</pre><p>These keys can then be used to make API calls on the bucket your currently using the extension in:</p><pre class=\"prism\">fetch(\r\n   `https://api.cosmicjs.com/v1/${bucket_slug}/object/amazon-credentials${\r\n      read_key\r\n         ? &quot;?read_key=&quot; + read_key\r\n         : &quot;&quot;\r\n   }`,\r\n   opts,\r\n);</pre><p>In our app we use these keys to add new object for Amazon Products that we find.</p><h2>extension.json</h2><p>One file that must be included in your extension is the <code>extension.json</code> file. This tells Cosmic important metadata about your app, like it&#39;s name, icon, display image, and the default Objects and Object Types that should be created when the Extension is first installed. The <code>extension.json</code> for our app is as follows:</p><pre class=\"prism\">{\r\n  &quot;title&quot;: &quot;Amazon Product Search&quot;,\r\n  &quot;font_awesome_class&quot;: &quot;fa-shopping-basket&quot;,\r\n  &quot;image_url&quot;: &quot;http://fla.fg-a.com/shopping-cart/shopping-cart-black-3.png&quot;,\r\n  &quot;objects&quot;: [\r\n    {\r\n      &quot;title&quot;: &quot;Amazon Credentials&quot;,\r\n      &quot;slug&quot;: &quot;amazon-credentials&quot;,\r\n      &quot;type&quot;: &quot;amazon-credentials&quot;,\r\n      &quot;metafields&quot;: [\r\n        {\r\n        &quot;key&quot;: &quot;amz-key&quot;,\r\n        &quot;title&quot;: &quot;Key&quot;,\r\n        &quot;type&quot;: &quot;text&quot;,\r\n        &quot;value&quot;: &quot;&quot;\r\n        },\r\n        {\r\n        &quot;key&quot;: &quot;amz-secret&quot;,\r\n        &quot;title&quot;: &quot;Secret&quot;,\r\n        &quot;type&quot;: &quot;text&quot;,\r\n        &quot;value&quot;: &quot;&quot;\r\n        },\r\n        {\r\n        &quot;key&quot;: &quot;amz-tag&quot;,\r\n        &quot;title&quot;: &quot;Tag&quot;,\r\n        &quot;type&quot;: &quot;text&quot;,\r\n        &quot;value&quot;: &quot;&quot;\r\n        }\r\n      ]\r\n    }\r\n  ],\r\n  &quot;object_types&quot;: [\r\n    {\r\n      &quot;title&quot;: &quot;Amazon Products&quot;,\r\n      &quot;slug&quot;: &quot;amazon-items&quot;,\r\n      &quot;singular&quot;: &quot;Amazon Product&quot;,\r\n      &quot;metafields&quot;:[\r\n        {&quot;key&quot;:&quot;image_url&quot;,&quot;type&quot;:&quot;text&quot;,&quot;value&quot;:&quot;&quot;,&quot;title&quot;:&quot;image_url&quot;,&quot;parent&quot;:false,&quot;children&quot;:null},\r\n        {&quot;key&quot;:&quot;affiliate_link&quot;,&quot;type&quot;:&quot;text&quot;,&quot;value&quot;:&quot;&quot;,&quot;title&quot;:&quot;affiliate_link&quot;,&quot;parent&quot;:false,&quot;children&quot;:null}\r\n      ]\r\n    }\r\n  ]\r\n}</pre><p>The <code>title</code> field is the name that your extension will display inside Cosmic The <code>font_awesome_class</code> field must be a valid <a href=\"http://fontawesome.io/icons/\">Font Awesome</a> icon name the <code>image_url</code> field is a display image that will show with your extension.</p><p>You also have space to specify a list of objects that will be created when your extension is installed, here we&#39;ve detailed an object that will store our Amazon Product Search credentials. This means that Cosmic will handle saving this information\r\nfor us!</p><h2>Deployment and Continuous Integration</h2><p>Uploading your extension to Cosmic is very easy, you just need to take a folder that contains you <code>extension.json</code>file, and an <code>index.html</code> file (and any other assets you need), zip it up, and upload it.</p><p>Our build folder looks like this:</p><pre class=\"prism\"><code>build\r\n├── extension.json\r\n├── index.html\r\n└── static\r\n └── js\r\n └── main.a651cd8a.js\r\n</code></pre><p>You can either upload your zip file through the Cosmic CMS, or by using the rest API.</p><p>We use Bitbucket to host our code, which has a built in CI service called Pipelines. You can configure pipelines to run on every commit to the <code>master</code> branch of your git repo, and to upload the newest version of your app to Cosmic&#39;s servers.</p><p>We&#39;ll configure our Bitbucket Pipeline like so:</p><pre class=\"prism\">image: codogo/pipelines-universal:latest\r\n\r\npipelines:\r\n  branches:\r\n    master:\r\n      - step:\r\n          script:\r\n          - yarn install \r\n          - yarn run lint\r\n          - yarn run build\r\n          - ./uploadNewExtension.sh</pre><p>Where <code>uploadNewExtension.sh</code> contains:</p><pre class=\"prism\">#!/bin/bash\r\n\r\n# $BUCKET_SLUG, $READ_KEY, and $WRITE_KEY are environment variables\r\n\r\nEXTENSION_NAME=&quot;${EXTENSION_NAME:-Amazon Product Search}&quot;\r\n\r\necho &quot;geting previous version extension id...&quot;\r\nPREVIOUS_EXTENSION_ID=&quot;$( curl --progress-bar &quot;https://api.cosmicjs.com/v1/extensions-2?hide_metafields=true&amp;read_key=foo&quot; | jq -r &quot;.bucket.extensions | map(select(.title == \\&quot;$EXTENSION_NAME\\&quot; )) | .[0].id&quot;  )&quot;\r\n# jq is a neat little program for extracting data from json, it is available here: https://jqplay.org/\r\n\r\nif [ &quot;$PREVIOUS_EXTENSION_ID&quot; == &quot;null&quot; ] ; then\r\necho &quot;There is no &#39;$EXTENSION_NAME&#39; extension on cosmic to delete&quot;\r\nelse\r\necho &quot;Found id for &#39;$EXTENSION_NAME&#39;: $PREVIOUS_EXTENSION_ID&quot;\r\necho &quot;deleting old extension...&quot;\r\ncurl --progress-bar -X DELETE &quot;https://api.cosmicjs.com/v1/$BUCKET_SLUG/extensions/$PREVIOUS_EXTENSION_ID&quot; -d &quot;{\\&quot;write_key\\&quot;:\\&quot;$WRITE_KEY\\&quot;}&quot; -H &quot;Content-type: application/json&quot; &gt; /dev/null\r\nfi\r\n\r\necho &quot;upload new version of extension...&quot;\r\ncurl --progress-bar --url &quot;https://api.cosmicjs.com/v1/$BUCKET_SLUG/extensions&quot; --header &quot;content-type: multipart/form-data&quot; --form &quot;write_key=$WRITE_KEY&quot; --form &quot;zip=@./build.zip&quot; &gt; /dev/null</pre><p>This script will remove any previously uploaded versions of our extension, then take our zipped Extension and upload it to our bucket.</p><h2>Summary</h2><p>In this tutorial we&#39;ve had an introduction to the way Cosmic hosts and integrates with your Extension, and an explanation of how to upload your Extension using Bitbucket&#39;s Continuous integration. If you&#39;ve learnt something, please <a href=\"https://twitter.com/intent/tweet?text=Building and Publishing a Cosmic Extension Using Bitbucket Pipelines @cosmic_js: https://www.cosmicjs.com/blog/building-and-publishing-a-cosmic-js-extension-using-bitbucket-pipelines\" rel=\"noopener noreferrer\" target=\"_blank\">share this article</a>!</p><p>If you&#39;re making an extension, or anything else, with Cosmic <a href=\"https://www.cosmicjs.com/community\">get in touch on our Slack</a> or <a href=\"https://twitter.com/cosmic_js\">Twitter</a>, we&#39;d love to see what you&#39;re making.</p><p>This post was written by <a href=\"https://consulting.codogo.io/\">Codogo</a>, an award-winning digital agency with a passion for creating amazing digital experiences.</p>","metafields":[{"object_type":"authors","value":"590b73ff200ca2723f002d01","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"590b73ff200ca2723f002d01","slug":"freddie-ridell","title":"Freddie Ridell","content":"","metafields":[{"value":"2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg","imgix_url":"https://imgix.cosmicjs.com/2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-04T18:33:35.138Z","created_by":"5357ef811693be2118000001","created":"2017-05-04T18:33:35.138Z","status":"published"}},{"value":"<p>Cosmic just released their new extension functionally, which enables anyone to embed their own custom app inside the Cosmic CMS!</p><p>In this tutorial we&#39;ll be going through some of the steps required to make our Amazon Product Search extension.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"26b41d70-5f9a-11e7-b120-9f6bc26aeb8f-amazon-product-search.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/26b41d70-5f9a-11e7-b120-9f6bc26aeb8f-amazon-product-search.jpg","imgix_url":"https://imgix.cosmicjs.com/26b41d70-5f9a-11e7-b120-9f6bc26aeb8f-amazon-product-search.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-07-03T01:37:34.041Z","created_by":"5357ef811693be2118000001","created":"2017-07-03T01:37:34.041Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"590b73ff200ca2723f002d01","slug":"freddie-ridell","title":"Freddie Ridell","content":"","metafields":[{"value":"2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg","imgix_url":"https://imgix.cosmicjs.com/2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-04T18:33:35.138Z","created_by":"5357ef811693be2118000001","created":"2017-05-04T18:33:35.138Z","status":"published","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg","imgix_url":"https://imgix.cosmicjs.com/2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg"}}},"teaser":"<p>Cosmic just released their new extension functionally, which enables anyone to embed their own custom app inside the Cosmic CMS!</p><p>In this tutorial we&#39;ll be going through some of the steps required to make our Amazon Product Search extension.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/26b41d70-5f9a-11e7-b120-9f6bc26aeb8f-amazon-product-search.jpg","imgix_url":"https://imgix.cosmicjs.com/26b41d70-5f9a-11e7-b120-9f6bc26aeb8f-amazon-product-search.jpg"}}},{"_id":"5959076c4db72e53120009f8","order":120,"slug":"developer-spotlight-abe-hendricks","title":"Developer Spotlight: Abe Hendricks","content":"<p><img src=\"https://www.cosmicjs.com/uploads/4a99de00-5f36-11e7-944c-c77fe6f4c1e0-1499025228_Web_Development.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>Another Developer Hero joins us in our new installment of the <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> Developer Spotlight Series. We sat down with Abe Hendricks, a hybrid Developer / Interactive Manager / Content-Editor leading a government agency in California. &nbsp;Check him out on <a href=\"https://github.com/pcwa-ahendricks\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, and enjoy the Q/A.<br><br><strong>How long have you been building software?</strong><br>I&rsquo;ve been building websites and single page applications for a little over a year now. &nbsp;Prior to that, most development was in the form of database development, business intelligence, and some basic server side scripting for task automation.<br><br><strong>What is your preferred development stack?</strong><br>Currently I&rsquo;m working for a mid size Local/Regional Government Agency. &nbsp;A long term goal is to keep any custom development in a tight stack. &nbsp;We are trying not pick up a myriad of different technologies and tools with differing life cycles\r\nand diverging paths. I currently try to do as much development as I can in the front-end using Angular. &nbsp;For servers we fill in the gaps using JavaScript / Typescript as well, with the aide of frameworks like Express. (If I were a freelance developer\r\nI&rsquo;m certain my approach would be different). When I need to reach for something like a database I gravitate towards Firebase which fits in nicely with Angular.<br><br><strong>What past projects are you most proud of and why?</strong><br>It&rsquo;s difficult for me to gloat about any projects in particular. I&rsquo;m satisfied at the speed of which I&rsquo;ve picked up new frameworks, tools, etc. and have been able to develop and deploy using these new tools. &nbsp;Effectively I&rsquo;m\r\na bit more impressed from the quantity and speed of which I&rsquo;ve developed applications, more so than the quality of them (smiling emoji). But ironically, now that I write that, I&rsquo;m not really proud of that at all (sad emoji).<br><br><strong>Talk a little bit more about your process for building apps in your world and vertical. How has Cosmic sped up your time to market for project delivery deadlines?</strong><br>Cosmic fits in perfectly with our organization and needs. Before <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> we were using a popular Blogging / CMS platform for managing content, in the most headless way it could be implemented and used. &nbsp;However, the end result always felt awkward, I&rsquo;d say &quot;pear-shaped&quot; on a good day. &nbsp;Trying to explain to non-technical people that they need to add content to WordPress, while at the same time you are telling them that we are not really using WordPress, never really even made sense to me, let alone them. When <a href=\"https://www.cosmicjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> came along it really rocked off some socks that we didn&rsquo;t want to wear to begin with. &nbsp;Cosmic&rsquo;s API-first CMS was really what we needed all along. &nbsp;Moving forward, Cosmic will allow and enable many individuals in our organization to build out our applications.<br><br><strong>What are some technologies you are excited about that you are using today, or want to learn more about?</strong><br>I feel like I&rsquo;m always learning so it&rsquo;s starting to not feel very exciting at all. &nbsp;(Thank you JavaScript community). But do to the nature of my current role at my organization I&rsquo;m expected to put on a few different hats on a day\r\nto day basis. &nbsp;I&rsquo;m not just the developer, but I&rsquo;m also a content editor and designer. &nbsp;I&rsquo;ve been wearing the developer hat for quite some time over the course of the last year. In the near future, I&rsquo;m hoping to spend\r\nmore time using Cosmic to add content to our existing applications, and spend more time in Sketch working creatively on design. I mean, what&rsquo;s the point of all this JavaScript if it doesn&rsquo;t have any HTML or CSS buddies right?&nbsp;</p><p>Somewhat related: I&rsquo;m eager to see how certain projects such as Material2 for Angular develop and mature over the course of the next year. &nbsp;Additionally I&rsquo;m hoping to put together a native app or two using the Ionic Framework.<br><br><strong>Cosmic Developer Spotlight Series</strong><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-brian-mullis\" rel=\"noopener noreferrer\" target=\"_blank\"></a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-brian-mullis\" rel=\"noopener noreferrer\" target=\"_blank\">Developer Spotlight: Brian Mullis</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-micah-walter\" rel=\"noopener noreferrer\" target=\"_blank\">Developer Spotlight: Micah Walter</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-joe-tuson\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Developer Spotlight: Joe Tuson</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-coding-dojo\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Developer Spotlight: Coding Dojo</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-simple-media\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Developer Spotlight: Simple Media</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-jon-kalfayan\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Developer Spotlight: Jon Kalfayan</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-jon-bloomer\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Developer Spotlight: Jon Bloomer</a></p><p style=\" color: rgb(0, 0, 0); font-family: 'Open Sans', sans-serif; font-size: 14px; text-align: start;\"><a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Cosmic</a> is an API-first cloud-based content management platform that makes it easy to manage applications and content. If you have questions about the <a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Cosmic API</a>, please reach out to us on <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Twitter</a> or join the community on <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>We sat down with Abe Hendricks for our latest installment of the Cosmic Developer Spotlight Series.&nbsp;</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"5069e780-5f36-11e7-944c-c77fe6f4c1e0-1499025228_Web_Development.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/5069e780-5f36-11e7-944c-c77fe6f4c1e0-1499025228_Web_Development.png","imgix_url":"https://imgix.cosmicjs.com/5069e780-5f36-11e7-944c-c77fe6f4c1e0-1499025228_Web_Development.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-07-02T14:47:08.640Z","created_by":"5716b504e9c686d006000073","created":"2017-07-02T14:47:08.640Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>We sat down with Abe Hendricks for our latest installment of the Cosmic Developer Spotlight Series.&nbsp;</p>","featured_image":{"url":"https://cdn.cosmicjs.com/5069e780-5f36-11e7-944c-c77fe6f4c1e0-1499025228_Web_Development.png","imgix_url":"https://imgix.cosmicjs.com/5069e780-5f36-11e7-944c-c77fe6f4c1e0-1499025228_Web_Development.png"}}},{"_id":"59528e63833ff0503d000e9b","order":121,"slug":"how-to-build-a-real-estate-website-using-emberjs","title":"How to Build a Real Estate Website Using Ember.js","content":"<p><img src=\"https://cosmicjs.imgix.net/e6efc660-5b59-11e7-b717-653f819d86b5-ember-real-estate-website.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>Today&#39;s internet is complicated. Wars are started over React state management, new languages are written just to make Angular work agreeably, and don&#39;t get started over all the hate for Node.</p><p>In the frenzy surrounding new tech, simplicity gets forgotten. Services like Cosmic challenge this. So in the spirit of doing the opposite, we&#39;re going to build a sleek real estate listing app (with a social flavor) that&#39;s easy to use.</p><h2>TL;DR</h2><p><a href=\"https://www.cosmicjs.com/apps/real-estate-website\" rel=\"noopener noreferrer\" target=\"_blank\">View the demo</a><br><a href=\"https://github.com/cosmicjs/ember-real-estate-website\" rel=\"noopener noreferrer\" target=\"_blank\">View the full codebase on GitHub</a></p><h2>Getting Started</h2><p>We&#39;ll be using Cosmic to manage all of our content and to deploy the site. We&#39;ll be building out the front end in Ember.js.</p><p>We&#39;re using Ember because it&#39;s opinionated. Our app won&#39;t be sensitive to performance issues on any modern device, so we can take advantage of a high level of abstraction that fits our design philosophy.</p><h2>Setting Up the App</h2><p>Assuming you have Node installed, open a terminal and run the commands in each step.</p><p>0. Set Up a Quick Server</p><ul><li>Make a new directory, CosmicRealEstate to be used as the project&#39;s root.</li><li>Within CosmicRealEstate, make the directories app (to store the router) and public (which will store the <a href=\"Ember.js\">Ember.js</a> build).</li><li>Under CosmicRealEstate create the file <a href=\"server.js\">server.js</a> with the following contents:</li></ul><pre class=\"prism\">var express = require(&#39;express&#39;);\r\nvar app = express();\r\nvar port = process.env.PORT || 3000;\r\n\r\napp.use(express.static(__dirname + &#39;/public&#39;));\r\n\r\nrequire(&#39;./app/routes&#39;)(app);\r\n\r\napp.listen(port);\r\n\r\nexports = module.exports = app;</pre><ul><li>In the app directory create <a href=\"routes.js\">routes.js</a> and add the following code:</li></ul><pre class=\"prism\">module.exports = function(app) {\r\n&nbsp; &nbsp; &nbsp; &nbsp;app.get(&#39;*&#39;, function(req, res) {\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;res.sendfile(&#39;./public/index.html&#39;); // load our public/index.html file\r\n&nbsp; &nbsp; &nbsp; &nbsp;});\r\n};</pre><ul><li>In a terminal, within CosmicRealEstate, run:</li></ul><pre class=\"prism\">npm init\r\nnpm install express --save</pre><p>You know have a simple Express application set up that will let us deploy the app on Cosmic. Later, we&#39;ll build our Ember app into the public directory. Run the following commands within CosmicRealEstate:</p><p>1. Install Ember&#39;s CLI</p><pre class=\"prism\">npm install -g ember-cli\r\nnpm install -g phantomjs</pre><p>(Ember uses Phantonjs for running tests)</p><p>2. Generate the Ember Project Structure</p><pre class=\"prism\">ember new cosmic-real-estate &amp;&amp; cd cosmic-real-estate</pre><p>4. Install Bootstrap</p><p>From within the comsic-real-estate directory, install the Ember Bootstrap addon to automatically include Bootstrap in your build path</p><pre class=\"prism\">ember install ember-bootstrap</pre><p>5. Fire Up Your Development Server</p><pre class=\"prism\">ember serve</pre><p>Open your browser and you&#39;ll see the Ember welcome page at localhost:4200.</p><h2>Building Your Listings Route</h2><p>Now that you have your app&#39;s boilerplate code in place, let&#39;s start by building out a page to show all the listings in our Cosmic bucket.</p><p>0. Get Rid of the Welcome Code</p><p>We appreciate Ember&#39;s warm welcome, but we need to get to work. Go ahead and delete the following code from your app&#39;s main Handlebars template.</p><pre class=\"prism\">{{!-- app/templates/application.hbs --}}\r\n\r\n{{!-- The following component displays Ember&#39;s default welcome message. --}}\r\n{{welcome-page}}\r\n{{!-- Feel free to remove this! --}}</pre><p>Now, add a container around the remaining {{outlet}} (this is where your routes will render). Your application template will now look like this:</p><pre class=\"prism\">{{!-- app/templates/application.hbs --}}\r\n\r\n&lt;div class=&quot;container&quot; style=&quot;margin-top:20px&quot;&gt;\r\n&nbsp; &nbsp; {{outlet}}\r\n&lt;/div&gt;</pre><p>1. Generate the Listings Route and Give your Template a Welcome Mat</p><p>Inside the cosmic-real-estate directory, run:</p><pre class=\"prism\">ember g route listings</pre><p>Then, in your newly created Listings template, add the following HTML:</p><pre class=\"prism\">&lt;div class=&quot;jumbotron&quot; style=&quot;margin-top: 20px&quot;&gt;\r\n&nbsp; &lt;h1&gt;Welcome to Cosmic Real Estate!&lt;/h1&gt;\r\n&nbsp; &lt;p&gt;\r\n&nbsp; &nbsp; Check out our awesome real estate listings -\r\n&nbsp; &nbsp; stored and managed with Cosmic and\r\n&nbsp; &nbsp; rendered right in your browser.\r\n&nbsp; &lt;/p&gt;\r\n&lt;/div&gt;</pre><p>If you go to localhost:4200/listings you&#39;ll see beginnings of our listings page.</p><p>2. Generate an Index Route to Make Your Listings Show on the Root URL</p><p>We want to forward the root domain to our listings page, so first run:</p><pre class=\"prism\">ember g route index</pre><p>Then, open the route handler for Index and add the following code to the route&#39;s export:</p><pre class=\"prism\">// app/routes/index.js\r\n\r\nexport default Ember.Route.extend({\r\n&nbsp; beforeModel() {\r\n&nbsp; &nbsp; this.replaceWith(&#39;listings&#39;);\r\n&nbsp; }\r\n});</pre><p>Ember uses a series of lifecycle hooks for validation when rendering a route. Calling beforeModel() utilizes the first of these hooks to tell the route handler to immediately take us to the listings route. Visiting localhost:4200 will now take us to localhost:4200/listings.</p><h2>Retrieving Data From Cosmic</h2><p>We&#39;ll want to show our users listings that we&#39;ve stored in Cosmic. To do so, we&#39;ll use Ember&#39;s built in data store, Ember Data, to retrieve listings from Cosmic to store in corresponding models.</p><p>0. Set Up Your Bucket From this point on, we&#39;ll assume you already have a Cosmic bucket created. (This guide&#39;s bucket slug will be cosmic-real-estate.) You&#39;ll set your&#39;s in your ENV variables later. In the cosmic-real-estate bucket\r\nare objects of type &quot;Listing&quot; with the following structure:</p><h4>Listing:</h4><table class=\"tabe table-bordered table-striped w-100p\"><thead><tr><th>Cosmic Metafield<br></th><th>Type<br></th></tr></thead><tbody><tr><td>Price<br></td><td>Text Input<br></td></tr><tr><td>Address<br></td><td>Text Input<br></td></tr><tr><td>Profile Image<br></td><td>Image<br></td></tr><tr><td>Style<br></td><td>Radio Select<br></td></tr><tr><td>Neighborhood<br></td><td>Text Input<br></td></tr><tr><td>Beds<br></td><td>Text Input<br></td></tr><tr><td>Baths<br></td><td>Text Input<br></td></tr><tr><td>Square Feet<br></td><td>Text Input<br></td></tr><tr><td>Zipcode<br></td><td>Text Input<br></td></tr></tbody></table><p>As emphasized at the beginning of this guide, Ember is convention over configuration. Ember Data handles all of the nasty AJAX and caching work that you don&#39;t want to do. All we have to do is tell Ember where to look for our data, how to interpret\r\nit, and how it fits in our models.</p><p>1. Create a Listing Model</p><p>As with any other web app framework, models in Ember simply act as a container for your backend data. We&#39;ll use a Listing model to match our Listing object in our Cosmic bucket. Run:</p><pre class=\"prism\">ember g model Listing</pre><p>In the newly created listing file, add the following code:</p><pre class=\"prism\">// app/models/listing.js\r\n\r\nexport default DS.Model.extend({\r\n&nbsp; title: DS.attr(),\r\n&nbsp; price: DS.attr(),\r\n&nbsp; address: DS.attr(),\r\n&nbsp; profileImage: DS.attr(),\r\n&nbsp; style: DS.attr(),\r\n&nbsp; neighborhood: DS.attr(),\r\n&nbsp; beds: DS.attr(),\r\n&nbsp; baths: DS.attr(),\r\n&nbsp; squareFeet: DS.attr(),\r\n&nbsp; zipCode: DS.attr()\r\n});</pre><p>We&#39;ve now specified what properties a Listing will have, i.e. which properties to look for when grabbing data from our bucket.</p><p>2. Create a Listing Adapter and Serializer</p><p>Cosmic operates on an intuitive REST API, so we&#39;ll take advantage of Ember Data&#39;s built in REST Adapter and JSON Serializer. We&#39;ll just have to make a few slight tweaks to fit them to the Cosmic API spec. To generate the listing adapter,\r\nrun:</p><pre class=\"prism\">ember g adapter listing</pre><p>To generate the serializer:</p><pre class=\"prism\">ember g serializer listing</pre><p>Ember will now automatically use the Listing serializer and adaptaer for anything dealing with the Listing model.</p><p>3. Tweak the Listing Adapter</p><p>By default, Ember&#39;s REST Adapter points to sligtly different endpoints than we need to fetch data from our bucket. So, add the following code to the Listing adapter, making sure you swap out DS.JSONAPIAdapter for DS.RESTAdapter:</p><pre class=\"prism\">// app/adapters/listing.js\r\n\r\nexport default DS.RESTAdapter.extend({\r\n&nbsp; host: &#39;https://api.cosmicjs.com/v1/cosmic-real-estate&#39;,\r\n&nbsp; urlForFindAll(modelName, snapshot) {\r\n&nbsp; &nbsp; let path = this.pathForType(modelName);\r\n&nbsp; &nbsp; return this.buildURL() + &#39;/object-type/&#39; + path;\r\n&nbsp; },\r\n&nbsp; urlForQueryRecord(slug) {\r\n&nbsp; &nbsp; return this.buildURL() + &#39;/object/&#39; + slug;\r\n&nbsp; }\r\n});</pre><p>The effect is that every time we query the Data Store for Listings, we tell Ember to fetch them from the response at <a href=\"https://api.cosmicjs.com/v1/cosmic-real-esate/object-type/listing\">https://api.cosmicjs.com/v1/cosmic-real-esate/object-type/listing</a>or <a href=\"https://api.cosmicjs.com/v1/cosmic-real-esate\\object\\listing-slug,\">https://api.cosmicjs.com/v1/cosmic-real-esate\\object\\listing-slug,</a> depending on whether we&#39;re retrieving a single listing or multiple.</p><p>4. Tweak the Listing Serializer</p><p>Cosmic gives us our data in a format slightly different from what Ember&#39;s REST Serializer expects. For example, Cosmic returns this</p><pre class=\"prism\">{\r\n&nbsp; &quot;objects&quot;: [\r\n&nbsp; &nbsp; {\r\n&nbsp; &nbsp; &nbsp; &quot;_id&quot;: &quot;59403aefacfbc8d252000563&quot;,\r\n&nbsp; &nbsp; &nbsp; &quot;slug&quot;: &quot;example-condo&quot;,\r\n&nbsp; &nbsp; &nbsp; &quot;title&quot;: &quot;Example Condo&quot;,\r\n&nbsp; &nbsp; &nbsp; &quot;content&quot;: &quot;&quot;,\r\n&nbsp; &nbsp; &nbsp; &quot;bucket&quot;: &quot;593f696bacfbc8d2520000df&quot;,\r\n&nbsp; &nbsp; &nbsp; &quot;type_slug&quot;: &quot;listings&quot;,\r\n&nbsp; &nbsp; &nbsp; &quot;created_at&quot;: &quot;2017-06-13T19:20:15.485Z&quot;,\r\n&nbsp; &nbsp; &nbsp; &quot;created_by&quot;: &quot;593f691ea768e28650000334&quot;,\r\n&nbsp; &nbsp; &nbsp; &quot;created&quot;: &quot;2017-06-13T19:20:15.485Z&quot;,\r\n&nbsp; &nbsp; &nbsp; &quot;status&quot;: &quot;published&quot;,\r\n&nbsp; &nbsp; &nbsp; &quot;metadata&quot;: {\r\n&nbsp; &nbsp; &nbsp; &nbsp; &quot;price&quot;: 545000,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &quot;address&quot;: &quot;2100 High Avenue&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &quot;profile&quot;: {\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;url&quot;: &quot;https://www.cosmicjs.com/uploads/4ff36ce0-506d-11e7-9f7d-dbfbf1c66da0-ex-condo.jpeg&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;imgix_url&quot;: &quot;https://cosmicjs.imgix.net/4ff36ce0-506d-11e7-9f7d-dbfbf1c66da0-ex-condo.jpeg&quot;\r\n&nbsp; &nbsp; &nbsp; &nbsp; },\r\n&nbsp; &nbsp; &nbsp; &nbsp; &quot;style&quot;: &quot;Condo&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &quot;location&quot;: &quot;Uptown&quot;\r\n&nbsp; &nbsp; &nbsp; }, \r\n&nbsp; &nbsp; &nbsp; // etc...</pre><p>where Ember expects:</p><pre class=\"prism\">{\r\n&nbsp; &nbsp; &quot;listings&quot;: [\r\n&nbsp; &nbsp; &nbsp; &nbsp; {\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;id&quot;: 1,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;title&quot;: &quot;example-condo&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;price&quot;: 54000,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // etc...</pre><p>The two main discrepancies here are that objects doesn&#39;t match our model name and that most of the primary properties we need are stored in metadata. To fix this, add the following code to the listing serializer, making sure to swap DS.JSONAPISerializer\r\nfor DS.RESTSerializer.</p><pre class=\"prism\">// app/serializers/listing.js\r\n\r\nimport DS from &#39;ember-data&#39;;\r\n\r\nfunction buildNormalizeListing(source) {\r\n&nbsp; return {\r\n&nbsp; &nbsp; id: source._id,\r\n&nbsp; &nbsp; slug: source.slug,\r\n&nbsp; &nbsp; content: source.content,\r\n&nbsp; &nbsp; title: source.title,\r\n&nbsp; &nbsp; price: source.metadata.price,\r\n&nbsp; &nbsp; address: source.metadata.address,\r\n&nbsp; &nbsp; profileImage: source.metadata.profile.url,\r\n&nbsp; &nbsp; style: source.metadata.style,\r\n&nbsp; &nbsp; neighborhood: source.metadata.neighborhood,\r\n&nbsp; &nbsp; beds: source.metadata.beds,\r\n&nbsp; &nbsp; baths: source.metadata.baths,\r\n&nbsp; &nbsp; squareFeet: source.metadata.square_feet,\r\n&nbsp; &nbsp; zipCode: source.metadata.zip_code\r\n\r\n&nbsp; }\r\n}\r\n\r\nexport default DS.RESTSerializer.extend({\r\n&nbsp; normalizeResponse(store, primaryModelClass, payload, id, requestType) {\r\n&nbsp; &nbsp; if (payload.objects) {\r\n&nbsp; &nbsp; &nbsp; let normalizedListings = payload.objects.map(function(listing) {\r\n&nbsp; &nbsp; &nbsp; &nbsp; return buildNormalizeListing(listing)\r\n&nbsp; &nbsp; &nbsp; });\r\n&nbsp; &nbsp; &nbsp; payload = {\r\n&nbsp; &nbsp; &nbsp; &nbsp; listings: normalizedListings\r\n&nbsp; &nbsp; &nbsp; };\r\n&nbsp; &nbsp; } else {\r\n&nbsp; &nbsp; &nbsp; let normalizedListing = buildNormalizeListing(payload.object);\r\n&nbsp; &nbsp; &nbsp; payload = {\r\n&nbsp; &nbsp; &nbsp; &nbsp; listing: normalizedListing\r\n&nbsp; &nbsp; &nbsp; }\r\n&nbsp; &nbsp; }\r\n&nbsp; &nbsp; return this._super(store, primaryModelClass, payload, id, requestType);\r\n\r\n&nbsp; }\r\n});</pre><p>For each of the Listings in the objects array returned by Cosmic, we create a new object with only the properties we want and map those to a new array. We then create a new hash to point our payload reference to with the listings key Ember is looking\r\nfor. Pack it all together by calling _super, and our app is ready to do business with Cosmic. (The process is similar for retrieving a single listing, so we abstract that into buildNormalizedListing())</p><h2>Displaying the Listings</h2><p>We want our users to be able to view individual listings to get more detailed information about them. To do that we need to take advantage of Ember&#39;s nested routes.</p><p>1. Generate an Index Route Under Listings</p><p>The listings/index route will take the place of our original listings route. Run:</p><pre class=\"prism\">ember g route listings/index</pre><p>2. Move the Listings Template Code and Route Code</p><p>Move the following snippet of code from app/templates/listings.hbs to app/templates/listings/index.hbs</p><pre class=\"prism\">{{!-- app/templates/listings.hbs --}}\r\n\r\n&lt;div class=&quot;row&quot;&gt;\r\n&nbsp; {{#each model as |currentListing|}}\r\n&nbsp; &nbsp; &lt;div class=&quot;col-sm-4&quot; &gt;\r\n&nbsp; &nbsp; &nbsp; &nbsp;{{real-estate-listing listing=currentListing}}\r\n&nbsp; &nbsp; &lt;/div&gt;\r\n&nbsp; {{/each}}\r\n&lt;/div&gt;</pre><p>Where you removed that last bit from the Listings template, add {{outlet}}. That is, <a href=\"listings.hbs\">listings.hbs</a> now looks like this:</p><pre class=\"prism\">{{!-- app/templates/listings.hbs --}}\r\n\r\n&lt;div class=&quot;container&quot;&gt;\r\n&nbsp; &lt;div class=&quot;row&quot;&gt;\r\n&nbsp; &nbsp; &lt;div class=&quot;col-md-12&quot;&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;div class=&quot;jumbotron&quot; style=&quot;margin-top: 20px&quot;&gt;\r\n&nbsp; &nbsp; &nbsp; &nbsp; &lt;h1&gt;Welcome to Cosmic Real Estate!&lt;/h1&gt;\r\n&nbsp; &nbsp; &nbsp; &nbsp; &lt;p&gt;\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Check out our awesome real estate listings -\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stored and managed with Cosmic and\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rendered right in your browser.\r\n&nbsp; &nbsp; &nbsp; &nbsp; &lt;/p&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;/div&gt;\r\n&nbsp; &nbsp; &lt;/div&gt;\r\n&nbsp; &lt;/div&gt;\r\n&lt;/div&gt;\r\n\r\n&lt;div class=&quot;container&quot;&gt;\r\n&nbsp; {{outlet}}\r\n&lt;/div&gt;</pre><p>The {{outlet}} helper simply specifies where child routes will render in a template.</p><p>Finally, make rendering all of the listings a behavior specific to the index route by moving the following snippet from app/routes/listings.js to app/routes/listings/index.js.</p><pre class=\"prism\">&nbsp; model() {\r\n&nbsp; &nbsp; return this.get(&#39;store&#39;).findAll(&#39;listing&#39;);\r\n&nbsp; }</pre><p>3. Create a Listing Route for Individual Listings</p><p>First, run:</p><pre class=\"prism\">ember g route listings/listing</pre><p>When we open an individual listing, we want that to be reflected in the URL, so add the following code to the router to show the listing id at the end of the url.</p><pre class=\"prism\">// app/router.js\r\n\r\nRouter.map(function() {\r\n&nbsp; this.route(&#39;listings&#39;, function() {\r\n&nbsp; &nbsp; this.route(&#39;listing&#39;, { path: &#39;/:listing_id&#39;});\r\n&nbsp; });\r\n});</pre><p>4. Prepare the Listing Template to Show Data</p><p>Before we can let users check out a listing, we need to give them something to look at. Add the following HTML to the Listing child route:</p><pre class=\"prism\">&lt;div class=&quot;row&quot;&gt;\r\n&nbsp; &lt;div class=&quot;col-sm-12&quot;&gt;\r\n&nbsp; &nbsp; &lt;ul class=&quot;nav nav-pills&quot;&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;li role=&quot;presentation&quot;&gt;&lt;a href=&quot;#description&quot;&gt;Description&lt;/a&gt;&lt;/li&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;li role=&quot;presentation&quot;&gt;&lt;a href=&quot;#stats&quot;&gt;Stats&lt;/a&gt;&lt;/li&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;li role=&quot;presentation&quot;&gt;{{#link-to &#39;listings&#39;}}Return to Listings{{/link-to}}&lt;/li&gt;\r\n&nbsp; &nbsp; &lt;/ul&gt;\r\n&nbsp; &lt;/div&gt;\r\n&nbsp; &lt;div class=&quot;col-sm-9&quot;&gt;\r\n&nbsp; &nbsp; &lt;div class=&quot;page-header&quot;&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;h1&gt;\r\n&nbsp; &nbsp; &nbsp; &nbsp; {{model.title}}\r\n&nbsp; &nbsp; &nbsp; &lt;/h1&gt;\r\n&nbsp; &nbsp; &lt;/div&gt;\r\n&nbsp; &lt;/div&gt;\r\n&nbsp; &lt;div class=&quot;col-sm-3&quot;&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;h1&gt;\r\n&nbsp; &nbsp; &nbsp; &nbsp; &lt;span class=&quot;text-success&quot;&gt;{{format-price model.price}}&lt;/span&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;/h1&gt;\r\n\r\n&nbsp; &lt;/div&gt;\r\n&lt;/div&gt;\r\n&lt;div class=&quot;row&quot;&gt;\r\n&nbsp; &lt;div class=&quot;col-md-6&quot;&gt;\r\n&nbsp; &nbsp; &lt;img src={{model.profileImage}} class=&quot;img-responsive&quot; /&gt;\r\n&nbsp; &lt;/div&gt;\r\n&nbsp; &lt;div class=&quot;col-md-6&quot;&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;ul class=&quot;list-group&quot;&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;li class=&quot;list-group-item&quot;&gt;&lt;strong&gt;Address:&lt;/strong&gt;&lt;span class=&quot;pull-right&quot;&gt;{{model.address}}&lt;/span&gt;&lt;/li&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;li class=&quot;list-group-item&quot;&gt;&lt;strong&gt;Style:&lt;/strong&gt;&lt;span class=&quot;pull-right&quot;&gt;{{model.style}}&lt;/span&gt;&lt;/li&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;li class=&quot;list-group-item&quot;&gt;&lt;strong&gt;Neighborhood:&lt;/strong&gt;&lt;span class=&quot;pull-right&quot;&gt;{{model.neighborhood}}&lt;/span&gt;&lt;/li&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;li class=&quot;list-group-item&quot;&gt;&lt;strong&gt;Beds:&lt;/strong&gt;&lt;span class=&quot;pull-right&quot;&gt;{{model.beds}}&lt;/span&gt;&lt;/li&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;li class=&quot;list-group-item&quot;&gt;&lt;strong&gt;Baths:&lt;/strong&gt;&lt;span class=&quot;pull-right&quot;&gt;{{model.baths}}&lt;/span&gt;&lt;/li&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;li class=&quot;list-group-item&quot;&gt;&lt;strong&gt;Square Feet:&lt;/strong&gt;&lt;span class=&quot;pull-right&quot;&gt;{{model.squareFeet}}&lt;/span&gt;&lt;/li&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;/ul&gt;\r\n&nbsp; &lt;/div&gt;\r\n\r\n\r\n&nbsp; &lt;div class=&quot;col-sm-6&quot;&gt;\r\n&nbsp; &nbsp; &lt;h3 id=&quot;description&quot;&gt;Description&lt;/h3&gt;\r\n&nbsp; &nbsp; &lt;span class=&quot;text-muted&quot;&gt;{{{model.content}}}&lt;/span&gt;\r\n&nbsp; &lt;/div&gt;\r\n&lt;/div&gt;</pre><p>Notice three new Handlebars features we&#39;re using: Using triple braces with {{{model.content}}} forces Handlebars to not escape the HTML in the content field.&nbsp;The {{#link-to}}helper in the menu automatically generates a proper link for us to whichver\r\nroute we specify. We&#39;ll use this in the next step to actually dynamically link to listings. * The {{format-price}} helper, which we&#39;ll be making ourselves next.</p><p>5. Generate a Helper to Format the Price</p><p>In Ember we have the option to generate custom helpers. We&#39;ll do this to display the listing&#39;s price as a currency. Run:</p><pre class=\"prism\">ember g helper filter-price</pre><p>Then, in the new Format Price helper, add the following code:</p><pre class=\"prism\">// app/helpers/format-price.js\r\n\r\nexport function formatPrice(value) {\r\n&nbsp; return &#39;$&#39; + value.toLocaleString();\r\n}</pre><p>6. Link to the Listings</p><p>We&#39;ll need to dynamically generate a link to a listing&#39;s particular page from it&#39;s slug. We can do this painlessly using the {{#link-to}}} helper we just used in the previous step.</p><p>In the Real Estate Listing component, wrap {{listing.title}} in a {{#link-to}} like this:</p><pre class=\"prism\">{{!-- app/templates/components/real-estate-listing.hbs --}\r\n\r\n{{#link-to &#39;listings.listing&#39; listing}}{{listing.title}}{{/link-to}}</pre><p>We pass the model as the second parameter, and Ember automatically takes care of matching the routes. However, you might notice that our links now point to meaningless strings that Ember is using as unique ID&#39;s for the listings. As a simple fix, go\r\ninto your Listing serializer and add this line to tell Ember to use the Listing slug as it&#39;s primary key:</p><pre class=\"prism\">// app/serializers/listing.js\r\n\r\nexport default DS.RESTSerializer.extend({\r\n&nbsp; primaryKey: &#39;slug&#39;,\r\n&nbsp; normalizeResponse(store, primaryModelClass,\r\n&nbsp; // etc...</pre><p>We now have individual Listing routes and links to them that work just as we&#39;d expect them to.</p><h2>Make it Social</h2><p>At this point we have ourselves a functioning real estate listing app. But, rather than end with something boring, we&#39;ll add a little flair. We want our users to be able to (in this case anonymously) vote on our listings. Cosmic will help us manage\r\nthis.</p><p>1. Update the Listing object, model, and serializer In your Cosmic bucket, add the metafield upvotes with a default value of 0 to your Listing Object.&nbsp;Update the Listing model accordingly:</p><pre class=\"prism\">// app/models/listing.js\r\n\r\n//etc...\r\n&nbsp; zipCode: DS.attr(),\r\n&nbsp; content: DS.attr(),\r\n&nbsp; upvotes: DS.attr()\r\n});</pre><ul><li>Update buildNormalizedListing() in the Listing serializer</li></ul><pre class=\"prism\">// app/serializers/listing.js\r\n\r\nfunction buildNormalizeListing(source) {\r\n&nbsp; return {\r\n&nbsp; &nbsp; //etc...\r\n&nbsp; &nbsp; zipCode: source.metadata.zip_code,\r\n&nbsp; &nbsp; upvotes: source.metadata.upvotes\r\n&nbsp; }\r\n}</pre><p>2. Update the Real Estate Listing Component</p><p>After adding an upvote button, a downvote button, and a vote counter, your Real Estate Listing template will look like this:</p><pre class=\"prism\">{{!-- app/templates/components/real-estate-listing.hbs --}}\r\n\r\n&lt;div class=&quot;panel panel-default&quot;&gt;\r\n&nbsp; &lt;div class=&quot;panel-heading&quot;&gt;\r\n&nbsp; &nbsp; &lt;h4&gt;\r\n&nbsp; &nbsp; &nbsp; {{#link-to &#39;listings.listing&#39; listing}}{{listing.title}}{{/link-to}}\r\n&nbsp; &nbsp; &nbsp; &lt;span class=&quot;pull-right&quot;&gt;\r\n&nbsp; &nbsp; &nbsp; &nbsp; {{upvotes}}\r\n&nbsp; &nbsp; &nbsp; &lt;/span&gt;\r\n&nbsp; &nbsp; &lt;/h4&gt;\r\n&nbsp; &lt;/div&gt;\r\n&nbsp; &lt;div class=&quot;panel-body&quot;&gt;\r\n&nbsp; &nbsp; &lt;p&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;img src=&quot;{{listing.profileImage}}&quot; class=&quot;img-thumbnail&quot; style=&quot;background-color: #fff;height:auto&quot;/&gt;\r\n\r\n&nbsp; &nbsp; &lt;/p&gt;\r\n&nbsp; &nbsp; &lt;p&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;strong&gt;Address:&lt;/strong&gt; {{listing.address}}\r\n&nbsp; &nbsp; &lt;/p&gt;\r\n&nbsp; &nbsp; &lt;p&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;strong&gt;Style:&lt;/strong&gt; {{listing.style}}\r\n&nbsp; &nbsp; &lt;/p&gt;\r\n&nbsp; &nbsp; &lt;p&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;strong&gt;Neighborhood:&lt;/strong&gt; {{listing.neighborhood}}\r\n&nbsp; &nbsp; &lt;/p&gt;\r\n&nbsp; &lt;/div&gt;\r\n&nbsp; &lt;div class=&quot;panel-footer&quot;&gt;\r\n&nbsp; &nbsp; &lt;p class=&quot;pull-left&quot;&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;button {{action &quot;vote&quot; &quot;down&quot;}} class=&quot;btn btn-default&quot;&gt;&lt;span class=&quot;glyphicon glyphicon-thumbs-down&quot;&gt;&lt;/span&gt;&lt;/button&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;button {{action &quot;vote&quot; &quot;up&quot;}} class=&quot;btn btn-default&quot;&gt;&lt;span class=&quot;glyphicon glyphicon-thumbs-up&quot;&gt;&lt;/span&gt;&lt;/button&gt;\r\n&nbsp; &nbsp; &lt;/p&gt;\r\n&nbsp; &nbsp; &lt;p class=&quot;text-right&quot;&gt;\r\n&nbsp; &nbsp; &nbsp; &nbsp;&lt;h4&gt;{{format-price listing.price}}&lt;/h4&gt;\r\n&nbsp; &nbsp; &lt;/p&gt;\r\n&nbsp; &lt;/div&gt;\r\n&lt;/div&gt;</pre><p>Notably, we&#39;ve added a thumbs-up and a thumbs-down button that take advantage of Ember&#39;s action helper to handle the click. We pass &quot;vote&quot; to specify the action to be called and &quot;up&quot; or &quot;down&quot; to indicate the direction\r\nof the vote. To get the buttons working, we need to implement the vote() action in the Real Estate Listing controller.</p><p>3. Implement the Vote Action</p><p>To handle the voting action, we&#39;ll take our first look at the Real Estate Listing component&#39;s controller.</p><p>Our first step in this process is to give the controller access to the listing&#39;s slug and upvotes. We do this through computed properties, which look like this:</p><pre class=\"prism\">// app/components/real-estate-listing.js\r\n\r\nexport default Ember.Component.extend({\r\n&nbsp; slug: Ember.computed(&#39;slug&#39;, function() {\r\n&nbsp; &nbsp; return this.get(&#39;listing.id&#39;);\r\n&nbsp; }), //etc...</pre><p>Note that we use <a href=\"listing.id\">listing.id</a> to retrive the slug since we&#39;ve defined the slug as the model&#39;s primary key.</p><p>Second, we add the property store: Ember.inject.service() to give ourselves access to the Data Store within the component.</p><p>Finally, we define the vote() action in the action hash:</p><pre class=\"prism\">// app/componenets/real-estate-listing.js\r\n\r\nactions: {\r\n&nbsp; &nbsp; vote(direction) {\r\n&nbsp; &nbsp; &nbsp; let upvotes = this.get(&#39;upvotes&#39;);\r\n&nbsp; &nbsp; &nbsp; direction === &#39;up&#39; ?\r\n&nbsp; &nbsp; &nbsp; &nbsp; upvotes++ :\r\n&nbsp; &nbsp; &nbsp; &nbsp; upvotes--;\r\n&nbsp; &nbsp; &nbsp; this.set(&#39;upvotes&#39;, upvotes);\r\n&nbsp; &nbsp; &nbsp; let slug = this.get(&#39;slug&#39;);\r\n&nbsp; &nbsp; &nbsp; let store = this.get(&#39;store&#39;);\r\n&nbsp; &nbsp; &nbsp; updateVote(upvotes,slug,store);\r\n&nbsp; &nbsp; }\r\n}</pre><p>(updateVote() is implemented above export)</p><p>All said and done, your Real Estate Listing component will look like this:</p><pre class=\"prism\">import Ember from &#39;ember&#39;;\r\n\r\nfunction updateVote(upvotes,listing_slug,store) {\r\n&nbsp; store.findRecord(&#39;listing&#39;, listing_slug).then(function(listing) {\r\n&nbsp; &nbsp; listing.set(&#39;upvotes&#39;,upvotes);\r\n&nbsp; &nbsp; listing.save();\r\n&nbsp; })\r\n}\r\n\r\nexport default Ember.Component.extend({\r\n&nbsp; store: Ember.inject.service(),\r\n&nbsp; upvotes: Ember.computed(&#39;upvotes&#39;, function() {\r\n&nbsp; &nbsp; return this.get(&#39;listing.upvotes&#39;);\r\n&nbsp; }),\r\n&nbsp; slug: Ember.computed(&#39;slug&#39;, function() {\r\n&nbsp; &nbsp; return this.get(&#39;listing.id&#39;);\r\n&nbsp; }),\r\n&nbsp; actions: {\r\n&nbsp; &nbsp; vote(direction) {\r\n&nbsp; &nbsp; &nbsp; let upvotes = this.get(&#39;upvotes&#39;);\r\n&nbsp; &nbsp; &nbsp; direction === &#39;up&#39; ?\r\n&nbsp; &nbsp; &nbsp; &nbsp; upvotes++ :\r\n&nbsp; &nbsp; &nbsp; &nbsp; upvotes--;\r\n&nbsp; &nbsp; &nbsp; this.set(&#39;upvotes&#39;, upvotes);\r\n&nbsp; &nbsp; &nbsp; let slug = this.get(&#39;slug&#39;);\r\n&nbsp; &nbsp; &nbsp; let store = this.get(&#39;store&#39;);\r\n&nbsp; &nbsp; &nbsp; updateVote(upvotes,slug,store);\r\n&nbsp; &nbsp; }\r\n&nbsp; }\r\n});</pre><p>The buttons now increment/decrement the vote count, but if you refresh the page you&#39;ll notice the changes aren&#39;t persisting. If you check the console you&#39;ll see why.</p><p>Next, we need to revist our old friends the Adapter and the Serializer to handle our update requests.</p><p>4. Tweak the Serializer (Again)</p><p>Copy the code below to override the serialize() method:</p><pre class=\"prism\">// app/serializers/listing.js\r\n\r\nexport default DS.RESTSerializer.extend({\r\n&nbsp; primaryKey: &#39;slug&#39;,\r\n&nbsp; normalizeResponse(store, primaryModelClass, payload, id, requestType) {\r\n&nbsp; &nbsp; // etc...\r\n&nbsp; },\r\n&nbsp; serialize(snapshot, options) {\r\n&nbsp; &nbsp; var json = this._super(...arguments);\r\n&nbsp; &nbsp; let payload = {\r\n&nbsp; &nbsp; &nbsp; &quot;slug&quot;: snapshot.id,\r\n&nbsp; &nbsp; &nbsp; &quot;metafields&quot;: [\r\n&nbsp; &nbsp; &nbsp; &nbsp; {\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;required&quot;: true,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;value&quot;: json.price,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;key&quot;: &quot;price&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;title&quot;: &quot;Price&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;type&quot;: &quot;text&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;children&quot;: null\r\n&nbsp; &nbsp; &nbsp; &nbsp; },\r\n&nbsp; &nbsp; &nbsp; &nbsp; {\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;required&quot;: true,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;value&quot;: json.address,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;key&quot;: &quot;address&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;title&quot;: &quot;Address&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;type&quot;: &quot;text&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;children&quot;: null\r\n&nbsp; &nbsp; &nbsp; &nbsp; },\r\n&nbsp; &nbsp; &nbsp; &nbsp; {\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;value&quot;: json.profileImage.split(&#39;/&#39;).slice(-1)[0],\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;key&quot;: &quot;profile&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;title&quot;: &quot;Profile&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;type&quot;: &quot;file&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;children&quot;: null,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;url&quot;: json.profileImage,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;imgix_url&quot;: &quot;https://cosmicjs.imgix.net/&quot; + json.profileImage.split(&#39;/&#39;).slice(-1)[0];\r\n&nbsp; &nbsp; &nbsp; &nbsp; },\r\n&nbsp; &nbsp; &nbsp; &nbsp; {\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;required&quot;: true,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;options&quot;: [\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;value&quot;: &quot;House&quot;\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;value&quot;: &quot;Apartment&quot;\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;value&quot;: &quot;Condo&quot;\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ],\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;value&quot;: json.style,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;key&quot;: &quot;style&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;title&quot;: &quot;Style&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;type&quot;: &quot;radio-buttons&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;children&quot;: null\r\n&nbsp; &nbsp; &nbsp; &nbsp; },\r\n&nbsp; &nbsp; &nbsp; &nbsp; {\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;value&quot;: json.beds,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;key&quot;: &quot;beds&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;title&quot;: &quot;Beds&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;type&quot;: &quot;text&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;children&quot;: null\r\n&nbsp; &nbsp; &nbsp; &nbsp; },\r\n&nbsp; &nbsp; &nbsp; &nbsp; {\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;value&quot;: json.baths,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;key&quot;: &quot;baths&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;title&quot;: &quot;Baths&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;type&quot;: &quot;text&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;children&quot;: null\r\n&nbsp; &nbsp; &nbsp; &nbsp; },\r\n&nbsp; &nbsp; &nbsp; &nbsp; {\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;value&quot;: json.squareFeet,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;key&quot;: &quot;square_feet&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;title&quot;: &quot;Square Feet&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;type&quot;: &quot;text&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;children&quot;: null\r\n&nbsp; &nbsp; &nbsp; &nbsp; },\r\n&nbsp; &nbsp; &nbsp; &nbsp; {\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;required&quot;: true,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;value&quot;: json.neighborhood,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;key&quot;: &quot;neighborhood&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;title&quot;: &quot;Neighborhood&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;type&quot;: &quot;text&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;children&quot;: null\r\n&nbsp; &nbsp; &nbsp; &nbsp; },\r\n&nbsp; &nbsp; &nbsp; &nbsp; {\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;required&quot;: true,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;value&quot;: json.zipcode,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;key&quot;: &quot;zipcode&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;title&quot;: &quot;zipcode&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;type&quot;: &quot;text&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;children&quot;: null\r\n&nbsp; &nbsp; &nbsp; &nbsp; },\r\n&nbsp; &nbsp; &nbsp; &nbsp; {\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;value&quot;: json.upvotes,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;key&quot;: &quot;upvotes&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;title&quot;: &quot;Upvotes&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;type&quot;: &quot;text&quot;,\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;children&quot;: null\r\n&nbsp; &nbsp; &nbsp; &nbsp; }\r\n&nbsp; &nbsp; ]\r\n&nbsp; &nbsp; }\r\n&nbsp; &nbsp; return payload;\r\n&nbsp; }\r\n});</pre><p>5. Tweak the Adapter Again</p><p>In the Adapter&#39;s export, we need to override urlForUpdateRecord() and updateRecord(). Once we do so, we have:</p><pre class=\"prism\">// app/adapters/listing.js\r\n\r\nimport DS from &#39;ember-data&#39;;\r\n\r\nexport default DS.RESTAdapter.extend({\r\n&nbsp; host: &#39;https://api.cosmicjs.com/v1/cosmic-real-estate&#39;,\r\n&nbsp; urlForFindAll(modelName, snapshot) {\r\n&nbsp; &nbsp; let path = this.pathForType(modelName);\r\n&nbsp; &nbsp; return this.buildURL() + &#39;/object-type/&#39; + path;\r\n&nbsp; },\r\n&nbsp; urlForFindRecord(slug) {\r\n&nbsp; &nbsp; return this.buildURL() + &#39;/object/&#39; + slug;\r\n&nbsp; },\r\n&nbsp; urlForUpdateRecord() {\r\n&nbsp; &nbsp; return this.buildURL() + &#39;/edit-object&#39;;\r\n&nbsp; },\r\n&nbsp; updateRecord: function(store, type, snapshot) {\r\n&nbsp; &nbsp; var data = {};\r\n&nbsp; &nbsp; var serializer = store.serializerFor(type.modelName);\r\n\r\n&nbsp; &nbsp; serializer.serializeIntoHash(data, type, snapshot);\r\n&nbsp; &nbsp; data = data.listing;\r\n&nbsp; &nbsp; var id = snapshot.id;\r\n&nbsp; &nbsp; var url = this.buildURL(type.modelName, id, snapshot, &#39;updateRecord&#39;);\r\n\r\n&nbsp; &nbsp; return this.ajax(url, &quot;PUT&quot;, { data: data });\r\n&nbsp; }\r\n});</pre><h2>Make it All Look Nice</h2><p>With our voting functionality added in, we&#39;ll add a couple features to pull the app together before it&#39;s complete.</p><p>1. Make a Filter for the Votes</p><p>Just as we did for the price, we&#39;ll make a filter to make the votes look pretty. Run:</p><pre class=\"prism\">ember g helper format-upvotes</pre><p>Then, in the newly created Format Upvotes filter, add the following (replacing the default parameters):</p><pre class=\"prism\">// app/helpers/format-upvotes.js\r\n\r\nexport function formatUpvotes(upvote) {\r\n&nbsp; if (upvote &gt; 0) {\r\n&nbsp; &nbsp; return &#39;&lt;span class=&quot;text-success&quot;&gt;&#39; + upvote + &#39;&lt;/span&gt;&#39;;\r\n&nbsp; } else if (upvote &lt; 0) {\r\n&nbsp; &nbsp; return &#39;&lt;span class=&quot;text-danger&quot;&gt;&#39; + upvote + &#39;&lt;/span&gt;&#39;;\r\n&nbsp; } else {\r\n&nbsp; &nbsp; return &#39;&lt;span class=&quot;text-muted&quot;&gt;&#39; + upvote + &#39;&lt;/span&gt;&#39;;\r\n&nbsp; }\r\n}</pre><p>To get it working, swap out {{upvotes}} in the Real Estate Listing template for {{{format-upvotes upvotes}}}. (Remember, triple braces tell Handlebars to not escape the return value.)</p><p>2. Add the upvote count to the Invidual Listings</p><p>In the Individual Listing template, where {{model.title}} is, add:</p><pre class=\"prism\">{{!-- app/templates/listings/listing.hbs --}}\r\n\r\n&lt;div class=&quot;page-header&quot;&gt;\r\n&nbsp; &lt;h1&gt;\r\n&nbsp; &nbsp; {{model.title}} &lt;small&gt;Upvotes: {{{format-upvotes model.upvotes}}}&lt;/small&gt;\r\n&nbsp; &lt;/h1&gt;\r\n&lt;/div&gt;</pre><h2>Deploy the App</h2><p>0. Hack Together an Endpoint to Serve the Keys in Express</p><p>Assuming you&#39;re using Cosmic to deploy your app, you&#39;ll automatically have access to your bucket&#39;s slug, read key, and write key via Node&#39;s process.env. However, since we&#39;ve completely isolated our front end and using Express only\r\nto serve it, making these ENV variables accessible isn&#39;t the most straightforward task.</p><p>We&#39;ll take the route of serving them through an endpoint on our Express server. We&#39;ll retrieve them with a simple AJAX call in the Listing Adapter, as we don&#39;t need them elsewhere. (Note that we won&#39;t be doing it securely but it wouldn&#39;t\r\nbe much more work to add authentication.)</p><p>Now working out of CosmicRealEstate, we&#39;ll use the router to serve a JSON object containing our keys at /api.</p><pre class=\"prism\">// CosmicRealEstate/app/routes.js\r\n\r\nmodule.exports = function(app) {\r\n&nbsp; &nbsp; app.get(&#39;/api&#39;, function(req,res){\r\n&nbsp; &nbsp; &nbsp; return res.json({\r\n&nbsp; &nbsp; &nbsp; &nbsp; bucket: process.env.COSMIC_BUCKET,\r\n&nbsp; &nbsp; &nbsp; &nbsp; writeKey: process.env.COSMIC_WRITE_KEY,\r\n&nbsp; &nbsp; &nbsp; &nbsp; readKey: process.env.COSMIC_READ_KEY\r\n&nbsp; &nbsp; &nbsp; });\r\n&nbsp; &nbsp; });\r\n&nbsp; &nbsp; app.get(&#39;*&#39;, function(req, res) {\r\n&nbsp; &nbsp; &nbsp; var path = require(&#39;path&#39;);\r\n&nbsp; &nbsp; &nbsp; res.sendFile(path.join(__dirname, &#39;../public&#39;, &#39;index.html&#39;)); // load our public/index.html file\r\n&nbsp; &nbsp; });\r\n\r\n};</pre><p>(Make sure the /api route goes before the wildcard route to override it).</p><p>Then, moving back into our Ember app to take care of the Listing Adapter, we need to do three things: 1. Import ember to give us access to jQuery 2. Import the configuration file so we can check the build environment 3. Make the Ajax call to the Express\r\nendpoint we just set up</p><p>Once we&#39;ve done this, the Listing Adapter will look like this up until the export (which does not change).</p><pre class=\"prism\">import DS from &#39;ember-data&#39;;\r\nimport config from &#39;../config/environment&#39;;\r\nimport Ember from &#39;ember&#39;;\r\n\r\nvar cosmic;\r\nif (config.environment === &quot;production&quot;) {\r\n&nbsp; Ember.$.ajax(&#39;/api&#39;, {\r\n&nbsp; &nbsp; data: {format: &#39;json&#39;},\r\n&nbsp; &nbsp; async: false,\r\n&nbsp; &nbsp; success: function(data) {\r\n&nbsp; &nbsp; &nbsp; cosmic = {\r\n&nbsp; &nbsp; &nbsp; &nbsp; bucket: data.bucket,\r\n&nbsp; &nbsp; &nbsp; &nbsp; writeKey: data.writeKey,\r\n&nbsp; &nbsp; &nbsp; &nbsp; readKey: data.readKey\r\n&nbsp; &nbsp; &nbsp; }\r\n&nbsp; &nbsp; }\r\n&nbsp; });\r\n} else {\r\n&nbsp; //config.environment === &quot;development&quot;\r\n&nbsp; cosmic = {\r\n&nbsp; &nbsp; bucket: &#39;cosmic-real-estate&#39;,\r\n&nbsp; &nbsp; writeKey: null,\r\n&nbsp; &nbsp; readKey: null\r\n&nbsp; }\r\n}</pre><p>(The choice to use async: false here is to keep things simple, albeit less than best practice. The idea is that the app can&#39;t do anything until the keys are provided - no harm, no foul.)</p><p>1. Build the Front End</p><p>With our Ember app now ready to go and keys ready to serve, we&#39;ll start off the deployment process by building it. In a terminal in cosmic-real-estate, run:</p><pre class=\"prism\">ember build --environment=production --output-path=../public/</pre><p>We specify our build environment for good measure and use the parent Node app&#39;s public directory as the build path.</p><p>2. Test the Node App</p><p>Navigate up into CosmicRealEstate and run:</p><pre class=\"prism\">node <a href=\"server.js\">server.js</a></pre><p>You should see your app live on localhost:3000</p><h2>Conclusion</h2><p>Using Cosmic, Express.js, and Ember.js, you&#39;ve just built yourself a modular app that you can scale in any direction you choose.</p><p>If you stick to our design philosophy and deploy the app to Cosmic, you&#39;re now able to completely manage your site and it&#39;s content from one place. If you think anything that isn&#39;t API first is worse than Mondays, can&#39;t stand worrying\r\nabout databases, and are trying to deliver your content as fast as possible with the least amount of worry, you&#39;ll find your happy place with Cosmic.</p>","metafields":[{"object_type":"authors","value":"59528e59833ff0503d000e98","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"59528e59833ff0503d000e98","slug":"matt-cain","title":"Matt Cain","content":"","metafields":[{"value":"9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg","imgix_url":"https://imgix.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-06-27T16:56:57.686Z","created_by":"5357ef811693be2118000001","created":"2017-06-27T16:56:57.686Z","status":"published","modified_at":"2023-01-20T22:01:28.380Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg"}},{"value":"<p>In the frenzy surrounding new tech, simplicity gets forgotten. Services like Cosmic challenge this. So in the spirit of doing the opposite, we&#39;re going to build a sleek real estate listing app (with a social flavor) that&#39;s as easy to use as a Wordpress blog.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"e6efc660-5b59-11e7-b717-653f819d86b5-ember-real-estate-website.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e6efc660-5b59-11e7-b717-653f819d86b5-ember-real-estate-website.jpg","imgix_url":"https://imgix.cosmicjs.com/e6efc660-5b59-11e7-b717-653f819d86b5-ember-real-estate-website.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-06-27T16:57:07.042Z","created_by":"5357ef811693be2118000001","created":"2017-06-27T16:57:07.042Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"59528e59833ff0503d000e98","slug":"matt-cain","title":"Matt Cain","content":"","metafields":[{"value":"9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg","imgix_url":"https://imgix.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-06-27T16:56:57.686Z","created_by":"5357ef811693be2118000001","created":"2017-06-27T16:56:57.686Z","status":"published","modified_at":"2023-01-20T22:01:28.380Z","modified_by":"5357ef811693be2118000001","thumbnail":"https://imgix.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg","imgix_url":"https://imgix.cosmicjs.com/9ff99380-5b59-11e7-a33a-a9e1bde9cf9a-matt-cain.jpeg"}}},"teaser":"<p>In the frenzy surrounding new tech, simplicity gets forgotten. Services like Cosmic challenge this. So in the spirit of doing the opposite, we&#39;re going to build a sleek real estate listing app (with a social flavor) that&#39;s as easy to use as a Wordpress blog.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/e6efc660-5b59-11e7-b717-653f819d86b5-ember-real-estate-website.jpg","imgix_url":"https://imgix.cosmicjs.com/e6efc660-5b59-11e7-b717-653f819d86b5-ember-real-estate-website.jpg"}}},{"_id":"59508c41833ff0503d000044","order":122,"slug":"connect-your-cosmic-js-buckets-to-slack","title":"Connect Your Cosmic Buckets to Slack","content":"<p><img src=\"https://cosmicjs.imgix.net/2ca6e910-5a27-11e7-b391-297f686fd25c-cosmicjs-slack.jpg\" style=\"width: 1005px;\" class=\"fr-fic fr-dib\"></p><p>You can now connect your Cosmic Buckets to Slack to be notified when any changes occur in your Bucket. &nbsp;Installing the app to your Slack account is easy.</p><p><strong>Follow these steps:</strong><br>1. Install the Cosmic Slack app to your Slack account <a href=\"https://slack.com/oauth/authorize?&client_id=11020550018.203122635188&scope=incoming-webhook\" rel=\"noopener noreferrer\" target=\"_blank\">by clicking here</a>.<br>2. Select which channel you would like to receive the notifications and click &quot;Install&quot;.</p><p><img src=\"https://www.cosmicjs.com/uploads/ff6f5440-5a27-11e7-b391-297f686fd25c-Screen Shot 2017-06-25 at 11.27.55 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>3. After you install the Slack app, copy the webhook link provided and paste it into the <strong>Endpoint</strong> input field for each Webhook in your Cosmic Bucket and click &quot;Save Webhooks&quot;.</p><p><img src=\"https://www.cosmicjs.com/uploads/8a0a04b0-5a2d-11e7-87c6-13710bb7d4a0-Screen Shot 2017-06-26 at 12.08.21 AM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>Now whenever content is edited in your Cosmic Bucket, your team will be notified in Slack.</p><p><img src=\"https://www.cosmicjs.com/uploads/eb7c8e10-5a33-11e7-a33a-a9e1bde9cf9a-screenshot.jpg\" style=\"width: 100%; max-width: 500px;\" class=\"fr-fic fr-dib\"></p><p>This is another way that Cosmic is making it easier for teams to collaborate to build apps faster. &nbsp;We also have a <a href=\"https://www.cosmicjs.com/integrations\">new Integrations page</a> to help keep track of all of the Cosmic integrations with your favorite services. &nbsp;If you have any questions, feel free to <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\">join the Slack community</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>You can now connect your Cosmic Buckets to Slack to track changes in your Buckets. &nbsp;Installing the app to your Slack account is easy.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"2ca6e910-5a27-11e7-b391-297f686fd25c-cosmicjs-slack.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2ca6e910-5a27-11e7-b391-297f686fd25c-cosmicjs-slack.jpg","imgix_url":"https://imgix.cosmicjs.com/2ca6e910-5a27-11e7-b391-297f686fd25c-cosmicjs-slack.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-06-26T04:23:28.967Z","created_by":"5357ef811693be2118000001","created":"2017-06-26T04:23:28.967Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>You can now connect your Cosmic Buckets to Slack to track changes in your Buckets. &nbsp;Installing the app to your Slack account is easy.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/2ca6e910-5a27-11e7-b391-297f686fd25c-cosmicjs-slack.jpg","imgix_url":"https://imgix.cosmicjs.com/2ca6e910-5a27-11e7-b391-297f686fd25c-cosmicjs-slack.jpg"}}},{"_id":"594a7d05aa75cb9c6000074e","order":123,"slug":"how-to-make-a-simple-twitter-clone-with-react-native","title":"How to Make a Simple Twitter Clone with React Native","content":"<p style=\"text-align: center;\"><img src=\"https://cosmicjs.imgix.net/e7969310-568a-11e7-9700-5ba5cd7a4f16-react-native-twitter-clone.png\" style=\"width: 600px;\" class=\"fr-fic fr-dib\"></p><p>In this tutorial, we&#39;re going to create a small Twitter-like mobile app using React Native. With our app, users will be able to create accounts and log in, see a feed of all of the posts created by themselves and other users, and add their own posts\r\nto the feed. The data for all of our users and posts will be managed by Cosmic.</p><h2>TL;DR</h2><p><a href=\"https://github.com/cosmicjs/react-native-twitter-clone\" rel=\"noopener noreferrer\" target=\"_blank\">View the source code on GitHub</a><br><a href=\"https://www.cosmicjs.com/apps/react-native-twitter-clone\">Install the app on Cosmic (you still need to run locally)</a></p><h2>Getting Started</h2><p>You&rsquo;ll need to have node.js and yarn or npm installed. For this project I&#39;m using yarn and node v8.1.2.</p><p>There are a number of ways to start a new React Native project; for this one, I used <a href=\"https://github.com/react-community/create-react-native-app\" rel=\"noopener noreferrer\" target=\"_blank\">create-react-native-app</a>. We can globally install CRNA\r\nand fire up a new project by running the following commands:</p><pre class=\"prism\">$ yarn global add create-react-native-app\r\n$ create-react-native-app twitter-clone\r\n$ cd twitter-clone/\r\n$ yarn start</pre><p>I&#39;m also using the<a href=\"https://expo.io/\" rel=\"noopener noreferrer\" target=\"_blank\">&nbsp;Expo SDK</a> so that I don&#39;t have to get Xcode and Android Studio set up. This is also going to provide me with features that will help with things like loading fonts and allowing users to upload photos to the app. To get started with Expo, please refer to the docs.</p><h2>Dependencies</h2><p>We&#39;re going to use several tools for this project; we&#39;ll talk about a few of the key ones here.</p><ul><li><a href=\"https://nativebase.io/\" rel=\"noopener noreferrer\" target=\"_blank\">Native Base</a> is a component library that will allow us to quickly make an attractive user interface that works cross-platform.</li><li><a href=\"https://github.com/aksonov/react-native-router-flux\" rel=\"noopener noreferrer\" target=\"_blank\">React Native Router Flux</a> will help us navigate between the different screens of our app.</li><li><a href=\"https://github.com/reactjs/react-redux\" rel=\"noopener noreferrer\" target=\"_blank\">React-Redux</a> will connect the different components of our app to our store where we will keep data about the state of our application.</li><li><a href=\"https://github.com/mzabriskie/axios\" rel=\"noopener noreferrer\" target=\"_blank\">Axios</a> is a promised-based HTTP client that we will use to make our calls to the Cosmic API.</li></ul><p>Go ahead and copy and paste the following into your package.json and then run yarn install again.</p><pre class=\"prism\">{\r\n&nbsp; &quot;name&quot;: &quot;twitter-clone&quot;,\r\n&nbsp; &quot;version&quot;: &quot;1.0.0&quot;,\r\n&nbsp; &quot;private&quot;: true,\r\n&nbsp; &quot;devDependencies&quot;: {\r\n&nbsp; &nbsp; &quot;jest-expo&quot;: &quot;~1.0.1&quot;,\r\n&nbsp; &nbsp; &quot;react-native-scripts&quot;: &quot;0.0.30&quot;,\r\n&nbsp; &nbsp; &quot;react-test-renderer&quot;: &quot;16.0.0-alpha.6&quot;\r\n&nbsp; },\r\n&nbsp; &quot;main&quot;: &quot;./node_modules/react-native-scripts/build/bin/crna-entry.js&quot;,\r\n&nbsp; &quot;scripts&quot;: {\r\n&nbsp; &nbsp; &quot;start&quot;: &quot;&quot;react-native-scripts start&quot;,\r\n&nbsp; &nbsp; &quot;eject&quot;: &quot;react-native-scripts eject&quot;,\r\n&nbsp; &nbsp; &quot;android&quot;: &quot;react-native-scripts android&quot;,\r\n&nbsp; &nbsp; &quot;ios&quot;: &quot;react-native-scripts ios&quot;,\r\n&nbsp; &nbsp; &quot;test&quot;: &quot;node node_modules/jest/bin/jest.js --watch&quot;\r\n&nbsp; },\r\n&nbsp; &quot;jest&quot;: {\r\n&nbsp; &nbsp; &quot;preset&quot;: &quot;jest-expo&quot;\r\n&nbsp; },\r\n&nbsp; &quot;dependencies&quot;: {\r\n&nbsp; &nbsp; &quot;@expo/vector-icons&quot;: &quot;^5.0.0&quot;,\r\n&nbsp; &nbsp; &quot;axios&quot;: &quot;^0.16.1&quot;,\r\n&nbsp; &nbsp; &quot;expo&quot;: &quot;^17.0.0&quot;,\r\n&nbsp; &nbsp; &quot;form-data&quot;: &quot;^2.2.0&quot;,\r\n&nbsp; &nbsp; &quot;native-base&quot;: &quot;^2.1.4&quot;,\r\n&nbsp; &nbsp; &quot;react&quot;: &quot;16.0.0-alpha.6&quot;,\r\n&nbsp; &nbsp; &quot;react-native&quot;: &quot;^0.44.0&quot;,\r\n&nbsp; &nbsp; &quot;react-native-router-flux&quot;: &quot;^3.39.2&quot;,\r\n&nbsp; &nbsp; &quot;react-redux&quot;: &quot;^5.0.5&quot;,\r\n&nbsp; &nbsp; &quot;redux&quot;: &quot;^3.6.0&quot;,\r\n&nbsp; &nbsp; &quot;redux-devtools-extension&quot;: &quot;^2.13.2&quot;,\r\n&nbsp; &nbsp; &quot;redux-logger&quot;: &quot;^3.0.6&quot;,\r\n&nbsp; &nbsp; &quot;redux-thunk&quot;: &quot;^2.2.0&quot;,\r\n&nbsp; }\r\n}</pre><h2>Directory Structure</h2><p>Compared to some other boilerplates, CRNA is pretty unopinionated about how we structure the files in our application; it just gives us an index.ios.js and index.android.js and App.js as a starting point.</p><p>We&#39;re going to have our App.js point to a folder called app that will hold all of our components, layouts, config files, and our redux store and reducers. The following is the scaffolding that I have found works best for me. I won&#39;t go into the\r\ncontents of each and every file in this post, but you can see it all in the source code.</p><p>Here is what our app folder will look like:</p><pre class=\"prism\">.\r\n├── assets\r\n│ &nbsp; └── fonts\r\n│ &nbsp; &nbsp; &nbsp; └── Pacifico.ttf\r\n├── components\r\n│ &nbsp; ├── FeedNavbar\r\n│ &nbsp; │ &nbsp; ├── FeedNavbar.js\r\n│ &nbsp; │ &nbsp; ├── index.js\r\n│ &nbsp; │ &nbsp; └── styles.js\r\n│ &nbsp; ├── SinglePost\r\n│ &nbsp; │ &nbsp; ├── SinglePost.js\r\n│ &nbsp; │ &nbsp; ├── index.js\r\n│ &nbsp; │ &nbsp; └── styles.js\r\n│ &nbsp; ├── SmallButton\r\n│ &nbsp; │ &nbsp; ├── SmallButton.js\r\n│ &nbsp; │ &nbsp; ├── index.js\r\n│ &nbsp; │ &nbsp; └── styles.js\r\n│ &nbsp; └── TextField\r\n│ &nbsp; &nbsp; &nbsp; ├── TextField.js\r\n│ &nbsp; &nbsp; &nbsp; ├── index.js\r\n│ &nbsp; &nbsp; &nbsp; └── styles.js\r\n├── config\r\n│ &nbsp; ├── cosmic.js\r\n│ &nbsp; └── routes.js\r\n├── layouts\r\n│ &nbsp; ├── feed\r\n│ &nbsp; │ &nbsp; ├── Feed.js\r\n│ &nbsp; │ &nbsp; ├── index.js\r\n│ &nbsp; │ &nbsp; └── styles.js\r\n│ &nbsp; ├── login\r\n│ &nbsp; │ &nbsp; ├── Login.js\r\n│ &nbsp; │ &nbsp; ├── index.js\r\n│ &nbsp; │ &nbsp; └── styles.js\r\n│ &nbsp; ├── newPost\r\n│ &nbsp; │ &nbsp; ├── NewPost.js\r\n│ &nbsp; │ &nbsp; ├── index.js\r\n│ &nbsp; │ &nbsp; └── styles.js\r\n│ &nbsp; ├── signup\r\n│ &nbsp; │ &nbsp; ├── Signup.js\r\n│ &nbsp; │ &nbsp; ├── index.js\r\n│ &nbsp; │ &nbsp; └── styles.js\r\n│ &nbsp; └── welcome\r\n│ &nbsp; &nbsp; &nbsp; ├── Welcome.js\r\n│ &nbsp; &nbsp; &nbsp; ├── index.js\r\n│ &nbsp; &nbsp; &nbsp; └── styles.js\r\n└── redux\r\n&nbsp; &nbsp; ├── reducers\r\n&nbsp; &nbsp; │ &nbsp; ├── index.js\r\n&nbsp; &nbsp; │ &nbsp; ├── posts.js\r\n&nbsp; &nbsp; │ &nbsp; └── users.js\r\n&nbsp; &nbsp; └── store.js</pre><h2>App</h2><p>A few things are going to happen in our App.js file. We will:</p><ul><li>Pull in our routes which navigate to our various layouts</li><li>Connect our provider to our store which will let our layouts access our application state</li><li>Provide access to some fonts that Natve Base uses</li><li>Establish our root component with AppRegistry</li></ul><p>You can copy and paste the following into your App.js file in the project root:</p><div><pre class=\"prism\">import React, { Component } from &#39;react&#39;;\r\nimport { AppRegistry, View } from &#39;react-native&#39;;\r\nimport { Provider, connect } from &#39;react-redux&#39;;\r\nimport { Font, AppLoading } from &#39;expo&#39;;\r\nimport store from &#39;./app/redux/store&#39;;\r\nimport Router from &#39;./app/config/routes&#39;;\r\n\r\nexport default class App extends Component {\r\n  constructor(){\r\n    super();\r\n    this.state = {\r\n      isReady: false,\r\n    }\r\n  }\r\n\r\n  async componentWillMount() {\r\n    await Font.loadAsync({\r\n      &#39;Roboto&#39;: require(&#39;native-base/Fonts/Roboto.ttf&#39;),\r\n      &#39;Roboto_medium&#39;: require(&#39;native-base/Fonts/Roboto_medium.ttf&#39;),\r\n      &#39;Pacifico&#39;: require(&#39;./app/assets/fonts/Pacifico.ttf&#39;),\r\n      &#39;Ionicons&#39;: require(&#39;native-base/Fonts/Ionicons.ttf&#39;),\r\n    });\r\n\r\n    this.setState({isReady: true});\r\n  }\r\n\r\n\r\n  render() {\r\n    if (!this.state.isReady) {\r\n      return &lt;AppLoading /&gt;;\r\n    }\r\n    return (\r\n      &lt;Provider store={store}&gt;\r\n        &lt;Router /&gt;\r\n      &lt;/Provider&gt;\r\n    );\r\n  }\r\n}\r\n\r\nAppRegistry.registerComponent(&#39;main&#39;, () =&gt; App);</pre></div><p>Next, let&#39;s take a look at our routes.js file:</p><div><pre class=\"prism\">import React from &#39;react&#39;;\r\nimport { Scene, Router, Actions, ActionConst } from &#39;react-native-router-flux&#39;;\r\nimport Welcome from &#39;../layouts/welcome&#39;;\r\nimport Login from &#39;../layouts/login&#39;;\r\nimport Signup from &#39;../layouts/signup&#39;;\r\nimport NewPost from &#39;../layouts/newPost&#39;;\r\nimport Feed from &#39;../layouts/feed&#39;;\r\n\r\nconst scenes = Actions.create(\r\n  &lt;Scene key=&quot;root&quot;&gt;\r\n    &lt;Scene key=&quot;welcome&quot; component={Welcome} title=&quot;Welcome&quot; initial={true} /&gt;\r\n    &lt;Scene key=&quot;login&quot; component={Login} title=&quot;Login&quot; type={ActionConst.REPLACE} /&gt;\r\n    &lt;Scene key=&quot;signup&quot; component={Signup} title=&quot;Create New Account&quot; type={ActionConst.REPLACE} /&gt;\r\n    &lt;Scene key=&quot;feed&quot; component={Feed} title=&quot;Your Feed&quot; type={ActionConst.REPLACE} hideNavBar /&gt;\r\n    &lt;Scene key=&quot;newPost&quot; component={NewPost} title=&quot;Make a new post&quot; /&gt;\r\n  &lt;/Scene&gt;\r\n);\r\n\r\nexport default () =&gt; (\r\n  &lt;Router scenes={scenes} /&gt;\r\n);</pre></div><p>Using React Native Router Flux, we&#39;ve just created a bunch of scenes to which we can easily navigate from anywhere in our app.</p><p>Our first scene is the Welcome layout, where users will choose between logging in and creating a new account. It looks like this:</p><div><pre class=\"prism\">import React from &#39;react&#39;;\r\nimport {\r\n  Container,\r\n  Content,\r\n  Icon,\r\n  Text,\r\n  Button,\r\n} from &#39;native-base&#39;;\r\nimport { View } from &#39;react-native&#39;;\r\nimport { Actions } from &#39;react-native-router-flux&#39;;\r\n\r\nimport styles from &#39;./styles&#39;;\r\n\r\n\r\nexport default () =&gt; (\r\n  &lt;Container style={styles.container}&gt;\r\n    &lt;Content&gt;\r\n      &lt;View style={styles.iconBox}&gt;\r\n        &lt;Icon\r\n          style={styles.icon}\r\n          ios=&quot;ios-happy-outline&quot;\r\n          android=&quot;md-happy&quot;\r\n        /&gt;\r\n        &lt;Text style={styles.welcome}&gt;Welcome&lt;/Text&gt;\r\n      &lt;/View&gt;\r\n      &lt;View style={styles.buttonContainer}&gt;\r\n        &lt;Button\r\n          block\r\n          style={styles.button}\r\n          onPress={() =&gt; Actions.login()}\r\n        &gt;\r\n          &lt;Text&gt;Log in&lt;/Text&gt;\r\n        &lt;/Button&gt;\r\n        &lt;Text style={styles.or}&gt;OR&lt;/Text&gt;\r\n        &lt;Button\r\n          block\r\n          style={styles.button}\r\n          onPress={() =&gt; Actions.signup()}\r\n        &gt;\r\n          &lt;Text&gt;Sign up&lt;/Text&gt;\r\n        &lt;/Button&gt;\r\n      &lt;/View&gt;\r\n    &lt;/Content&gt;\r\n  &lt;/Container&gt;\r\n)</pre></div><p>Here we&#39;ve just created two buttons with Native Base that will navigate to the Loginand Signup layouts.</p><p>Let&#39;s take a look at our Signup layout and see what happens when users create a new account.</p><div><pre class=\"prism\">import React, { Component } from &#39;react&#39;;\r\nimport { connect } from &#39;react-redux&#39;;\r\nimport { ImagePicker } from &#39;expo&#39;;\r\nimport { Actions } from &#39;react-native-router-flux&#39;;\r\nimport {View} from &#39;react-native&#39;;\r\nimport {\r\n  Container,\r\n  Content,\r\n  Button,\r\n  Text,\r\n  Form,\r\n  Thumbnail,\r\n  Icon\r\n} from &#39;native-base&#39;;\r\nimport axios from &#39;axios&#39;;\r\n\r\nimport TextField from &#39;../../components/TextField&#39;;\r\nimport styles from &#39;./styles&#39;;\r\nimport { addUser } from &#39;../../redux/reducers/users&#39;;\r\nimport cosmicConfig from &#39;../../config/cosmic&#39;;\r\n\r\nconst mapDispatchToProps = {addUser};\r\n\r\nconst validate = form =&gt; {\r\n  let errorMessage = &#39;&#39;;\r\n  if (form.username.includes(&quot; &quot;)){\r\n    errorMessage = &quot;Username cannot contain spaces&quot;;\r\n  }\r\n  if (form.password.includes(&quot; &quot;)){\r\n    errorMessage = &quot;Password cannot contain spaces&quot;;\r\n  }\r\n  Object.keys(form).slice(0, 5).map(field =&gt; {\r\n    if (!form[field]){\r\n      errorMessage = &#39;All fields must be filled&#39;;\r\n    }\r\n  })\r\n  return errorMessage;\r\n}\r\n\r\nclass Signup extends Component {\r\n  constructor() {\r\n    super();\r\n    this.state = {\r\n      firstName: &#39;&#39;,\r\n      lastName: &#39;&#39;,\r\n      username: &#39;&#39;,\r\n      password: &#39;&#39;,\r\n      image: null,\r\n      error: &#39;&#39;,\r\n    };\r\n  }\r\n\r\n  onSubmit(){\r\n    const error = validate(this.state);\r\n    if (error) {\r\n      this.setState({ error })\r\n    } else {\r\n      this.checkUsername(this.state.username);\r\n    }\r\n  }\r\n\r\n  checkUsername(username){\r\n    axios.get(`https://api.cosmicjs.com/v1/${cosmicConfig.bucket.slug}/object-type/users/search?metafield_key=username&amp;metafield_value=${username}`)\r\n    .then(res =&gt; res.data)\r\n    .then(data =&gt; {\r\n      if (data.objects) {\r\n        this.setState({ error: &#39;Username not available&#39;})\r\n      } else {\r\n        this.props.addUser(this.state);\r\n      }\r\n    })\r\n  }\r\n\r\n  uploadImage = async () =&gt; {\r\n    let result = await ImagePicker.launchImageLibraryAsync({\r\n      allowsEditing: true,\r\n      aspect: [4, 3],\r\n    });\r\n    if (!result.cancelled) {\r\n      this.setState({ image: result.uri });\r\n    }\r\n  };\r\n\r\n  render(){\r\n    return (\r\n      &lt;Container style={styles.container}&gt;\r\n        &lt;Content&gt;\r\n          &lt;Form style={styles.mar10}&gt;\r\n            &lt;TextField\r\n              name=&quot;First Name&quot;\r\n              value={this.state.firstName}\r\n              onChangeText={(text) =&gt; this.setState({firstName: text})}\r\n            /&gt;\r\n            &lt;TextField\r\n              name=&quot;Last Name&quot;\r\n              value={this.state.lastName}\r\n              onChangeText={(text) =&gt; this.setState({lastName: text})}\r\n            /&gt;\r\n            &lt;TextField\r\n              name=&quot;Username&quot;\r\n              value={this.state.username}\r\n              onChangeText={(text) =&gt; this.setState({username: text})}\r\n            /&gt;\r\n            &lt;TextField\r\n              secureTextEntry\r\n              name=&quot;Password&quot;\r\n              value={this.state.password}\r\n              onChangeText={(text) =&gt; this.setState({password: text})}\r\n            /&gt;\r\n          &lt;/Form&gt;\r\n          &lt;Text style={styles.addPic}&gt;Add a profile picture&lt;/Text&gt;\r\n          {\r\n            !this.state.image &amp;&amp;\r\n            &lt;Button\r\n              primary\r\n              bordered\r\n              onPress={this.uploadImage}\r\n              style={styles.uploadButton}&gt;\r\n              &lt;Icon\r\n                ios=&#39;ios-camera&#39;\r\n                android=&#39;md-camera&#39;\r\n              /&gt;\r\n            &lt;/Button&gt;\r\n          }\r\n          {\r\n            this.state.image &amp;&amp;\r\n            &lt;Thumbnail\r\n              size={80}\r\n              source={{uri: this.state.image}}\r\n              style={styles.thumbnail}\r\n            /&gt;\r\n          }\r\n          &lt;Button\r\n            block\r\n            style={styles.mar10}\r\n            onPress={() =&gt; this.onSubmit()}\r\n          &gt;\r\n            &lt;Text&gt;Create account&lt;/Text&gt;\r\n          &lt;/Button&gt;\r\n          &lt;Text style={styles.formMsg}&gt;{this.state.error}&lt;/Text&gt;\r\n          &lt;Button\r\n            transparent\r\n            style={styles.loginBtn}\r\n            onPress={() =&gt; Actions.login()}\r\n          &gt;\r\n            &lt;Text style={styles.loginTxt}&gt;Already have an account?&lt;/Text&gt;\r\n          &lt;/Button&gt;\r\n        &lt;/Content&gt;\r\n      &lt;/Container&gt;\r\n    );\r\n  }\r\n}\r\n\r\nexport default connect(null, mapDispatchToProps)(Signup);</pre></div><p>There are a couple of things that happen here:</p><ul><li>We keep the contents of our form fields on state as the users fill out the form.</li><li>When users submit, we do some simple validation to make sure that they have filled out the fields with valid input.</li><li>We then make our first call to the Cosmic API to make sure that the username they have selected is not already in use.</li><li>Finally, when all of the fields contain valid input, we submit the form as a new user to the Cosmic API with our addUserfunction.</li></ul><p>The addUser function is defined in our usersreducer; it looks like this:</p><div><pre class=\"prism\">export const addUser = user =&gt; dispatch =&gt; {\r\n  let data = new FormData();\r\n  data.append(&#39;media&#39;, {\r\n        uri: user.image,\r\n        type: &#39;image/jpeg&#39;,\r\n        name: &#39;image&#39;\r\n      });\r\n\r\n  return axios.post(`https://api.cosmicjs.com/v1/${cosmicConfig.bucket.slug}/media`, data)\r\n  .then(res =&gt; res.data.media)\r\n  .then(media =&gt; {\r\n    return axios.post(`https://api.cosmicjs.com/v1/${cosmicConfig.bucket.slug}/add-object`, {\r\n      title: user.firstName + &#39; &#39; + user.lastName,\r\n      type_slug: &#39;users&#39;,\r\n      metafields: [\r\n        {\r\n          key: &#39;name&#39;,\r\n          type: &#39;text&#39;,\r\n          value: user.firstName + &#39; &#39; + user.lastName,\r\n        },\r\n        {\r\n          key: &#39;username&#39;,\r\n          type: &#39;text&#39;,\r\n          value: user.username,\r\n        },\r\n        {\r\n          key: &#39;password&#39;,\r\n          type: &#39;text&#39;,\r\n          value: user.password,\r\n        },\r\n        {\r\n          key: &#39;profile_picture&#39;,\r\n          type: &#39;file&#39;,\r\n          value: media.name,\r\n              }\r\n            ]\r\n          }\r\n        )}\r\n      )\r\n      .then(res =&gt; formatUser(res.data))\r\n      .then(formattedUser =&gt; dispatch(createUser(formattedUser)))\r\n      .then(() =&gt; Actions.feed())\r\n      .catch(err =&gt; console.error(`Creating user unsuccessful`, err))\r\n}</pre></div><p>Here we make two calls to the Cosmic API. The first call will post the user&#39;s profile picture to our bucket as Media, and the second will use the reference to the picture that we get back to post all of the user&#39;s information as a new user.</p><p>If the user has already created an account, they can login:</p><div><pre class=\"prism\">import React, { Component } from &#39;react&#39;;\r\nimport { connect } from &#39;react-redux&#39;;\r\nimport {\r\n  Container,\r\n  Content,\r\n  Icon,\r\n  Text,\r\n  Button,\r\n} from &#39;native-base&#39;;\r\nimport { View } from &#39;react-native&#39;;\r\nimport { Actions } from &#39;react-native-router-flux&#39;;\r\nimport TextField from &#39;../../components/TextField&#39;;\r\nimport styles from &#39;./styles&#39;;\r\n\r\nimport { authenticate } from &#39;../../redux/reducers/users&#39;;\r\n\r\nconst mapDispatchToProps = {authenticate};\r\n\r\nconst validate = form =&gt; {\r\n  let errorMessage = &#39;&#39;;\r\n  if (form.username.includes(&#39; &#39;) || form.password.includes(&#39; &#39;)){\r\n    errorMessage = &#39;Username and password cannot contain spaces&#39;;\r\n  }\r\n  if (form.username === &#39;&#39; || form.password === &#39;&#39;){\r\n    errorMessage = &#39;All fields must be filled&#39;;\r\n  }\r\n  return errorMessage;\r\n}\r\n\r\nclass Login extends Component {\r\n  constructor(props) {\r\n    super(props);\r\n    this.state = {\r\n      username: &#39;&#39;,\r\n      password: &#39;&#39;,\r\n      error: &#39;&#39;,\r\n    };\r\n  }\r\n\r\n  onSubmit(){\r\n    const error = validate(this.state);\r\n    if (error) {\r\n      this.setState({ error })\r\n    } else {\r\n    this.login();\r\n    }\r\n  }\r\n\r\n  login(){\r\n    this.props.authenticate(this.state)\r\n      .then(res =&gt; {\r\n        if (res === &#39;Username invalid&#39; || res === &#39;Password invalid&#39;){\r\n          this.setState({\r\n            error: res,\r\n            username: &#39;&#39;,\r\n            password: &#39;&#39;,\r\n          })\r\n        } else {\r\n          Actions.feed();\r\n        }\r\n      });\r\n  }\r\n\r\n  render(){\r\n    return (\r\n      &lt;Container style={styles.container}&gt;\r\n        &lt;Content&gt;\r\n          &lt;Text style={styles.formMsg}&gt;{this.state.error}&lt;/Text&gt;\r\n          &lt;Icon\r\n            style={styles.icon}\r\n            ios=&quot;ios-happy-outline&quot;\r\n            android=&quot;md-happy&quot;\r\n          /&gt;\r\n          &lt;View style={styles.loginBox}&gt;\r\n            &lt;TextField\r\n            name=&quot;Enter Username&quot;\r\n            type=&quot;big&quot;\r\n            value={this.state.username}\r\n            onChangeText={(text) =&gt; this.setState({username: text})}\r\n            /&gt;\r\n            &lt;TextField\r\n            secureTextEntry\r\n            name=&quot;Enter Password&quot;\r\n            type=&quot;big&quot;\r\n            value={this.state.password}\r\n            onChangeText={(text) =&gt; this.setState({password: text})}\r\n            /&gt;\r\n          &lt;Button\r\n            block\r\n            style={styles.button}\r\n            onPress={() =&gt; this.onSubmit()}\r\n          &gt;\r\n            &lt;Text&gt;Log in&lt;/Text&gt;\r\n          &lt;/Button&gt;\r\n          &lt;/View&gt;\r\n          &lt;Button\r\n            transparent\r\n            style={styles.signupBtn}\r\n            onPress={() =&gt; Actions.signup()}&gt;\r\n            &lt;Text style={styles.signupTxt}&gt;Sign up for an account&lt;/Text&gt;\r\n          &lt;/Button&gt;\r\n        &lt;/Content&gt;\r\n      &lt;/Container&gt;\r\n    );\r\n  }\r\n}\r\n\r\nexport default connect(null, mapDispatchToProps)(Login);</pre></div><p>Again, we check to make sure that the fields have valid input, and then check the login info against what is in our bucket using our authenticatefunction:</p><div><pre class=\"prism\">export const authenticate = user =&gt; dispatch =&gt; {\r\n  return axios.get(`https://api.cosmicjs.com/v1/${cosmicConfig.bucket.slug}/object-type/users/search?metafield_key=username&amp;metafield_value=${user.username}`)\r\n    .then(res =&gt; res.data)\r\n    .then(data =&gt; {\r\n      console.log(&#39;RESPONSE: &#39;, data);\r\n      if (data.objects) {\r\n        const userData = data.objects[0];\r\n        return {\r\n          password: userData.metadata.password,\r\n          username: userData.metadata.username,\r\n          name: userData.metadata.name,\r\n          profilePicture: userData.metadata.profile_picture,\r\n          slug: userData.slug,\r\n          id: userData._id,\r\n        }\r\n      } else {\r\n        return &#39;Username invalid&#39;;\r\n      }\r\n    })\r\n    .then(data =&gt; {\r\n      if (data === &#39;Username invalid&#39;){\r\n        return data;\r\n      } else if (data.password === user.password){\r\n        dispatch(login({\r\n          name: data.name,\r\n          username: data.username,\r\n          profilePicture: data.profilePicture,\r\n          slug: data.slug,\r\n          id: data.id,\r\n        }))\r\n      } else {\r\n        return &#39;Password invalid&#39;;\r\n      }\r\n    })\r\n    .catch(error =&gt; console.error(&#39;Login unsuccessful&#39;, error))\r\n}</pre></div><p>As a side note, we normally wouldn&#39;t want to be storing user credentials directly to our database without some kind of encryption, but we&#39;ll leave it like this for now as a simple illustration of how we can manage our data with the Cosmic API.</p><p>When users are logged in, they will go directly to the Feed layout, which looks like this:</p><div><pre class=\"prism\">import React, { Component } from &#39;react&#39;;\r\nimport { connect } from &#39;react-redux&#39;;\r\nimport { Actions } from &#39;react-native-router-flux&#39;;\r\nimport {\r\n  Container,\r\n  Content,\r\n  List,\r\n  Button,\r\n  Icon,\r\n  Text,\r\n} from &#39;native-base&#39;;\r\n\r\nimport SinglePost from &#39;../../components/SinglePost&#39;;\r\nimport FeedNavbar from &#39;../../components/FeedNavbar&#39;;\r\nimport { loadPosts } from &#39;../../redux/reducers/posts&#39;;\r\nimport { logoutUser } from &#39;../../redux/reducers/users&#39;;\r\nimport styles from &#39;./styles&#39;;\r\n\r\nconst mapStateToProps = ({ posts }) =&gt; ({ posts });\r\n\r\nconst mapDispatchToProps = { loadPosts, logoutUser };\r\n\r\nconst renderPost = (post, index) =&gt; (\r\n  &lt;SinglePost\r\n    key={index}\r\n    name={post.name}\r\n    username={post.username}\r\n    profilePicture={post.profilePicture}\r\n    content={post.content}\r\n  /&gt;\r\n)\r\n\r\nclass Feed extends Component {\r\n  componentDidMount(){\r\n    this.props.loadPosts();\r\n  }\r\n\r\n  render(){\r\n    const endMsg = this.props.posts.length === 0 ? &quot;There aren&#39;t any posts yet!&quot; : &quot;That&#39;s all the posts for now!&quot;\r\n\r\n    return (\r\n      &lt;Container&gt;\r\n        &lt;FeedNavbar logout={this.props.logoutUser} refresh={this.props.loadPosts} /&gt;\r\n        &lt;Content&gt;\r\n          &lt;List&gt;\r\n            {\r\n              !!this.props.posts.length &amp;&amp; this.props.posts.map(renderPost)\r\n            }\r\n          &lt;/List&gt;\r\n          &lt;Text style={styles.end}&gt;{endMsg}&lt;/Text&gt;\r\n        &lt;/Content&gt;\r\n        &lt;Button\r\n          rounded\r\n          style={styles.button}\r\n          onPress={() =&gt; Actions.newPost()}\r\n        &gt;\r\n          &lt;Icon\r\n            name=&quot;create&quot;\r\n            style={{padding: 5}}\r\n          /&gt;\r\n        &lt;/Button&gt;\r\n      &lt;/Container&gt;\r\n    );\r\n  }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Feed);</pre></div><p>When the Feed layout mounts, we make a call to the Cosmic API to load all of the posts in our bucket onto our app state. The loadPostsfunction, in our posts reducer, looks like this:</p><div><pre class=\"prism\">export const loadPosts = () =&gt; dispatch =&gt; {\r\n  return axios.get(`https://api.cosmicjs.com/v1/${cosmicConfig.bucket.slug}/object-type/posts`)\r\n    .then(res =&gt; res.data.objects ? formatPosts(res.data.objects) : [])\r\n    .then(formattedPosts =&gt; formattedPosts.sort(postSorter))\r\n    .then(sortedPosts =&gt; dispatch(init(sortedPosts)))\r\n    .catch(err =&gt; console.error(`Could not load posts`, err));\r\n};</pre></div><p>We pull in all of the posts that are in our bucket, format them in a way that will make it easy to get the data that we want, and load them onto state. They are then displayed in the feed.</p><p>From the feed, users can click a button to make a new post. They are then taken to the NewPostlayout:</p><div><pre class=\"prism\">import React, { Component } from &#39;react&#39;;\r\nimport { connect } from &#39;react-redux&#39;;\r\nimport {\r\n  Container,\r\n  Content,\r\n  Text,\r\n  Button,\r\n} from &#39;native-base&#39;;\r\nimport { View } from &#39;react-native&#39;;\r\nimport TextField from &#39;../../components/TextField&#39;;\r\nimport styles from &#39;./styles&#39;;\r\n\r\nimport { createPost } from &#39;../../redux/reducers/posts&#39;;\r\n\r\nconst mapStateToProps = state =&gt; ({\r\n  user: state.user,\r\n})\r\n\r\nconst mapDispatchToProps = { createPost };\r\n\r\nclass NewPost extends Component {\r\n  constructor(){\r\n    super();\r\n    this.state = {\r\n      content: &#39;&#39;,\r\n      error: &#39;&#39;,\r\n    }\r\n  }\r\n  onSubmit() {\r\n    if (this.state.content){\r\n      this.props.createPost({\r\n        user: this.props.user,\r\n        content: this.state.content,\r\n      })\r\n    } else {\r\n      this.setState({error: &#39;You have to write something!&#39;});\r\n    }\r\n  }\r\n\r\n  render(){\r\n    return (\r\n      &lt;Container style={styles.container}&gt;\r\n        &lt;Content&gt;\r\n          &lt;Text style={styles.formMsg}&gt;{this.state.error}&lt;/Text&gt;\r\n          &lt;View style={styles.input}&gt;\r\n            &lt;TextField\r\n              big\r\n              name=&quot;What&#39;s up?&quot;\r\n              value={this.state.post}\r\n              onChangeText={(text) =&gt; this.setState({content: text})}\r\n            /&gt;\r\n            &lt;Button\r\n              rounded\r\n              style={styles.button}\r\n              onPress={() =&gt; this.onSubmit()}\r\n            &gt;\r\n              &lt;Text&gt;Post&lt;/Text&gt;\r\n            &lt;/Button&gt;\r\n          &lt;/View&gt;\r\n        &lt;/Content&gt;\r\n      &lt;/Container&gt;\r\n    );\r\n  }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(NewPost);</pre></div><p>When they submit their post, we will send it to our bucket:</p><div><pre class=\"prism\">export const createPost = post =&gt; dispatch =&gt; {\r\n  return axios.post(`https://api.cosmicjs.com/v1/${cosmicConfig.bucket.slug}/add-object`, {\r\n      title: post.user.username + &#39; post&#39;,\r\n      type_slug: &#39;posts&#39;,\r\n      content: post.content,\r\n      metafields: [\r\n        {\r\n          type: &#39;object&#39;,\r\n          title: &#39;User&#39;,\r\n          key: &#39;user&#39;,\r\n          object_type: &#39;users&#39;,\r\n          value: post.user.id\r\n        },\r\n      ]\r\n    })\r\n      .then(res =&gt; formatPost(res.data, post))\r\n      .then(formattedPost =&gt; dispatch(create(formattedPost)))\r\n      .then(() =&gt; Actions.feed({type: &#39;popAndReplace&#39;}))\r\n      .catch(error =&gt; console.error(&#39;Post unsuccessful&#39;, error))\r\n}</pre></div><p>and then redirect back to the feed which will pull in the updated list of posts. Users can also refresh their feed to see new posts and logout from the Feed.</p><h2>Conclusion</h2><p>We made a Twitter-like app using React Native which utilized the power of the Cosmic API to easily maintain all of the data for our users and posts. We were able to get up and running quickly with a few simple actions that POST and GET our data to/from\r\nour Cosmic Bucket.</p>","metafields":[{"object_type":"authors","value":"594a7d68aa75cb9c6000078f","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"594a7d68aa75cb9c6000078f","slug":"david-martin","title":"David Martin","content":"","metafields":[{"value":"d305d5a0-568a-11e7-9700-5ba5cd7a4f16-david.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/d305d5a0-568a-11e7-9700-5ba5cd7a4f16-david.jpeg","imgix_url":"https://imgix.cosmicjs.com/d305d5a0-568a-11e7-9700-5ba5cd7a4f16-david.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-06-21T14:06:32.593Z","created_by":"5357ef811693be2118000001","created":"2017-06-21T14:06:32.593Z","status":"published"}},{"value":"<p><span style='color: rgb(0, 0, 0); font-family: \"Open Sans\", sans-serif; font-size: 14px; text-align: start; background-color: rgb(255, 255, 255);'>In this tutorial, we&#39;re going to create a small Twitter-like mobile app using React Native. With our app, users will be able to create accounts and log in, see a feed of all of the posts created by themselves and other users, and add their own posts to the feed. The data for all of our users and posts will be managed by Cosmic.</span></p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"e7969310-568a-11e7-9700-5ba5cd7a4f16-react-native-twitter-clone.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e7969310-568a-11e7-9700-5ba5cd7a4f16-react-native-twitter-clone.png","imgix_url":"https://imgix.cosmicjs.com/e7969310-568a-11e7-9700-5ba5cd7a4f16-react-native-twitter-clone.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-06-21T14:04:53.480Z","created_by":"5357ef811693be2118000001","created":"2017-06-21T14:04:53.480Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"594a7d68aa75cb9c6000078f","slug":"david-martin","title":"David Martin","content":"","metafields":[{"value":"d305d5a0-568a-11e7-9700-5ba5cd7a4f16-david.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/d305d5a0-568a-11e7-9700-5ba5cd7a4f16-david.jpeg","imgix_url":"https://imgix.cosmicjs.com/d305d5a0-568a-11e7-9700-5ba5cd7a4f16-david.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-06-21T14:06:32.593Z","created_by":"5357ef811693be2118000001","created":"2017-06-21T14:06:32.593Z","status":"published","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/d305d5a0-568a-11e7-9700-5ba5cd7a4f16-david.jpeg","imgix_url":"https://imgix.cosmicjs.com/d305d5a0-568a-11e7-9700-5ba5cd7a4f16-david.jpeg"}}},"teaser":"<p><span style='color: rgb(0, 0, 0); font-family: \"Open Sans\", sans-serif; font-size: 14px; text-align: start; background-color: rgb(255, 255, 255);'>In this tutorial, we&#39;re going to create a small Twitter-like mobile app using React Native. With our app, users will be able to create accounts and log in, see a feed of all of the posts created by themselves and other users, and add their own posts to the feed. The data for all of our users and posts will be managed by Cosmic.</span></p>","featured_image":{"url":"https://cdn.cosmicjs.com/e7969310-568a-11e7-9700-5ba5cd7a4f16-react-native-twitter-clone.png","imgix_url":"https://imgix.cosmicjs.com/e7969310-568a-11e7-9700-5ba5cd7a4f16-react-native-twitter-clone.png"}}},{"_id":"59490fbb6dfe200e55000001","order":124,"slug":"introducing-cosmic-js-extensions","title":"Introducing Cosmic Extensions","content":"<p><a href=\"https://www.cosmicjs.com/docs/extensions\"><img src=\"https://cosmicjs.imgix.net/dbec7000-55b0-11e7-9725-3701f7db93c5-extensions-screenshot.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></a></p><p>We&rsquo;re excited to announce Extensions, a powerful new way to create custom experiences within Cosmic. &nbsp;With Cosmic Extensions, you can now build applications directly into your Bucket Dashboard giving you the power to create customized views and communicate with third party APIs to extend the functionality of Cosmic.<a href=\"https://www.cosmicjs.com/docs/extensions\"></a><br><a href=\"https://www.cosmicjs.com/docs/extensions\"></a><br><a href=\"https://www.cosmicjs.com/docs/extensions\">Check out the Extensions documentation</a>.<br><br>This is another step in providing you with the best way to collaborate to create amazing products. &nbsp;I hope you enjoy the new freedom you have to create and customize your Cosmic experience. &nbsp;Take a look through the <a href=\"https://www.cosmicjs.com/docs/extensions\">Cosmic Extensions documentation</a> for more information on how to get started. &nbsp; If you have any questions please <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\">join our community on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p><span style='color: rgb(0, 0, 0); font-family: \"Open Sans\", sans-serif; font-size: 14px; text-align: start; background-color: rgb(255, 255, 255);'>We&rsquo;re excited to announce Extensions, a powerful new way to create custom experiences using Cosmic. &nbsp;With Cosmic Extensions, you can now build applications directly into your Bucket Dashboard giving you the power to create customized views and communicate with third party APIs to extend the functionality of Cosmic.</span></p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"dbec7000-55b0-11e7-9725-3701f7db93c5-extensions-screenshot.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/dbec7000-55b0-11e7-9725-3701f7db93c5-extensions-screenshot.jpg","imgix_url":"https://imgix.cosmicjs.com/dbec7000-55b0-11e7-9725-3701f7db93c5-extensions-screenshot.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-06-20T12:06:19.714Z","created_by":"5357ef811693be2118000001","created":"2017-06-20T12:06:19.715Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p><span style='color: rgb(0, 0, 0); font-family: \"Open Sans\", sans-serif; font-size: 14px; text-align: start; background-color: rgb(255, 255, 255);'>We&rsquo;re excited to announce Extensions, a powerful new way to create custom experiences using Cosmic. &nbsp;With Cosmic Extensions, you can now build applications directly into your Bucket Dashboard giving you the power to create customized views and communicate with third party APIs to extend the functionality of Cosmic.</span></p>","featured_image":{"url":"https://cdn.cosmicjs.com/dbec7000-55b0-11e7-9725-3701f7db93c5-extensions-screenshot.jpg","imgix_url":"https://imgix.cosmicjs.com/dbec7000-55b0-11e7-9725-3701f7db93c5-extensions-screenshot.jpg"}}},{"_id":"593ef1c06c9cb18749000590","order":125,"slug":"developer-spotlight-brian-mullis","title":"Developer Spotlight: Brian Mullis","content":"<p><img src=\"https://www.cosmicjs.com/uploads/eda2db70-4fa9-11e7-a3cb-99e17c45d637-Screen Shot 2017-06-12 at 1.28.11 PM.png\" style=\"width: 100%\" class=\"fr-fic fr-dib\"></p><p>A new Developer Hero joins us in our latest installment of the Cosmic Developer Spotlight Series. We sat down with Brian Mullis, a developer working for an interactive agency in Portland. &nbsp;Check him out on <a href=\"https://github.com/bmullis\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>, and enjoy the Q/A.<br><br></p><p><strong>How long have you been building software?</strong></p><p>I have been building websites and applications for around 2 years now. Before learning web development I was in the Marines, did private security, and drove tractor trailers across the country. Though incredibly challenging, web development has seriously changed my life, and allowed me to pursue a career I never could have imagined.<br><br></p><p><strong>What is your preferred development stack?</strong></p><p>I learned development using a PHP/MySQL stack. However, lately I&rsquo;ve been more interested in building front end applications with React and Vue. The shift towards using language-agnostic API&rsquo;s to access data is interesting to me, and I plan on implementing it more in my future projects.<br><br></p><p><strong>What past projects are you most proud of and why?</strong></p><p>To be honest, I&rsquo;d have to pick some of my earlier projects where I was learning so much as I went, and creating things in ways nobody would recommend duplicating. I remember making some truly &ldquo;Frankenstein&rdquo; applications and getting them to work somehow, it was so much fun.<br><br></p><p><strong>We know you&rsquo;ve developed a lot in WordPress and are now going API-first. What&#39;s your process for building apps for your clients?&nbsp;</strong></p><p>I have been building WordPress sites for over a year at a small agency. As I became a better developer, I grew increasingly frustrated with WordPress. I prefer to develop locally with modern build tools, which means I&rsquo;m constantly syncing databases\r\nbetween my local server and development servers, and if that&rsquo;s not enough of a headache, trying to collaborate with another developer on a project is complete misery. One solution I toyed with was the &ldquo;headless WordPress&rdquo; approach, which\r\nis just using the WordPress API to deliver the content to a separate front end application. This worked to an extent, but it&rsquo;s really forcing the platform to behave in a way it wasn&rsquo;t intended to be used. This also adds unnecessary confusion\r\nfor the client.</p><p>This is where Cosmic picks up the ball and runs with it. The simple interface is perfect for clients, and familiar enough for them to feel comfortable editing content. Collaborating with a fellow developer is now so simple with the one-click deployments from our GitHub repositories. I will not miss the days of syncing WordPress databases across multiple environments. Cosmic has allowed me to create more efficient development processes that reduce headaches and time in getting products to market.<br><br></p><p><strong>What are some technologies you are excited about that you are using today, or want to learn more about?</strong></p><p>I&rsquo;m really enjoying React with Redux. It pairs perfectly with Cosmic as the backend, and allows me to create cool applications in a much shorter time-period.<br><br></p><p><span style=\"font-size: 18px;\">Cosmic Developer Spotlight Series</span></p><p><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-micah-walter\" rel=\"noopener noreferrer\" target=\"_blank\">Micah Walter</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-joe-tuson\" rel=\"noopener noreferrer\" target=\"_blank\">Joe Tuson</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-coding-dojo\" rel=\"noopener noreferrer\" target=\"_blank\">Coding Dojo</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-simple-media\" rel=\"noopener noreferrer\" target=\"_blank\">Simple Media</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-jon-kalfayan\" rel=\"noopener noreferrer\" target=\"_blank\">Jon Kalfayan</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-jon-bloomer\" rel=\"noopener noreferrer\" target=\"_blank\">Jon Bloomer</a></p><p><a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> is an API-first cloud-based content management platform that makes it easy to manage applications and content. If you have questions about the <a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic API</a>, please reach out to us on <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> or join the community on <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>A new Developer Hero joins us in our latest installment of the Cosmic Developer Spotlight Series. We sat down with Brian Mullis, a developer in Portland who &nbsp;lead the charge on innovative app development for his interactive agency.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"19fa4970-4fa9-11e7-9489-8de9c824ec3f-Screen Shot 2017-06-12 at 1.28.11 PM.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/19fa4970-4fa9-11e7-9489-8de9c824ec3f-Screen Shot 2017-06-12 at 1.28.11 PM.png","imgix_url":"https://imgix.cosmicjs.com/19fa4970-4fa9-11e7-9489-8de9c824ec3f-Screen Shot 2017-06-12 at 1.28.11 PM.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-06-12T19:55:44.869Z","created_by":"5716b504e9c686d006000073","created":"2017-06-12T19:55:44.869Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>A new Developer Hero joins us in our latest installment of the Cosmic Developer Spotlight Series. We sat down with Brian Mullis, a developer in Portland who &nbsp;lead the charge on innovative app development for his interactive agency.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/19fa4970-4fa9-11e7-9489-8de9c824ec3f-Screen Shot 2017-06-12 at 1.28.11 PM.png","imgix_url":"https://imgix.cosmicjs.com/19fa4970-4fa9-11e7-9489-8de9c824ec3f-Screen Shot 2017-06-12 at 1.28.11 PM.png"}}},{"_id":"5936a8b153c2013e6a000386","order":126,"slug":"how-to-build-an-angular-js-ecommerce-app","title":"How to Build an Angular JS Ecommerce App","content":"<p><img src=\"https://www.cosmicjs.com/uploads/1f2b0270-4b87-11e7-b06b-ad4450a81bf4-angular-js-ecommerce-app.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>In this tutorial I&#39;m going to show you how to create an ecommerce app using Angular JS and Cosmic. For the sake of understanding how to consume Restful API&rsquo;s, this tutorial will show how to make simple AJAX requests\r\nto the Cosmic API in order to retrieve, update, and delete ecommerce products and data in our Cosmic Bucket. &nbsp; At the end of this tutorial we will have a fully-functioning ecommerce website that can be deployed to begin accepting purchases through Stripe. &nbsp;Let&#39;s get started.</p><h2>TL;DR</h2><p><a href=\"https://www.cosmicjs.com/apps/ecommerce-app\" rel=\"noopener noreferrer\" target=\"_blank\">Check out the demo.</a><br><a href=\"https://github.com/cosmicjs/ecommerce-app\" rel=\"noopener noreferrer\" target=\"_blank\">Download the GitHub repo.</a><br><a href=\"https://www.cosmicjs.com/login\" rel=\"noopener noreferrer\" target=\"_blank\">Install the app and deploy in minutes.</a> (Go to Your Bucket &gt; Apps)</p><h2>Getting Started</h2><p>First, let&rsquo;s make a new directory to build our project in and lets also make a package.json file.</p><pre class=\"prism\">mkdir ecommerce-app</pre><pre class=\"prism\">ecommerce-app$ touch package.json</pre><p>Now, in your package.json, copy and paste the code below:</p><pre class=\"prism\">//ecommerce-app/package.json\r\n{\r\n  &quot;name&quot;: &quot;ecommerce-app&quot;,\r\n  &quot;version&quot;: &quot;1.0.0&quot;,\r\n  &quot;main&quot;: &quot;app-server.js&quot;,\r\n  &quot;engines&quot;: {\r\n    &quot;node&quot;: &quot;4.1.2&quot;,\r\n    &quot;npm&quot;: &quot;3.5.2&quot;\r\n  },\r\n  &quot;description&quot;: &quot;&quot;,\r\n  &quot;dependencies&quot;: {\r\n    &quot;bower&quot;: &quot;^1.7.7&quot;,\r\n    &quot;express&quot;: &quot;^4.13.3&quot;,\r\n    &quot;gulp&quot;: &quot;^3.9.1&quot;,\r\n    &quot;buffer-to-vinyl&quot;: &quot;^1.1.0&quot;,\r\n    &quot;gulp-autoprefixer&quot;: &quot;^3.1.0&quot;,\r\n    &quot;gulp-concat&quot;: &quot;^2.6.0&quot;,\r\n    &quot;gulp-concat-css&quot;: &quot;^2.2.0&quot;,\r\n    &quot;gulp-minify-css&quot;: &quot;^1.2.4&quot;,\r\n    &quot;gulp-ng-config&quot;: &quot;^1.4.0&quot;,\r\n    &quot;gulp-env&quot;: &quot;^0.4.0&quot;,\r\n    &quot;gulp-webserver&quot;: &quot;^0.9.1&quot;,\r\n    &quot;http-server&quot;: &quot;^0.9.0&quot;,\r\n    &quot;wiredep&quot;: &quot;^3.0.0&quot;,\r\n    &quot;gulp-npm-script-sync&quot;: &quot;^1.1.0&quot;\r\n  },\r\n  &quot;scripts&quot;: {\r\n    &quot;postinstall&quot;: &quot;bower install &amp;&amp; gulp config &amp;&amp; gulp js&quot;,\r\n    &quot;start&quot;: &quot;npm run production&quot;,\r\n    &quot;production&quot;: &quot;node app-server.js&quot;,\r\n    &quot;gulp&quot;: &quot;gulp&quot;\r\n  },\r\n  &quot;author&quot;: &quot;&quot;,\r\n  &quot;license&quot;: &quot;ISC&quot;,\r\n  &quot;devDependencies&quot;: {\r\n    &quot;gulp-npm-script-sync&quot;: &quot;^1.1.0&quot;,\r\n    &quot;gulp-remote-src&quot;: &quot;^0.4.2&quot;\r\n  }\r\n}\r\n            </pre><p>Second, let&rsquo;s make a bower.json file.</p><pre class=\"prism\">ecommerce-app$ touch bower.json</pre><p>Now, in your bower.json, copy and paste the code below:</p><pre class=\"prism\">//ecommerce-app/bower.json\r\n{\r\n  &quot;name&quot;: &quot;ecommerce-app&quot;,\r\n  &quot;description&quot;: &quot;Ecommerce App&quot;,\r\n  &quot;version&quot;: &quot;0.0.0&quot;,\r\n  &quot;homepage&quot;: &quot;https://github.com/kutsaniuk/ecommerce-app&quot;,\r\n  &quot;license&quot;: &quot;MIT&quot;,\r\n  &quot;private&quot;: true,\r\n  &quot;dependencies&quot;: {\r\n    &quot;angular&quot;: &quot;~1.4.x&quot;,\r\n    &quot;angular-mocks&quot;: &quot;~1.4.x&quot;,\r\n    &quot;angular-bootstrap&quot;: &quot;~1.1.x&quot;,\r\n    &quot;angular-cookies&quot;: &quot;~1.4.x&quot;,\r\n    &quot;angular-route&quot;: &quot;~1.4.x&quot;,\r\n    &quot;angular-ui-router&quot;: &quot;0.2.x&quot;,\r\n    &quot;angular-resource&quot;: &quot;1.4.x&quot;,\r\n    &quot;angular-animate&quot;: &quot;~1.4.x&quot;,\r\n    &quot;ng-dialog&quot;: &quot;0.6.1&quot;,\r\n    &quot;bootstrap&quot;: &quot;3.3.x&quot;,\r\n    &quot;cr-acl&quot;: &quot;&quot;,\r\n    &quot;angular-chosen-localytics&quot;: &quot;*&quot;,\r\n    &quot;bootstrap-chosen&quot;: &quot;*&quot;,\r\n    &quot;ng-flow&quot;: &quot;^2.7.4&quot;,\r\n    &quot;angular-mask&quot;: &quot;*&quot;,\r\n    &quot;checklist-model&quot;: &quot;0.9.0&quot;,\r\n    &quot;angular-ui-notification&quot;: &quot;^0.2.0&quot;,\r\n    &quot;angular-ui-calendar&quot;: &quot;^1.0.2&quot;,\r\n    &quot;angular-ui-switch&quot;: &quot;^0.1.1&quot;,\r\n    &quot;ng-scrollbars&quot;: &quot;^0.0.11&quot;,\r\n    &quot;jquery.scrollbar&quot;: &quot;*&quot;,\r\n    &quot;angular-nvd3&quot;: &quot;*&quot;,\r\n    &quot;infinity-angular-chosen&quot;: &quot;^0.2.0&quot;,\r\n    &quot;angular-flash-alert&quot;: &quot;^2.4.0&quot;,\r\n    &quot;components-font-awesome&quot;: &quot;^4.7.0&quot;,\r\n    &quot;textAngular&quot;: &quot;^1.5.16&quot;,\r\n    &quot;angular-loading-bar&quot;: &quot;^0.9.0&quot;,\r\n    &quot;angular-environment&quot;: &quot;^1.0.8&quot;,\r\n    &quot;angular-sticky&quot;: &quot;angular-sticky-plugin#^0.3.0&quot;\r\n  },\r\n  &quot;resolutions&quot;: {\r\n    &quot;angular&quot;: &quot;~1.4.x&quot;\r\n  },\r\n  &quot;devDependencies&quot;: {\r\n    &quot;cr-acl&quot;: &quot;^0.5.0&quot;\r\n  }\r\n}\r\n            </pre><p>Config app server:</p><pre class=\"prism\">ecommerce-app$ touch <a href=\"app-server.js\">app-server.js</a></pre><pre class=\"prism\">//events-app/app-server.js\r\nvar express = require(&#39;express&#39;);\r\nvar app = express();\r\napp.set(&#39;port&#39;, process.env.PORT || 3000)\r\napp.use(express.static(__dirname))\r\nvar http = require(&#39;http&#39;).Server(app)\r\napp.get(&#39;/&#39;, (req, res) =&gt; {\r\n  res.sendFile(__dirname + &#39;/index.html&#39;);\r\n})\r\nhttp.listen(app.get(&#39;port&#39;), () =&gt; {\r\n  console.log(&#39;Ecommerce App listening on &#39; + app.get(&#39;port&#39;))\r\n})\r\n            </pre><h2>What we&#39;re installing and why</h2><ol><li>We&#39;re going to use the AngularJS framework to build Single-page application</li><li>We&#39;re installing angular-ui-router for create multi views.</li><li>We are going to use gulp for build all js and css files into one file.</li></ol><h2>Building our app</h2><p>Now we&#39;re going to build out our file structure a bit more so that we can organize our angular modules and js files. This is what our ecommerce-app directory should look like:</p><pre class=\"prism\">ecommerce-app\r\n|----app\r\n|       |----auth\r\n|                 |----auth.ctrl.js\r\n|                 |----auth.service.js\r\n|       |----config\r\n|                 |----config.js\r\n|       |----watch\r\n|                 |----profile\r\n|                           |----watch.profile.ctrl.js\r\n|                           |----watch.profile.mdl.js\r\n|                 |----watch.ctrl.js\r\n|                 |----watch.mdl.js\r\n|                 |----watch.service.js\r\n|       |----admin\r\n|                 |----orders\r\n|                           |----preview\r\n|                                   |----admin.orders.preview.mdl.js\r\n|                           |----admin.orders.ctrl.js\r\n|                           |----admin.orders.mdl.js\r\n|                           |----admin.orders.service.js\r\n|                 |----watches\r\n|                           |----add\r\n|                                   |----admin.watches.add.ctrl.js\r\n|                                   |----admin.watches.add.mdl.js\r\n|                           |----edit\r\n|                                   |----admin.watches.edit.ctrl.js\r\n|                                   |----admin.watches.edit.mdl.js\r\n|                           |----admin.watches.mdl.js\r\n|                 |----admin.ctrl.js\r\n|                 |----admin.mdl.js\r\n|       |----cart\r\n|                 |----checkout\r\n|                           |----cart.checkout.mdl.js\r\n|                 |----cart.ctrl.js\r\n|                 |----cart.mdl.js\r\n|                 |----cart.service.js\r\n|       |----user\r\n|                 |----user.service.js\r\n|       |----main.mdl.js\r\n|----dist\r\n|       |----css\r\n|       |----img\r\n|       |----js\r\n|----css\r\n|----views\r\n|----gulpfile.js\r\n|----app-server.js\r\n|----bower.json\r\n|----package.json\r\n            </pre><p>Now we we will set up our index.html. Copy and paste the following code into your index.html file:</p><pre class=\"prism\">&lt;!DOCTYPE html&gt;\r\n&lt;html lang=&quot;en&quot; ng-app=&quot;main&quot;&gt;\r\n&lt;head&gt;\r\n    &lt;meta charset=&quot;utf-8&quot;&gt;\r\n    &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;\r\n    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;\r\n    &lt;meta name=&quot;description&quot; content=&quot;&quot;&gt;\r\n    &lt;meta name=&quot;author&quot; content=&quot;&quot;&gt;\r\n\r\n    &lt;title&gt;Ecommerce App&lt;/title&gt;\r\n\r\n    &lt;!-- bower:css --&gt;\r\n    &lt;!-- endbower --&gt;\r\n\r\n    &lt;!-- Bootstrap Core CSS --&gt;\r\n    &lt;link href=&quot;bower_components/bootstrap/dist/css/bootstrap.min.css&quot; rel=&quot;stylesheet&quot;&gt;\r\n\r\n    &lt;!-- Custom CSS --&gt;\r\n\r\n    &lt;link href=&quot;dist/css/main.min.css&quot; rel=&quot;stylesheet&quot;&gt;\r\n\r\n\r\n    <!-- HTML5 Shim and <a href=\"Respond.js\">Respond.js</a> IE8 support of HTML5 elements and media queries -->\r\n    <!-- WARNING: <a href=\"Respond.js\">Respond.js</a> doesn't work if you view the page via file:// -->\r\n    &lt;!--[if lt IE 9]&gt;\r\n    &lt;script src=&quot;https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js&quot;&gt;&lt;/script&gt;\r\n    &lt;script src=&quot;https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js&quot;&gt;&lt;/script&gt;\r\n    &lt;![endif]--&gt;\r\n\r\n&lt;/head&gt;\r\n&lt;body&gt;\r\n\r\n&lt;div ui-view&gt;&lt;/div&gt;\r\n\r\n&lt;!-- bower:js --&gt;\r\n&lt;!-- endbower --&gt;\r\n\r\n&lt;script src=&quot;dist/js/main.js&quot;&gt;&lt;/script&gt;\r\n&lt;/body&gt;\r\n&lt;/html&gt;\r\n            </pre><p>Here, we are going to target our &quot;root&quot; view to place our angular modules in later. The <a href=\"main.js\">main.js</a> file located in our dist directory is what our <a href=\"gulpfile.js\">gulpfile.js</a> file will spit out after bundling all of our angular modules Now, set up our <a href=\"gulpfile.js\">gulpfile.js</a> file to bundle all of our js files and export that bundle file to our dist directory. Copy the following code into your <a href=\"gulpfile.js\">gulpfile.js</a> file:</p><pre class=\"prism\">//ecommerce-app/gulpfile.js\r\n&#39;use strict&#39;;\r\n\r\nvar gulp = require(&#39;gulp&#39;),\r\n    webserver = require(&#39;gulp-webserver&#39;),\r\n    minifyCSS = require(&#39;gulp-minify-css&#39;),\r\n    concat = require(&#39;gulp-concat&#39;),\r\n    wiredep = require(&#39;wiredep&#39;).stream,\r\n    gulpNgConfig = require(&#39;gulp-ng-config&#39;),\r\n    autoprefixer = require(&#39;gulp-autoprefixer&#39;),\r\n    b2v = require(&#39;buffer-to-vinyl&#39;),\r\n    sync = require(&#39;gulp-npm-script-sync&#39;);\r\n\r\nsync(gulp);\r\n\r\ngulp.task(&#39;css&#39;, function () {\r\n  return gulp.src(&#39;css/**/*.css&#39;)\r\n    .pipe(minifyCSS())\r\n    .pipe(concat(&#39;main.min.css&#39;))\r\n    .pipe(autoprefixer())\r\n    .pipe(gulp.dest(&#39;dist/css&#39;));\r\n});\r\n\r\ngulp.task(&#39;js&#39;, function() {\r\n    return gulp.src(&#39;app/**/**/*.js&#39;)\r\n        .pipe(concat(&#39;main.js&#39;))\r\n        .pipe(gulp.dest(&#39;dist/js/&#39;));\r\n});\r\n\r\ngulp.task(&#39;config&#39;, function () {\r\n    const json = JSON.stringify({\r\n        BUCKET_SLUG: process.env.COSMIC_BUCKET,\r\n        MEDIA_URL: &#39;https://api.cosmicjs.com/v1/&#39; + process.env.COSMIC_BUCKET + &#39;/media&#39;,\r\n        URL: &#39;https://api.cosmicjs.com/v1/&#39;,\r\n        READ_KEY: process.env.COSMIC_READ_KEY || &#39;&#39;,\r\n        WRITE_KEY: process.env.COSMIC_WRITE_KEY || &#39;&#39;\r\n    });\r\n    return b2v.stream(new Buffer(json), &#39;config.js&#39;)\r\n        .pipe(gulpNgConfig(&#39;config&#39;))\r\n        .pipe(gulp.dest(&#39;app/config&#39;));\r\n});\r\n\r\ngulp.task(&#39;default&#39;, function () {\r\n  gulp.watch(&#39;css/**/*.css&#39;, [&#39;css&#39;]);\r\n  gulp.watch(&#39;app/**/**/*.js&#39;, [&#39;js&#39;]);\r\n  gulp.watch(&#39;bower.json&#39;, [&#39;bower&#39;]);\r\n});\r\n\r\ngulp.task(&#39;bower&#39;, function () {\r\n  gulp.src(&#39;index.html&#39;)\r\n    .pipe(wiredep({\r\n      directory: &#39;bower_components&#39;\r\n    }))\r\n    .pipe(gulp.dest(&#39;&#39;));\r\n});\r\n            </pre><p>After that we can create main module. Copy and paste the following code into your index.html file:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;, [\r\n            &#39;ui.router&#39;,\r\n            &#39;ui.bootstrap&#39;,\r\n            &#39;ngMask&#39;,\r\n            &#39;ngCookies&#39;,\r\n            &#39;ngRoute&#39;,\r\n            &#39;ngDialog&#39;,\r\n            &#39;cr.acl&#39;,\r\n            &#39;ui-notification&#39;,\r\n            &#39;ngFlash&#39;,\r\n            &#39;textAngular&#39;,\r\n            &#39;flow&#39;,\r\n            &#39;angular-loading-bar&#39;,\r\n            &#39;hl.sticky&#39;,\r\n\r\n            &#39;watch&#39;,\r\n            &#39;cart&#39;,\r\n            &#39;admin&#39;,\r\n\r\n            &#39;config&#39;\r\n        ])\r\n        .config(config)\r\n        .run(run);\r\n\r\n    config.$inject = [&#39;$stateProvider&#39;, &#39;$urlRouterProvider&#39;, &#39;cfpLoadingBarProvider&#39;, &#39;NotificationProvider&#39;];\r\n    function config($stateProvider, $urlRouterProvider, cfpLoadingBarProvider, NotificationProvider) {\r\n        cfpLoadingBarProvider.includeSpinner = false;\r\n\r\n        NotificationProvider.setOptions({\r\n            startTop: 25,\r\n            startRight: 25,\r\n            verticalSpacing: 20,\r\n            horizontalSpacing: 20,\r\n            positionX: &#39;right&#39;,\r\n            positionY: &#39;bottom&#39;\r\n        });\r\n\r\n        $urlRouterProvider.otherwise(function ($injector) {\r\n            var $state = $injector.get(&quot;$state&quot;);\r\n            var $location = $injector.get(&quot;$location&quot;);\r\n            var crAcl = $injector.get(&quot;crAcl&quot;);\r\n\r\n            var state = &quot;&quot;;\r\n\r\n            switch (crAcl.getRole()) {\r\n                case &#39;ROLE_ADMIN&#39;:\r\n                    state = &#39;admin.watches&#39;;\r\n                    break;\r\n                default : state = &#39;main.watch&#39;;\r\n            }\r\n\r\n            if (state) $state.go(state);\r\n            else $location.path(&#39;/&#39;);\r\n        });\r\n\r\n        $stateProvider\r\n            .state(&#39;main&#39;, {\r\n                url: &#39;/&#39;,\r\n                abstract: true,\r\n                templateUrl: &#39;../views/main.html&#39;,\r\n                controller: &#39;CartCtrl as cart&#39;,\r\n                data: {\r\n                    is_granted: [&#39;ROLE_GUEST&#39;]\r\n                }\r\n            })\r\n            .state(&#39;blog&#39;, {\r\n                url: &#39;/blog&#39;,\r\n                templateUrl: &#39;../blog.html&#39;\r\n            })\r\n            .state(&#39;auth&#39;, {\r\n                url: &#39;/login&#39;,\r\n                templateUrl: &#39;../views/auth/login.html&#39;,\r\n                controller: &#39;AuthCtrl as auth&#39;,\r\n                onEnter: [&#39;AuthService&#39;, &#39;crAcl&#39;, function(AuthService, crAcl) {\r\n                    AuthService.clearCredentials();\r\n                    crAcl.setRole();\r\n                }],\r\n                data: {\r\n                    is_granted: [&#39;ROLE_GUEST&#39;]\r\n                }\r\n            });\r\n    }\r\n\r\n    run.$inject = [&#39;$rootScope&#39;, &#39;$cookieStore&#39;, &#39;$state&#39;, &#39;crAcl&#39;];\r\n    function run($rootScope, $cookieStore, $state, crAcl) {\r\n        // keep user logged in after page refresh\r\n        $rootScope.globals = $cookieStore.get(&#39;globals&#39;) || {};\r\n\r\n        crAcl\r\n            .setInheritanceRoles({\r\n                &#39;ROLE_ADMIN&#39;: [&#39;ROLE_ADMIN&#39;, &#39;ROLE_GUEST&#39;],\r\n                &#39;ROLE_GUEST&#39;: [&#39;ROLE_GUEST&#39;]\r\n            });\r\n\r\n        crAcl\r\n            .setRedirect(&#39;main.watch&#39;);\r\n\r\n        if ($rootScope.globals.currentUser) {\r\n            crAcl.setRole($rootScope.globals.currentUser.metadata.role);\r\n            // $state.go(&#39;admin.watches&#39;);\r\n        }\r\n        else {\r\n            crAcl.setRole();\r\n        }\r\n\r\n    }\r\n\r\n})();\r\n             </pre><p>Now we we will set up our Auth Controller. Copy and paste the following code into your <a href=\"auth.ctrl.js\">auth.ctrl.js</a> file:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .controller(&#39;AuthCtrl&#39;, AuthCtrl);\r\n\r\n    function AuthCtrl(crAcl, $state, AuthService, Flash, $log) {\r\n        var vm = this;\r\n\r\n        vm.login = login;\r\n\r\n        vm.showRegisterForm = false;\r\n\r\n        vm.loginForm = null;\r\n\r\n        vm.credentials = {};\r\n        vm.user = {};\r\n\r\n        function login(credentials) {\r\n            function success(response) {\r\n                function success(response) {\r\n                    if (response.data.status !== &#39;empty&#39;) {\r\n                        var currentUser = response.data.objects[0];\r\n\r\n                        crAcl.setRole(currentUser.metadata.role);\r\n                        AuthService.setCredentials(currentUser);\r\n                        $state.go(&#39;admin.watches&#39;);\r\n                    }\r\n                    else\r\n                        Flash.create(&#39;danger&#39;, &#39;Incorrect username or password&#39;);\r\n                }\r\n\r\n                function failed(response) {\r\n                    $log.error(response);\r\n                }\r\n\r\n                if (response.data.status !== &#39;empty&#39;)\r\n                    AuthService\r\n                        .checkPassword(credentials)\r\n                        .then(success, failed);\r\n                else\r\n                    Flash.create(&#39;danger&#39;, &#39;Incorrect username or password&#39;);\r\n\r\n                $log.info(response);\r\n            }\r\n\r\n            function failed(response) {\r\n                $log.error(response);\r\n            }\r\n\r\n            if (vm.loginForm.$valid)\r\n                AuthService\r\n                    .checkUsername(credentials)\r\n                    .then(success, failed);\r\n        }\r\n\r\n    }\r\n})();\r\n            </pre><p>Create Auth Service, copy and paste the code below:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .service(&#39;AuthService&#39;, function ($http,\r\n                                          $cookieStore,\r\n                                          $q,\r\n                                          $rootScope,\r\n                                          URL, BUCKET_SLUG, READ_KEY, WRITE_KEY) {\r\n            var authService = this;\r\n            $http.defaults.headers.common[&#39;X-Requested-With&#39;] = &#39;XMLHttpRequest&#39;;\r\n\r\n            authService.checkUsername = function (credentials) {\r\n                return $http.get(URL + BUCKET_SLUG + &#39;/object-type/users/search&#39;, {\r\n                    params: {\r\n                        metafield_key: &#39;email&#39;,\r\n                        metafield_value_has: credentials.email,\r\n                        limit: 1,\r\n                        read_key: READ_KEY\r\n                    }\r\n                });\r\n            };\r\n            authService.checkPassword = function (credentials) {\r\n                return $http.get(URL + BUCKET_SLUG + &#39;/object-type/users/search&#39;, {\r\n                    ignoreLoadingBar: true,\r\n                    params: {\r\n                        metafield_key: &#39;password&#39;,\r\n                        metafield_value: credentials.password,\r\n                        limit: 1,\r\n                        read_key: READ_KEY\r\n                    }\r\n                });\r\n            };\r\n            authService.setCredentials = function (user) {\r\n                $rootScope.globals = {\r\n                    currentUser: user\r\n                };\r\n\r\n                $cookieStore.put(&#39;globals&#39;, $rootScope.globals);\r\n            };\r\n            authService.clearCredentials = function () {\r\n                var deferred = $q.defer();\r\n                $cookieStore.remove(&#39;globals&#39;);\r\n\r\n                if (!$cookieStore.get(&#39;globals&#39;)) {\r\n                    $rootScope.globals = {};\r\n                    deferred.resolve(&#39;Credentials clear success&#39;);\r\n                } else {\r\n                    deferred.reject(&#39;Can\\&#39;t clear credentials&#39;);\r\n                }\r\n\r\n                return deferred.promise;\r\n            };\r\n        });\r\n})();\r\n            </pre><h2>What&#39;s going on here</h2><ol><li>We are using the ui-router for config routes.</li><li>We created Auth Service for our asynchronous calls to our Cosmic API.</li><li>We created Auth Controller for checking credentials.</li></ol><p>Create User Service for get and update User, copy and paste the code below:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .service(&#39;UserService&#39;, function ($http,\r\n                                          $cookieStore,\r\n                                          $q,\r\n                                          $rootScope,\r\n                                          URL, BUCKET_SLUG, READ_KEY, WRITE_KEY) {\r\n            $http.defaults.headers.common[&#39;X-Requested-With&#39;] = &#39;XMLHttpRequest&#39;;\r\n\r\n            this.getCurrentUser = function (ignoreLoadingBar) {\r\n                return $http.get(URL + BUCKET_SLUG + &#39;/object/&#39; + $rootScope.globals.currentUser.slug, {\r\n                    ignoreLoadingBar: ignoreLoadingBar,\r\n                    params: {\r\n                        read_key: READ_KEY\r\n                    }\r\n                });\r\n            };\r\n            this.getUser = function (slug, ignoreLoadingBar) {\r\n                return $http.get(URL + BUCKET_SLUG + &#39;/object/&#39; + slug, {\r\n                    ignoreLoadingBar: ignoreLoadingBar,\r\n                    params: {\r\n                        read_key: READ_KEY\r\n                    }\r\n                });\r\n            };\r\n            this.updateUser = function (user) {\r\n                user.write_key = WRITE_KEY;\r\n\r\n                return $http.put(URL + BUCKET_SLUG + &#39;/edit-object&#39;, user, {\r\n                    ignoreLoadingBar: false\r\n                });\r\n            };\r\n\r\n        });\r\n})();\r\n            </pre><p>Create Watch Service for get, update, add delete Watches from Cosmic API, copy and paste the code below:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .service(&#39;WatchService&#39;, function ($http,\r\n                                          $cookieStore,\r\n                                          $q,\r\n                                          $rootScope,\r\n                                          URL, BUCKET_SLUG, READ_KEY, WRITE_KEY, MEDIA_URL) {\r\n\r\n            $http.defaults.headers.common[&#39;X-Requested-With&#39;] = &#39;XMLHttpRequest&#39;;\r\n\r\n            this.watch = {\r\n                title: null,\r\n                type_slug: &#39;watches&#39;,\r\n                content: null,\r\n                metafields: [\r\n                    {\r\n                        key: &quot;category&quot;,\r\n                        title: &quot;Category&quot;,\r\n                        type: &quot;text&quot;,\r\n                        value: null\r\n                    },\r\n                    {\r\n                        key: &quot;brand&quot;,\r\n                        title: &quot;Brand&quot;,\r\n                        type: &quot;text&quot;,\r\n                        value: null\r\n                    },\r\n                    {\r\n                        key: &quot;case_size&quot;,\r\n                        title: &quot;Case Size&quot;,\r\n                        type: &quot;text&quot;,\r\n                        value: null\r\n                    },\r\n                    {\r\n                        key: &quot;case_thickness&quot;,\r\n                        title: &quot;Case Thickness&quot;,\r\n                        type: &quot;text&quot;,\r\n                        value: null\r\n                    },\r\n                    {\r\n                        key: &quot;strap_width&quot;,\r\n                        title: &quot;Strap Width&quot;,\r\n                        type: &quot;text&quot;,\r\n                        value: null\r\n                    },\r\n                    {\r\n                        key: &quot;movement&quot;,\r\n                        title: &quot;Movement&quot;,\r\n                        type: &quot;text&quot;,\r\n                        value: null\r\n                    },\r\n                    {\r\n                        key: &quot;glass&quot;,\r\n                        title: &quot;Glass&quot;,\r\n                        type: &quot;text&quot;,\r\n                        value: null\r\n                    },\r\n                    {\r\n                        key: &quot;water_resistance&quot;,\r\n                        title: &quot;Water Resistance&quot;,\r\n                        type: &quot;text&quot;,\r\n                        value: null\r\n                    },\r\n                    {\r\n                        key: &quot;color&quot;,\r\n                        title: &quot;Color&quot;,\r\n                        type: &quot;text&quot;,\r\n                        value: null\r\n                    },\r\n                    {\r\n                        key: &quot;strap_material&quot;,\r\n                        title: &quot;Strap Material&quot;,\r\n                        type: &quot;text&quot;,\r\n                        value: null\r\n                    },\r\n                    {\r\n                        key: &quot;price&quot;,\r\n                        title: &quot;Price&quot;,\r\n                        type: &quot;text&quot;,\r\n                        value: null\r\n                    },\r\n                    {\r\n                        key: &quot;images&quot;,\r\n                        title: &quot;Images&quot;,\r\n                        type: &quot;parent&quot;,\r\n                        value: &quot;&quot;,\r\n                        children: [\r\n                            {\r\n                                key: &quot;image_1&quot;,\r\n                                title: &quot;Image_1&quot;,\r\n                                type: &quot;file&quot;\r\n                            },\r\n                            {\r\n                                key: &quot;image_2&quot;,\r\n                                title: &quot;Image_2&quot;,\r\n                                type: &quot;file&quot;\r\n                            },\r\n                            {\r\n                                key: &quot;image_3&quot;,\r\n                                title: &quot;Image_3&quot;,\r\n                                type: &quot;file&quot;\r\n                            }\r\n                        ]\r\n                    }\r\n                ]\r\n            };\r\n\r\n            this.getWatches = function (params) {\r\n                if (!angular.equals({}, params))\r\n                    return $http.get(URL + BUCKET_SLUG + &#39;/object-type/watches/search&#39;, {\r\n                        params: {\r\n                            metafield_key: params.key,\r\n                            metafield_value_has: params.value,\r\n                            limit: 100,\r\n                            read_key: READ_KEY\r\n                        }\r\n                    });\r\n                else\r\n                    return $http.get(URL + BUCKET_SLUG + &#39;/object-type/watches&#39;, {\r\n                        params: {\r\n                            limit: 100,\r\n                            read_key: READ_KEY\r\n                        }\r\n                    });\r\n            };\r\n            this.getWatchesParams = function () {\r\n                return $http.get(URL + BUCKET_SLUG + &#39;/object-type/watches&#39;, {\r\n                    params: {\r\n                        limit: 100,\r\n                        read_key: READ_KEY\r\n                    }\r\n                });\r\n            };\r\n            this.getWatchBySlug = function (slug) {\r\n                return $http.get(URL + BUCKET_SLUG + &#39;/object/&#39; + slug, {\r\n                    params: {\r\n                        read_key: READ_KEY\r\n                    }\r\n                });\r\n            };\r\n            this.updateWatch = function (event) {\r\n                event.write_key = WRITE_KEY;\r\n\r\n                return $http.put(URL + BUCKET_SLUG + &#39;/edit-object&#39;, event);\r\n            };\r\n            this.removeWatch = function (slug) {\r\n                return $http.delete(URL + BUCKET_SLUG + &#39;/&#39; + slug, {\r\n                    ignoreLoadingBar: true,\r\n                    headers:{\r\n                        &#39;Content-Type&#39;: &#39;application/json&#39;\r\n                    },\r\n                    data: {\r\n                        write_key: WRITE_KEY\r\n                    }\r\n                });\r\n            };\r\n            this.createWatch = function (watch) {\r\n                watch.write_key = WRITE_KEY;\r\n\r\n                return $http.post(URL + BUCKET_SLUG + &#39;/add-object&#39;, watch);\r\n            };\r\n            this.upload = function (file) {\r\n                var fd = new FormData();\r\n\r\n                fd.append(&#39;media&#39;, file);\r\n                fd.append(&#39;write_key&#39;, WRITE_KEY);\r\n\r\n                var defer = $q.defer();\r\n\r\n                var xhttp = new XMLHttpRequest();\r\n\r\n                xhttp.upload.addEventListener(&quot;progress&quot;,function (e) {\r\n                    defer.notify(parseInt(e.loaded * 100 / e.total));\r\n                });\r\n                xhttp.upload.addEventListener(&quot;error&quot;,function (e) {\r\n                    defer.reject(e);\r\n                });\r\n\r\n                xhttp.onreadystatechange = function() {\r\n                    if (xhttp.readyState === 4) {\r\n                        defer.resolve(JSON.parse(xhttp.response)); //Outputs a DOMString by default\r\n                    }\r\n                };\r\n\r\n                xhttp.open(&quot;post&quot;, MEDIA_URL, true);\r\n\r\n                xhttp.send(fd);\r\n\r\n                return defer.promise;\r\n            }\r\n        });\r\n})();\r\n            </pre><p>Create Watch Controller for get all events and remove, copy and paste the code below:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .controller(&#39;WatchCtrl&#39;, WatchCtrl);\r\n\r\n    function WatchCtrl($stateParams, WatchService, Notification, $log, MEDIA_URL, $state) {\r\n        var vm = this;\r\n\r\n        vm.getWatches = getWatches;\r\n        vm.removeWatch = removeWatch;\r\n\r\n        vm.params = $stateParams;\r\n\r\n        vm.categories = [];\r\n        vm.brands = [];\r\n        vm.case_sizes = [];\r\n        vm.colors = [];\r\n\r\n        vm.watches = [];\r\n\r\n        function getWatches() {\r\n            function success(response) {\r\n                $log.info(response);\r\n\r\n                vm.watches = response.data.objects;\r\n\r\n            }\r\n\r\n            function failed(response) {\r\n                $log.error(response);\r\n            }\r\n\r\n            function params(response) {\r\n                response.data.objects.forEach(function (item) {\r\n                    if (vm.categories.indexOf(item.metadata.category) === -1)\r\n                        vm.categories.push(item.metadata.category);\r\n                    if (vm.brands.indexOf(item.metadata.brand) === -1)\r\n                        vm.brands.push(item.metadata.brand);\r\n                    if (vm.case_sizes.indexOf(item.metadata.case_size) === -1)\r\n                        vm.case_sizes.push(item.metadata.case_size);\r\n                    if (vm.colors.indexOf(item.metadata.color) === -1)\r\n                        vm.colors.push(item.metadata.color)\r\n                });\r\n            }\r\n\r\n            WatchService\r\n                .getWatches($stateParams)\r\n                .then(success, failed);\r\n\r\n            WatchService\r\n                .getWatchesParams()\r\n                .then(params);\r\n        }\r\n\r\n        function removeWatch(slug) {\r\n            function success(response) {\r\n                $log.info(response);\r\n                getWatches();\r\n                Notification.success(&#39;Removed!&#39;);\r\n            }\r\n\r\n            function failed(response) {\r\n                $log.error(response);\r\n            }\r\n\r\n            WatchService\r\n                .removeWatch(slug)\r\n                .then(success, failed);\r\n\r\n        }\r\n\r\n    }\r\n})();\r\n            </pre><p>Create Watch Module, copy and paste the code below:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;watch&#39;, [\r\n            &#39;watch.profile&#39;\r\n        ])\r\n        .config(config);\r\n\r\n    config.$inject = [&#39;$stateProvider&#39;, &#39;$urlRouterProvider&#39;];\r\n    function config($stateProvider, $urlRouterProvider) {\r\n\r\n        $stateProvider\r\n            .state(&#39;main.watch&#39;, {\r\n                url: &#39;?key&amp;value&#39;,\r\n                templateUrl: &#39;../views/watch/watch.list.html&#39;,\r\n                controller: &#39;WatchCtrl as vm&#39;\r\n            });\r\n    }\r\n})();\r\n            </pre><h2>What&#39;s going on here</h2><ol><li>We created Watch Service for our asynchronous calls to our Cosmic API. We can create, update, remove and getting Watches.</li><li>We created Watch Controller for getting all watches and remove.</li><li>We created Watch Module.</li></ol><p>Create Watch Profile Controller for getting watch information, copy and paste the code below:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .controller(&#39;WatchProfileCtrl&#39;, WatchProfileCtrl);\r\n\r\n    function WatchProfileCtrl(UserService, $stateParams, WatchService, Notification, $log, MEDIA_URL, $state) {\r\n        var vm = this;\r\n\r\n        vm.getWatch = getWatch;\r\n\r\n        function getWatch() {\r\n            function success(response) {\r\n                $log.info(response);\r\n                vm.watch = response.data.object;\r\n            }\r\n\r\n            function failed(response) {\r\n                $log.error(response);\r\n            }\r\n\r\n            WatchService\r\n                .getWatchBySlug($stateParams.slug)\r\n                .then(success, failed);\r\n        }\r\n\r\n    }\r\n})();\r\n\r\n            </pre><p>Create Watch Profile Module, copy and paste the code below:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;watch.profile&#39;, [])\r\n        .config(config);\r\n\r\n    config.$inject = [&#39;$stateProvider&#39;, &#39;$urlRouterProvider&#39;];\r\n    function config($stateProvider, $urlRouterProvider) {\r\n\r\n        $stateProvider\r\n            .state(&#39;main.watch.profile&#39;, {\r\n                url: &#39;watches/:slug&#39;,\r\n                views: {\r\n                    &#39;@main&#39;: {\r\n                        templateUrl: &#39;../views/watch/watch.profile.html&#39;,\r\n                        controller: &#39;WatchProfileCtrl as vm&#39;\r\n                    }\r\n                }\r\n            });\r\n    }\r\n\r\n})();</pre><p>Create Cart Controller, copy and paste the code below:</p><pre class=\"prism\">    (function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .controller(&#39;CartCtrl&#39;, CartCtrl);\r\n\r\n    function CartCtrl(CartService, WatchService, Notification, $log, MEDIA_URL, $state) {\r\n        var vm = this;\r\n\r\n        vm.addToCart = addToCart;\r\n        vm.getCart = getCart;\r\n        vm.hasInCart = hasInCart;\r\n        vm.removeFromCart = removeFromCart;\r\n        vm.completeOrder = completeOrder;\r\n\r\n        vm.cart = {};\r\n        vm.cart.order = {};\r\n        vm.watches = [];\r\n        vm.totalPrice = 0;\r\n        vm.orderForm = null;\r\n\r\n        function addToCart(item) {\r\n            function success(response) {\r\n                Notification.success(response);\r\n                getCart();\r\n\r\n            }\r\n\r\n            function failed(response) {\r\n                Notification.error(response);\r\n            }\r\n\r\n            CartService\r\n                .addToCart(item)\r\n                .then(success, failed);\r\n\r\n        }\r\n\r\n        function completeOrder(order) {\r\n            order.watches = vm.watches;\r\n\r\n            function success(response) {\r\n                Notification.success(&#39;Success&#39;);\r\n\r\n            }\r\n\r\n            function failed(response) {\r\n                Notification.error(response.data.message);\r\n            }\r\n\r\n            if (vm.orderForm)\r\n                CartService\r\n                    .completeOrder(order)\r\n                    .then(success, failed);\r\n        }\r\n\r\n        function removeFromCart(_id) {\r\n            function success(response) {\r\n                Notification.success(response);\r\n                getCart();\r\n            }\r\n\r\n            function failed(response) {\r\n                Notification.error(response);\r\n            }\r\n\r\n            CartService\r\n                .removeFromCart(_id)\r\n                .then(success, failed);\r\n\r\n        }\r\n\r\n        function hasInCart(_id) {\r\n            return CartService.hasInCart(_id);\r\n        }\r\n\r\n        function getCart() {\r\n            function success(response) {\r\n                vm.cart = response;\r\n                getWatches();\r\n\r\n                $log.info(response);\r\n            }\r\n\r\n            function failed(response) {\r\n                $log.error(response);\r\n            }\r\n\r\n            CartService\r\n                .getCart()\r\n                .then(success, failed);\r\n\r\n        }\r\n\r\n        function getWatches() {\r\n            function success(response) {\r\n                $log.info(response);\r\n\r\n                vm.watches = [];\r\n                vm.totalPrice = 0;\r\n\r\n                for (var _id in vm.cart)\r\n                    response.data.objects.forEach(function (item) {\r\n                        if (item._id === _id) {\r\n                            vm.watches.push(item);\r\n                            vm.totalPrice += item.metadata.price;\r\n                        }\r\n                    });\r\n\r\n            }\r\n\r\n            function failed(response) {\r\n                $log.error(response);\r\n            }\r\n\r\n            WatchService\r\n                .getWatches({})\r\n                .then(success, failed);\r\n\r\n        }\r\n    }\r\n})();</pre><p>Create Cart Service, copy and paste the code below:</p><pre class=\"prism\">    (function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .service(&#39;CartService&#39;, function ($http,\r\n                                          $cookieStore,\r\n                                          $q,\r\n                                          $rootScope,\r\n                                          URL, BUCKET_SLUG, READ_KEY, WRITE_KEY) {\r\n            var that = this;\r\n            $http.defaults.headers.common[&#39;X-Requested-With&#39;] = &#39;XMLHttpRequest&#39;;\r\n\r\n            that.addToCart = function (item) {\r\n                var deferred = $q.defer();\r\n\r\n                var cart = $cookieStore.get(&#39;cart&#39;);\r\n                cart = cart ? cart : {};\r\n\r\n                if (!(item._id in cart)) {\r\n                    cart[item._id] = item._id;\r\n\r\n                    $cookieStore.put(&#39;cart&#39;, cart);\r\n\r\n                    deferred.resolve(&#39;Added to cart&#39;);\r\n                } else {\r\n                    deferred.reject(&#39;Error: Can\\&#39;t added to cart&#39;);\r\n                }\r\n\r\n                return deferred.promise;\r\n            };\r\n\r\n            that.getCart = function () {\r\n                var deferred = $q.defer();\r\n                var cart = $cookieStore.get(&#39;cart&#39;);\r\n\r\n                if (cart) {\r\n                    deferred.resolve(cart);\r\n                } else {\r\n                    deferred.reject(&#39;Error: Can\\&#39;t get cart&#39;);\r\n                }\r\n\r\n                return deferred.promise;\r\n            };\r\n\r\n            that.removeFromCart = function (_id) {\r\n                var deferred = $q.defer();\r\n\r\n                var cart = $cookieStore.get(&#39;cart&#39;);\r\n                cart = cart ? cart : {};\r\n\r\n                if (_id in cart) {\r\n                    delete cart[_id];\r\n\r\n                    $cookieStore.put(&#39;cart&#39;, cart);\r\n\r\n                    deferred.resolve(&#39;Removed from cart&#39;);\r\n                } else {\r\n                    deferred.reject(&#39;Error: Can\\&#39;t remove from cart&#39;);\r\n                }\r\n\r\n                return deferred.promise;\r\n            };\r\n\r\n            that.hasInCart = function (_id) {\r\n                var cart = $cookieStore.get(&#39;cart&#39;);\r\n                cart = cart ? cart : {};\r\n\r\n                return _id in cart;\r\n            };\r\n\r\n            that.completeOrder = function (order) {\r\n                var watches = [];\r\n\r\n                order.watches.forEach(function (item) {\r\n                    watches.push(item._id);\r\n                });\r\n\r\n                return $http.post(URL + BUCKET_SLUG + &#39;/add-object/&#39;, {\r\n                    write_key: WRITE_KEY,\r\n                    title: order.firstName + &#39; &#39; + order.lastName,\r\n                    type_slug: &quot;orders&quot;,\r\n                    metafields: [\r\n                        {\r\n                            key: &quot;first_name&quot;,\r\n                            type: &quot;text&quot;,\r\n                            value: order.firstName\r\n\r\n                        },\r\n                        {\r\n                            key: &quot;last_name&quot;,\r\n                            type: &quot;text&quot;,\r\n                            value: order.lastName\r\n\r\n                        },\r\n                        {\r\n                            key: &quot;address&quot;,\r\n                            type: &quot;text&quot;,\r\n                            value: order.address\r\n\r\n                        },\r\n                        {\r\n                            key: &quot;city&quot;,\r\n                            type: &quot;text&quot;,\r\n                            value: order.city\r\n\r\n                        },\r\n                        {\r\n                            key: &quot;phone&quot;,\r\n                            type: &quot;text&quot;,\r\n                            value: order.phone\r\n\r\n                        },\r\n                        {\r\n                            key: &quot;postal_code&quot;,\r\n                            type: &quot;text&quot;,\r\n                            value: order.postalCode\r\n\r\n                        },\r\n                        {\r\n                            key: &quot;email&quot;,\r\n                            type: &quot;text&quot;,\r\n                            value: order.email\r\n                        },\r\n                        {\r\n                            key: &quot;watches&quot;,\r\n                            type: &quot;objects&quot;,\r\n                            object_type: &quot;watches&quot;,\r\n                            value: watches.join()\r\n                        }\r\n                    ]\r\n                });\r\n            };\r\n        });\r\n})();</pre><p>Create Cart Module, copy and paste the code below:</p><pre class=\"prism\">    (function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;cart&#39;, [\r\n            &#39;cart.checkout&#39;\r\n        ])\r\n        .config(config);\r\n\r\n    config.$inject = [&#39;$stateProvider&#39;, &#39;$urlRouterProvider&#39;];\r\n    function config($stateProvider, $urlRouterProvider) {\r\n\r\n        $stateProvider\r\n            .state(&#39;main.cart&#39;, {\r\n                url: &#39;cart&#39;,\r\n                templateUrl: &#39;../views/cart/cart.html&#39;\r\n            });\r\n    }\r\n})();</pre><h2>What&#39;s going on here</h2><ol><li>We can see information about watches.</li><li>We can adding watches to cart.</li></ol><h2>Next Steps</h2><p><a href=\"https://www.cosmicjs.com/apps/ecommerce-app\" rel=\"noopener noreferrer\" target=\"_blank\">Deploy this app in minutes from Cosmic</a>. &nbsp;After you deploy, you can set your Stripe keys as environment variables by going to Your Bucket &gt; Deploy\r\nWeb App &gt; Set Environment Variables. &nbsp;Begin adding products and charging users for your goods! I hope you enjoyed this tutorial as much as I did, if you have any questions <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a>and <a href=\"https://www.cosmicjs.com/community\">join our community on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5914999aa57d9d4b390034d5","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5914999aa57d9d4b390034d5","slug":"dmytro-kutsaniuk","title":"Dmytro Kutsaniuk","content":"","metafields":[{"value":"e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg","imgix_url":"https://imgix.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-11T17:04:26.061Z","created_by":"5357ef811693be2118000001","created":"2017-05-11T17:04:26.061Z","status":"published"}},{"value":"<p>In this tutorial I&#39;m going to show you how to create a &quot;Ecommerce&quot; app using a little bit of Node, and Cosmic. For the sake of understanding how to consume Restful API&rsquo;s, this tutorial will show how to make simple AJAX requests to the Cosmic API in order to retrieve, update, and delete data in our Cosmic buckets. Let&#39;s get started.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"1f2b0270-4b87-11e7-b06b-ad4450a81bf4-angular-js-ecommerce-app.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/1f2b0270-4b87-11e7-b06b-ad4450a81bf4-angular-js-ecommerce-app.png","imgix_url":"https://imgix.cosmicjs.com/1f2b0270-4b87-11e7-b06b-ad4450a81bf4-angular-js-ecommerce-app.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-06-06T13:05:53.490Z","created_by":"5357ef811693be2118000001","created":"2017-06-06T13:05:53.490Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5914999aa57d9d4b390034d5","slug":"dmytro-kutsaniuk","title":"Dmytro Kutsaniuk","content":"","metafields":[{"value":"e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg","imgix_url":"https://imgix.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-11T17:04:26.061Z","created_by":"5357ef811693be2118000001","created":"2017-05-11T17:04:26.061Z","status":"published","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg","imgix_url":"https://imgix.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg"}}},"teaser":"<p>In this tutorial I&#39;m going to show you how to create a &quot;Ecommerce&quot; app using a little bit of Node, and Cosmic. For the sake of understanding how to consume Restful API&rsquo;s, this tutorial will show how to make simple AJAX requests to the Cosmic API in order to retrieve, update, and delete data in our Cosmic buckets. Let&#39;s get started.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/1f2b0270-4b87-11e7-b06b-ad4450a81bf4-angular-js-ecommerce-app.png","imgix_url":"https://imgix.cosmicjs.com/1f2b0270-4b87-11e7-b06b-ad4450a81bf4-angular-js-ecommerce-app.png"}}},{"_id":"5936fca1ee1080c26a0005c7","order":127,"slug":"how-to-build-a-facebook-bot-app-using-nodejs","title":"How to Build a Facebook Bot App Using Node.js","content":"<p><img src=\"https://www.cosmicjs.com/uploads/cf007360-4aec-11e7-86b9-030f138f68e4-Screen Shot 2017-06-06 at 2.17.15 PM.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><h3>TL;DR</h3><p><a href=\"https://github.com/cosmicjs/facebook-bot\" rel=\"noopener noreferrer\" target=\"_blank\">View the source code on GitHub</a>.</p><p>The process of building your messenger bot is fairly simple the hardest part is setting up your machine to talk to Facebook. That&#39;s why today I&#39;m going to walk you through that real quick. Once it is all done you can get right on the way\r\nto creating your own bot.</p><h3>Installing The Project</h3><p>Go to folder where you would like the project to be and run.</p><div><pre class=\"prism\">git clone <a href=\"https://github.com/cosmicjs/facebook-bot\">https://github.com/cosmicjs/facebook-bot</a>\r\ncd facebook-bot\r\nyarn install</pre></div><p>One more thing! Inside of your index.js file remove everything after line 38. We&#39;ll go back in and add that later. It should look like this.</p><div><pre class=\"prism\">const express = require(&#39;express&#39;)\r\nconst bodyParser = require(&#39;body-parser&#39;)\r\nconst request = require(&#39;request&#39;)\r\nconst app = express()\r\nconst Cosmic = require(&#39;cosmicjs&#39;)\r\nconst BootBot = require(&#39;bootbot&#39;)\r\nrequire(&#39;dotenv&#39;).config()\r\nconst chrono = require(&#39;chrono-node&#39;)\r\nvar schedule = require(&#39;node-schedule&#39;)\r\nconst EventEmitter = require(&#39;events&#39;).EventEmitter\r\n\r\nvar config = {}\r\n\r\nconst reminders = []\r\n\r\nconst eventEmitter = new EventEmitter()\r\n\r\napp.set(&#39;port&#39;, (process.env.PORT || 5000))\r\napp.use(bodyParser.urlencoded({extended: false}))\r\napp.use(bodyParser.json())\r\n\r\napp.get(&#39;/&#39;, function(req, res) {\r\n  res.send(&quot;hey there boi&quot;)\r\n})\r\n\r\napp.get(&#39;/webhook/&#39;, function(req, res) {\r\n  if (req.query[&#39;hub.verify_token&#39;] === process.env.VERIFY_TOKEN){\r\n    return res.send(req.query[&#39;hub.challenge&#39;])\r\n  }\r\n  res.send(&#39;wrong token&#39;)\r\n})\r\n\r\napp.listen(app.get(&#39;port&#39;), function(){\r\n  console.log(&#39;Started on port&#39;, app.get(&#39;port&#39;))\r\n})</pre></div><p>This will only start the express server and prevent us from getting errors before we get a chance to start. See the line of code that says &#39;process.env.APP_SECRET&#39; this is an environmental variable. There are a few ways you can set these up but\r\nfor now we&#39;ll use my favorite method the &#39;env&#39; package.</p><p>Create a file to store all of your variables.</p><div><pre class=\"prism\">touch .env</pre></div><p>This allows us to store are variables in plain text and clean up the start command. For example mine looks like this. I removed all the sensitive code.</p><pre class=\"prism\">APP_SECRET=&#39;some secret string of numbers and letters&#39;\r\nACCESS_TOKEN=&#39;some secret string of numbers&#39;\r\nVERIFY_TOKEN=&#39;DogLover49&#39;</pre><p>We will fill in APP_SECRET and ACCESS_TOKEN later but for now make sure that you have something in the VERIFY_TOKEN field. It can be anything at all. For the sake of this example I used DogLover49.</p><h3>Starting Your Application</h3><p>Now your going to need to start your application for the next part to work. Open two seperate terminal windows inside of your application root folder.</p><div><pre class=\"prism\">npm run start</pre></div><p>Run this first and keep it running. Now in the next terminal window we will install and setup local tunnel.</p><p>Local Tunnel is a nice little utility that takes a port you specify and routes it to the outside world by giving it a secure web address. We&#39;ll just have to install it real quick.</p><div><pre class=\"prism\">npm install -g localtunnel</pre></div><p>All you need to do now is run.</p><div><pre class=\"prism\">lt --port 3000 --subdomain &lt;domainpick&gt;</pre></div><p>It should return this.</p><div><pre class=\"prism\">your url is: https://&lt;domainpick&gt;.<a href=\".localtunnel.me\">localtunnel.me</a></pre></div><p>This starts a tunnel that gives your machine a url for Facebook to look for. Whenever you start the application make sure that you start it before you initiate local tunnel or else it won&#39;t find the port and return errors.</p><h3>Facebook Dev Panel Time</h3><p>First thing you need to do is create a new application. Go to the <a href=\"https://developers.facebook.com/apps/\" rel=\"noopener noreferrer\" target=\"_blank\">Facebook Developer Panel</a> and create a new app. Once your inside under &#39;Add Product&#39; find the Messenger section and click on &#39;get started&#39;. <img src=\"https://camo.githubusercontent.com/17c3f5dfbb8f63a12eede382e01e5724c263a79a/68747470733a2f2f692e696d6775722e636f6d2f473051334764552e706e67\" alt=\"facebook panel when you get started.\" data-canonical-src=\"https://i.imgur.com/G0Q3GdU.png\" style=\"background-color: rgb(255, 255, 255);\" class=\"fr-fic fr-dii\">After that you&#39;ll need to click on the settings tab which will pop up right after. Scroll down until you see this. <img src=\"https://camo.githubusercontent.com/72e7ed4bd129900d834946e00d22e16f4da10928/68747470733a2f2f692e696d6775722e636f6d2f464b42627074392e706e67\" alt=\"after creating messenger addon\" data-canonical-src=\"https://i.imgur.com/FKBbpt9.png\" style=\"background-color: rgb(255, 255, 255);\" class=\"fr-fic fr-dii\">There are two important sections to note here &#39;Token Generation&#39; and &#39;Webhooks&#39;. The first one we are going to touch on is token generation. Select a Facebook page your going to use this will be the account you send a message to. <img src=\"https://camo.githubusercontent.com/a056befae88c0147fc721ccfc25252187d26fe63/68747470733a2f2f692e696d6775722e636f6d2f58683952776f6d2e706e67\" alt=\"p\" data-canonical-src=\"https://i.imgur.com/Xh9Rwom.png\" style=\"background-color: rgb(255, 255, 255);\" class=\"fr-fic fr-dii\">After you picked a page from the drop down it will generate a page access token. You can now go back and add this to your\r\n.env file. Once that is done we are going to change our focus to the webhooks.</p><p>Once you click on the button that says &#39;setup webhooks&#39; you will see this. It may seem scary at first but don&#39;t worry. <img src=\"https://camo.githubusercontent.com/3807b81e548ce7cfa020e2767b242957f92dd0d3/68747470733a2f2f692e696d6775722e636f6d2f7a7874314d6d672e706e67\" alt=\"scary webooks. SPOOOKY\" data-canonical-src=\"https://i.imgur.com/zxt1Mmg.png\" style=\"background-color: rgb(255, 255, 255);\" class=\"fr-fic fr-dii\">&nbsp;</p><p>The only subscription fields you need to select are messages, messaging_postbacks, messaging_optins, and message_deliveries. Now for the verification token field. Do you remember the variable you created in your .env file under VERIFY_TOKEN? That is exactly what you want to put inside the box in this modal. For the callback url use the url from local tunnel and add &#39;/webhook&#39; to the end for me that would be <a href=\"https://noahsmessengerbog.localtunnel.me/webhook.\">https://noahsmessengerbog.localtunnel.me/webhook.</a>If you filled in the fields correctly it should look something like this. <img src=\"https://camo.githubusercontent.com/6b6feaca0c3d2d16ae023e6a430a6e1ca38af14f/68747470733a2f2f692e696d6775722e636f6d2f754631355468332e706e67\" alt=\"enter image description here\" data-canonical-src=\"https://i.imgur.com/uF15Th3.png\" style=\"background-color: rgb(255, 255, 255);\" class=\"fr-fic fr-dii\">&nbsp;</p><p>Now go back to your application and make sure that is is running and you are also forwarding the url. Double check the url and make sure it&#39;s the same thing as shown in the callback url field.</p><p>Once it is all running successfully you can click &#39;verify and save&#39; this will have Facebook send a request to the callback url and expect you to return the correct item from a json object.</p><p>At this point you should have almost all of the items you need inside of the .env file except for the App Secret. This can be easily found by going to your dashboard.</p><h2>The Bot Comes Next</h2><p>Remeber how earlier we removed everything after line 38? Now you can go and paste it back in. It should match this file exactly. When that is all done we can go over the code and learn just how it works. It should look like this.</p><div><pre class=\"prism\">const express = require(&#39;express&#39;)\r\nconst bodyParser = require(&#39;body-parser&#39;)\r\nconst request = require(&#39;request&#39;)\r\nconst app = express()\r\nconst Cosmic = require(&#39;cosmicjs&#39;)\r\nconst BootBot = require(&#39;bootbot&#39;)\r\nrequire(&#39;dotenv&#39;).config()\r\nconst chrono = require(&#39;chrono-node&#39;)\r\nvar schedule = require(&#39;node-schedule&#39;)\r\nconst EventEmitter = require(&#39;events&#39;).EventEmitter\r\n\r\nvar config = {}\r\n\r\nconst reminders = []\r\n\r\nconst eventEmitter = new EventEmitter()\r\n\r\napp.set(&#39;port&#39;, (process.env.PORT || 5000))\r\napp.use(bodyParser.urlencoded({extended: false}))\r\napp.use(bodyParser.json())\r\n\r\napp.get(&#39;/&#39;, function(req, res) {\r\n  res.send(&quot;hey there boi&quot;)\r\n})\r\n\r\napp.get(&#39;/webhook/&#39;, function(req, res) {\r\n  if (req.query[&#39;hub.verify_token&#39;] === process.env.VERIFY_TOKEN){\r\n    return res.send(req.query[&#39;hub.challenge&#39;])\r\n  }\r\n  res.send(&#39;wrong token&#39;)\r\n})\r\n\r\napp.listen(app.get(&#39;port&#39;), function(){\r\n  console.log(&#39;Started on port&#39;, app.get(&#39;port&#39;))\r\n})\r\n\r\n\r\nconst bot = new BootBot({\r\n  accessToken: process.env.ACCESS_TOKEN,\r\n  verifyToken: process.env.VERIFY_TOKEN,\r\n  appSecret: process.env.APP_SECRET\r\n})\r\n\r\nbot.setGreetingText(&quot;Hello, I&#39;m here to help you manage your tasks. Be sure to setup your bucket by typing &#39;Setup&#39;. &quot;)\r\n\r\nbot.setGetStartedButton((payload, chat) =&gt; {\r\n  if(config.bucket === undefined){\r\n    chat.say(&#39;Hello my name is Note Buddy and I can help you keep track of your thoughts&#39;)\r\n    chat.say(&quot;It seems like you have not setup your bucket settings yet. That has to be done before you can do anything else. Make sure to type &#39;setup&#39;&quot;)\r\n  }\r\n  BotUserId = <a href=\"payload.sender.id\">payload.sender.id</a>\r\n});\r\n\r\nbot.hear(&#39;setup&#39;, (payload, chat) =&gt; {\r\n  const getBucketSlug = (convo) =&gt; {\r\n    convo.ask(&quot;What&#39;s your buckets slug?&quot;, (payload, convo) =&gt; {\r\n      var slug = payload.message.text;\r\n      convo.set(&#39;slug&#39;, slug)\r\n      convo.say(&quot;setting slug as &quot;+slug).then(() =&gt; getBucketReadKey(convo));\r\n    })\r\n  }\r\n  const getBucketReadKey = (convo) =&gt; {\r\n    convo.ask(&quot;What&#39;s your buckets read key?&quot;, (payload, convo) =&gt; {\r\n      var readkey = payload.message.text;\r\n      convo.set(&#39;read_key&#39;, readkey)\r\n      convo.say(&#39;setting read_key as &#39;+readkey).then(() =&gt; getBucketWriteKey(convo))\r\n    })\r\n  }\r\n  const getBucketWriteKey = (convo) =&gt; {\r\n    convo.ask(&quot;What&#39;s your buckets write key?&quot;, (payload, convo) =&gt; {\r\n      var writekey = payload.message.text\r\n      convo.set(&#39;write_key&#39;, writekey)\r\n      convo.say(&#39;setting write_key as &#39;+writekey).then(() =&gt; finishing(convo))\r\n    })\r\n  }\r\n  const finishing = (convo) =&gt; {\r\n    var newConfigInfo = {\r\n      slug: convo.get(&#39;slug&#39;),\r\n      read_key: convo.get(&#39;read_key&#39;),\r\n      write_key: convo.get(&#39;write_key&#39;)\r\n    }\r\n    config.bucket = newConfigInfo\r\n    convo.say(&#39;All set :)&#39;)\r\n    convo.end();\r\n  }\r\n  \r\n  chat.conversation((convo) =&gt; {\r\n    getBucketSlug(convo)\r\n  })\r\n})\r\n\r\nbot.hear([&#39;hello&#39;, &#39;hey&#39;, &#39;sup&#39;], (payload, chat)=&gt;{\r\n  chat.getUserProfile().then((user) =&gt; {\r\n    chat.say(`Hey ${user.first_name}, How are you today?`)\r\n  })\r\n})\r\n\r\nbot.hear(&#39;config&#39;, (payloadc, hat) =&gt; {\r\n  if(JSON.stringify(config.bucket) === undefined){\r\n    chat.say(&quot;No config found :/ Be sure to run &#39;setup&#39; to add your bucket details&quot;)\r\n  }\r\n  chat.say(&quot;A config has been found :) &quot;+ JSON.stringify(config.bucket))\r\n})\r\n\r\nbot.hear(&#39;create&#39;, (payload, chat) =&gt; {\r\n  chat.conversation((convo) =&gt; {\r\n    convo.ask(&quot;What would you like your reminder to be? etc &#39;I have an appointment tomorrow from 10 to 11 AM&#39; the information will be added automatically&quot;, (payload, convo) =&gt; {\r\n      datetime = chrono.parseDate(payload.message.text)\r\n      var params = {\r\n        write_key: config.bucket.write_key,\r\n        type_slug: &#39;reminders&#39;,\r\n        title: payload.message.text,\r\n        metafields: [\r\n         {\r\n           key: &#39;date&#39;,\r\n           type: &#39;text&#39;,\r\n           value: datetime\r\n         }\r\n        ]\r\n      }\r\n      Cosmic.addObject(config, params, function(error, response){\r\n        if(!error){\r\n          eventEmitter.emit(&#39;new&#39;, response.object.slug, datetime)\r\n          convo.say(&quot;reminder added correctly :)&quot;)\r\n          convo.end()\r\n        } else {\r\n          convo.say(&quot;there seems to be a problem. . .&quot;)\r\n          convo.end()\r\n        }\r\n      })\r\n    })\r\n  })\r\n})\r\n\r\nbot.hear(&#39;active&#39;, (payload, chat) =&gt; {\r\n  chat.say(&#39;finding all of your ongoing reminders.&#39;)\r\n})\r\n\r\neventEmitter.on(&#39;new&#39;, function(itemSlug, time) {\r\n  schedule.scheduleJob(time, function(){\r\n    Cosmic.getObject(config, {slug: itemSlug}, function(error, response){\r\n      if(response.object.metadata.date == new Date(time).toISOString()){\r\n        bot.say(BotUserId, response.object.title)\r\n        console.log(&#39;firing reminder&#39;)\r\n      } else {\r\n        eventEmitter.emit(&#39;new&#39;, response.object.slug, response.object.metafield.date.value)\r\n        console.log(&#39;times do not match checking again at &#39;+response.object.metadata.date)\r\n      }\r\n    })\r\n  })\r\n})\r\n\r\nbot.start()</pre></div><p>This bot comes with a few interactions to get us off the ground. Each one is completely seperate from the others so you can remove and modify them as you wish. I left it as bare as possible for this purpose. Let&#39;s take a look at them.</p><div><pre class=\"prism\">const bot = new BootBot({\r\n  accessToken: process.env.ACCESS_TOKEN,\r\n  verifyToken: process.env.VERIFY_TOKEN,\r\n  appSecret: process.env.APP_SECRET\r\n}) // 1\r\n\r\nbot.setGreetingText(&quot;Hello, I&#39;m here to help you manage your tasks. Be sure to setup your bucket by typing &#39;Setup&#39;. &quot;) // 2\r\n\r\nbot.setGetStartedButton((payload, chat) =&gt; {\r\n  if(config.bucket === undefined){\r\n    chat.say(&#39;Hello my name is Note Buddy and I can help you keep track of your thoughts&#39;)\r\n    chat.say(&quot;It seems like you have not setup your bucket settings yet. That has to be done before you can do anything else. Make sure to type &#39;setup&#39;&quot;)\r\n  }\r\n  BotUserId = <a href=\"payload.sender.id\">payload.sender.id</a>\r\n}); // 3</pre></div><ol><li>This creates an object that talks to the bootbot npm package. This allows us to use webhooks and such things.</li><li>This shows you a nice little message before you decide to message the Facebook page.</li><li>Creates a get started button as a barrier to entry before you message the bot. It also checks if you have setup the bucket config information yet. This is done later on by calling a certain command. You can also modify it so It is hardwired with your\r\nbucket information.</li></ol><div><pre class=\"prism\">bot.hear(&#39;setup&#39;, (payload, chat) =&gt; { // 1&nbsp;\r\n  const getBucketSlug = (convo) =&gt; { // 2\r\n    convo.ask(&quot;What&#39;s your buckets slug?&quot;, (payload, convo) =&gt; {\r\n      var slug = payload.message.text;\r\n      convo.set(&#39;slug&#39;, slug) // 3\r\n      convo.say(&quot;setting slug as &quot;+slug).then(() =&gt; getBucketReadKey(convo)); // 3&nbsp;\r\n    })\r\n  }\r\n  const getBucketReadKey = (convo) =&gt; {\r\n    convo.ask(&quot;What&#39;s your buckets read key?&quot;, (payload, convo) =&gt; {\r\n      var readkey = payload.message.text;\r\n      convo.set(&#39;read_key&#39;, readkey)\r\n      convo.say(&#39;setting read_key as &#39;+readkey).then(() =&gt; getBucketWriteKey(convo))\r\n    })\r\n  }\r\n  const getBucketWriteKey = (convo) =&gt; {\r\n    convo.ask(&quot;What&#39;s your buckets write key?&quot;, (payload, convo) =&gt; {\r\n      var writekey = payload.message.text\r\n      convo.set(&#39;write_key&#39;, writekey)\r\n      convo.say(&#39;setting write_key as &#39;+writekey).then(() =&gt; finishing(convo))\r\n    })\r\n  }\r\n  const finishing = (convo) =&gt; {\r\n    var newConfigInfo = {\r\n      slug: convo.get(&#39;slug&#39;),\r\n      read_key: convo.get(&#39;read_key&#39;),\r\n      write_key: convo.get(&#39;write_key&#39;)\r\n    } \r\n    config.bucket = newConfigInfo // 4\r\n    convo.say(&#39;All set :)&#39;)\r\n    convo.end();\r\n  }\r\n  \r\n  chat.conversation((convo) =&gt; {\r\n    getBucketSlug(convo) // 5\r\n  })\r\n})</pre></div><ol><li>This initiates a function that listens for specific keywords. Here we are listening for &#39;setup&#39; but it can be changed to be anything. It can even accept regex statements.</li><li>Creates a function that can be called later to start the chain.</li><li>Takes what you send as an answer and sets that to a slug value that can be called in this instance of the conversation. If you started another conversation later in a separate instance this value would not be remembered.</li><li>Now we are starting to finish up the setup process with our final touches. First thing we have to do is get all of the information together. Right here we are grabbing all of the info by calling &#39;convo.get&#39;. Then we add it to the config object\r\ndeclared earlier.</li><li>This is where everything starts. We start the conversation and start passing the convo value around.</li></ol><div><pre class=\"prism\">bot.hear([&#39;hello&#39;, &#39;hey&#39;, &#39;sup&#39;], (payload, chat)=&gt;{\r\n  chat.getUserProfile().then((user) =&gt; {\r\n    chat.say(`Hey ${user.first_name}, How are you today?`)\r\n  })\r\n})</pre></div><p>Here we are utilizing the &#39;bot.hear&#39; method and being friendly to the user. Remember earlier when I said you can use regex to listen for user input? You can also use an array of specific words! When the user says &#39;hello&#39; we grab there\r\nprofile information from Facebook and greet them by name. It may seem weird at first but I promise robots knowing your name is normal.</p><div><pre class=\"prism\">bot.hear(&#39;create&#39;, (payload, chat) =&gt; {\r\n  chat.conversation((convo) =&gt; { \r\n    convo.ask(&quot;What would you like your reminder to be? etc &#39;I have an appointment tomorrow from 10 to 11 AM&#39; the information will be added automatically&quot;, (payload, convo) =&gt; { // 1\r\n      datetime = chrono.parseDate(payload.message.text) // 2\r\n      var params = {\r\n        write_key: config.bucket.write_key,\r\n        type_slug: &#39;reminders&#39;,\r\n        title: payload.message.text,\r\n        metafields: [\r\n         {\r\n           key: &#39;date&#39;,\r\n           type: &#39;text&#39;,\r\n           value: datetime\r\n         }\r\n        ]\r\n      } // 3\r\n      Cosmic.addObject(config, params, function(error, response){ // 4\r\n        if(!error){\r\n          eventEmitter.emit(&#39;new&#39;, response.object.slug, datetime) //5\r\n          convo.say(&quot;reminder added correctly :)&quot;)\r\n          convo.end()\r\n        } else {\r\n          convo.say(&quot;there seems to be a problem. . .&quot;)\r\n          convo.end()\r\n        }\r\n      })\r\n    })\r\n  })\r\n})</pre></div><ol><li>Inside of the conversation we ask the user a question and wait for the reply.</li><li>Now we take what the user said and parse it using<a href=\"https://github.com/wanasit/chrono\" rel=\"noopener noreferrer\" target=\"_blank\">&nbsp;Chrono, a natural date parsing package</a>.</li><li>We build the params object to be used with the Cosmic Object addition.</li><li>Now we take the Cosmic package and insert our new object using the params we created earlier.</li><li>Here we are sending a nodejs event emitter passing the slug from the return and the datetime we created earlier.</li></ol><div><pre class=\"prism\">bot.hear(&#39;help&#39;, (payload, chat) =&gt; {\r\n  chat.say(&#39;Here are the following commands for use.&#39;)\r\n  chat.say(&quot;&#39;create&#39;: add a new reminder&quot;)\r\n  chat.say(&quot;&#39;setup&#39;: add your bucket info such as slug and write key&quot;)\r\n  chat.say(&quot;&#39;config&#39;: lists your current bucket config&quot;)\r\n})</pre></div><p>This will return a series of messages telling you what you can and can&#39;t do with the bot.</p><div><pre class=\"prism\">eventEmitter.on(&#39;new&#39;, function(itemSlug, time) { // 1\r\n  schedule.scheduleJob(time, function(){ // 2\r\n    Cosmic.getObject(config, {slug: itemSlug}, function(error, response){ // 3\r\n      if(response.object.metadata.date == new Date(time).toISOString()){ // 4\r\n        bot.say(BotUserId, response.object.title) // 5\r\n        console.log(&#39;firing reminder&#39;)\r\n      } else {\r\n        eventEmitter.emit(&#39;new&#39;, response.object.slug, response.object.metafield.date.value) // 6\r\n        console.log(&#39;times do not match checking again at &#39;+response.object.metadata.date)\r\n      }\r\n    })\r\n  })\r\n})</pre></div><p>Now we are playing with event emitters these are neat functions provided by NodeJS out of the box. They work almost like calling functions but they are way more versatile. 6. We create an event emitter that listens for the new event to be passed. 7. Now\r\nwe use the schedule package and tell it to wait unitl the time you passed earlier. 8. Next we call cosmicjs and grab the specific object you just created. 9. Now we take the response and compare it to the time you passed originally if the time changed\r\nwe then send it back to the event emitter and check again at the changed time. 10. here we call the event emitter again.</p><p>If you did everything correctly you should be able to start the bot up by typing in a few commands.</p><div><pre class=\"prism\">npm run start</pre></div><p>Now in a different terminal window</p><div><pre class=\"prism\">npm run forward</pre></div><p>This will use local tunnel to let your application talk to Facebook. Now you can modify this as much as you want and it should work just like you want it to. Now that you have your notes saved to the Cosmic API, you can retrieve them and send them to any connected application. &nbsp;Thanks for reading, if you have any questions <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\">join the Slack community</a>.</p>","metafields":[{"object_type":"authors","value":"5905fe6a710a2188470004a5","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5905fe6a710a2188470004a5","slug":"noah-vaillancourt","title":"Noah Vaillancourt","content":"","metafields":[{"value":"2664e120-2db7-11e7-826f-f34de0199ac5-noah-vaillancourt.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2664e120-2db7-11e7-826f-f34de0199ac5-noah-vaillancourt.jpeg","imgix_url":"https://imgix.cosmicjs.com/2664e120-2db7-11e7-826f-f34de0199ac5-noah-vaillancourt.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-04-30T15:10:34.252Z","created_by":"5357ef811693be2118000001","created":"2017-04-30T15:10:34.252Z","status":"published"}},{"value":"<p>The process of building your messenger bot is fairly simple the hardest part is setting up your machine to talk to talk to Facebook. That&#39;s why today I&#39;m going to walk you through that real quick. Once it is all done you can get right on the way to creating your own bot.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"cf007360-4aec-11e7-86b9-030f138f68e4-Screen Shot 2017-06-06 at 2.17.15 PM.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/cf007360-4aec-11e7-86b9-030f138f68e4-Screen Shot 2017-06-06 at 2.17.15 PM.png","imgix_url":"https://imgix.cosmicjs.com/cf007360-4aec-11e7-86b9-030f138f68e4-Screen Shot 2017-06-06 at 2.17.15 PM.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-06-06T19:04:01.376Z","created_by":"5357ef811693be2118000001","created":"2017-06-06T19:04:01.377Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5905fe6a710a2188470004a5","slug":"noah-vaillancourt","title":"Noah Vaillancourt","content":"","metafields":[{"value":"2664e120-2db7-11e7-826f-f34de0199ac5-noah-vaillancourt.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2664e120-2db7-11e7-826f-f34de0199ac5-noah-vaillancourt.jpeg","imgix_url":"https://imgix.cosmicjs.com/2664e120-2db7-11e7-826f-f34de0199ac5-noah-vaillancourt.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-04-30T15:10:34.252Z","created_by":"5357ef811693be2118000001","created":"2017-04-30T15:10:34.252Z","status":"published","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/2664e120-2db7-11e7-826f-f34de0199ac5-noah-vaillancourt.jpeg","imgix_url":"https://imgix.cosmicjs.com/2664e120-2db7-11e7-826f-f34de0199ac5-noah-vaillancourt.jpeg"}}},"teaser":"<p>The process of building your messenger bot is fairly simple the hardest part is setting up your machine to talk to talk to Facebook. That&#39;s why today I&#39;m going to walk you through that real quick. Once it is all done you can get right on the way to creating your own bot.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/cf007360-4aec-11e7-86b9-030f138f68e4-Screen Shot 2017-06-06 at 2.17.15 PM.png","imgix_url":"https://imgix.cosmicjs.com/cf007360-4aec-11e7-86b9-030f138f68e4-Screen Shot 2017-06-06 at 2.17.15 PM.png"}}},{"_id":"59305ad5744ba22d080000ab","order":128,"slug":"api-updates-authentication-add-buckets-and-more","title":"API Updates: Authentication, Add Buckets and More","content":"<p><img src=\"https://cosmicjs.imgix.net/52d84b70-46f8-11e7-a70a-89b9eb3609ed-cloud-api.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>Cosmic is on a mission to help you build apps faster. &nbsp;With this goal in mind, we&#39;re happy to announce some additions to our API that will help you manage your application content faster and easier, right from the <a href=\"https://www.cosmicjs.com/docs\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic API</a>.</p><p name=\"3d5d\">We&rsquo;ve added new endpoints to the API which include:<br>1. User Authentication<br>2. Add Buckets to your account<br>3. Add / Edit / Delete Object Types in your Bucket<br>4. Add Media to a folder in your Bucket<br><a data-href=\"https://www.cosmicjs.com/docs\" href=\"https://www.cosmicjs.com/docs\" rel=\"noopener noreferrer noopener noopener\" target=\"_blank\">Check out the Docs page</a> for all of the new additions to the API.<br><br></p><p><strong>Authentication</strong><br>Have you ever wanted to access your account from the API and create new Buckets from the comfort of your own application? &nbsp;Well now you can thanks to the new <code>POST /authenticate</code> endpoint. &nbsp;Simply add your Cosmic email and password, get your token, then begin performing account-specific tasks from the API. &nbsp;Currently this only includes Bucket creation, but we plan to open up more features for account management soon.</p><p><code>POST /authenticate</code></p><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 43, 45); text-align: left;'><code style=' font-size: inherit; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: 0px 0px; text-align: left;'><span style=\" color: rgb(248, 248, 242);\">{</span>\r\n&nbsp; <span style=\" color: rgb(193, 239, 101);\">&quot;email&quot;</span><span style=\" color: rgb(248, 248, 242);\">:</span> <span style=\" color: rgb(208, 208, 208);\">&quot;john@johndoe.com&quot;</span><span style=\" color: rgb(248, 248, 242);\">,</span>\r\n&nbsp; <span style=\" color: rgb(193, 239, 101);\">&quot;password&quot;</span><span style=\" color: rgb(248, 248, 242);\">:</span> <span style=\" color: rgb(208, 208, 208);\">&quot;CatsAreAwesome&quot;</span>\r\n<span style=\" color: rgb(248, 248, 242);\">}</span></code></pre><p><a href=\"https://www.cosmicjs.com/docs/rest#api-authenticate\">Read more about Authentication</a><br><br></p><p><strong>Add Buckets</strong><br>Use the new <code>POST /buckets</code> endpoint to add your new Bucket to your account. &nbsp;The only required fields are title and a Header with <code>Authorization: Bearer &lt;token&gt;</code>.<br><a href=\"https://www.cosmicjs.com/docs/rest#api-authenticate\">Read more about adding Buckets</a><br><br></p><p><strong>Add / Edit / Delete Object Types</strong><br>Add Object Types with <code>POST /:your-bucket-slug/add-object-type</code><br>Edit Object Types with <code>PUT /:your-bucket-slug/edit-object-type</code><br>Delete Object Types with <code>DELETE /:your-bucket-slug/:object-type-slug</code><br><a href=\"https://www.cosmicjs.com/docs/rest#api-add-object\">Read more about Object Types</a><br><br><strong>Add Media to Folders</strong><br>You can now add Media to your Bucket and specify which folder to place it in.</p><p><code>POST /:your-bucket-slug/media</code></p><pre style=' font-size: 13px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: rgb(39, 43, 45); text-align: left;'><code style=' font-size: inherit; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: rgb(248, 248, 242); background: 0px 0px; text-align: left;'><span style=\" color: rgb(248, 248, 242);\">{</span>\r\n&nbsp; <span style=\" color: rgb(193, 239, 101);\">&quot;media&quot;</span><span style=\" color: rgb(248, 248, 242);\">:</span> FILE_DATA<span style=\" color: rgb(248, 248, 242);\">,</span>\r\n&nbsp; <span style=\" color: rgb(193, 239, 101);\">&quot;folder&quot;</span><span style=\" color: rgb(248, 248, 242);\">:</span> <span style=\" color: rgb(208, 208, 208);\">&quot;your-folder-slug&quot;</span>\r\n<span style=\" color: rgb(248, 248, 242);\">}</span></code></pre><p><a href=\"https://www.cosmicjs.com/docs/rest#api-add-object\">Read more about adding Media</a><br><br></p><p>I hope you find these new additions to the API useful for building your applications. &nbsp;<a href=\"https://www.cosmicjs.com/docs\">Browse the API docs</a> to see more detail on how to use the new additions to the API. &nbsp;If you have any questions <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\">join our Slack community</a>.</p><p><br><em>Icon provided by <a href=\"https://www.iconfinder.com/icons/1214003/cloud_summer_sun_weather_icon#size=512\" rel=\"noopener noreferrer\" target=\"_blank\">Iconfinder</a>.</em></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>Cosmic is on a mission to help you build apps faster. &nbsp;And with that goal in mind, we&#39;re happy to announce some additions to our API that will help you manage your application content faster and easier, right from the Cosmic API.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"52d84b70-46f8-11e7-a70a-89b9eb3609ed-cloud-api.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/52d84b70-46f8-11e7-a70a-89b9eb3609ed-cloud-api.png","imgix_url":"https://imgix.cosmicjs.com/52d84b70-46f8-11e7-a70a-89b9eb3609ed-cloud-api.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-06-01T18:20:05.056Z","created_by":"5357ef811693be2118000001","created":"2017-06-01T18:20:05.056Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>Cosmic is on a mission to help you build apps faster. &nbsp;And with that goal in mind, we&#39;re happy to announce some additions to our API that will help you manage your application content faster and easier, right from the Cosmic API.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/52d84b70-46f8-11e7-a70a-89b9eb3609ed-cloud-api.png","imgix_url":"https://imgix.cosmicjs.com/52d84b70-46f8-11e7-a70a-89b9eb3609ed-cloud-api.png"}}},{"_id":"5926688fa38e019f75000296","order":129,"slug":"how-to-build-a-react-website-powered-by-the-cosmic-js-graphql-api","title":"How to Build a React Website Powered by the Cosmic GraphQL API","content":"<p><img src=\"https://cosmicjs.imgix.net/5a56d280-4109-11e7-8d6b-a1a75699efdb-cosmicjs-graphql.jpg\" style=\"width: 1005px;\" class=\"fr-fic fr-dib\"></p><p>Building and maintaining a React app can be no mean feat. There plenty of tutorials out there covering the technical aspects of making a React app, but as with any technology, it&#39;s often hard to find information on best practices.</p><p>In this post we&#39;ll be exploring some tips, tricks, and techniques we&#39;ve learnt whilst producing React/GraphQL apps for our clients. Hopefully these will help you make your project more performant and simplify maintenance.</p><h3>TL;DR</h3><p><a href=\"https://www.cosmicjs.com/apps/react-graphql-blog/demo\">View demo</a><br><a href=\"https://www.cosmicjs.com/apps/react-graphql-blog\">Install the app on Cosmic</a><br><a href=\"https://github.com/cosmicjs/react-graphql-blog\" rel=\"noopener noreferrer\" target=\"_blank\">Check out the codebase on GitHub</a></p><h3>You probably don&#39;t need state</h3><p>If you&#39;ve been using React for a while, your first instinct when starting a new project might be to set up a state management library like Redux, MobX, or freactal. These are really powerful solutions for state management, that can make wrestling\r\nwith the state of a large application much more manageable.</p><p>But, like any library, you shouldn&#39;t start using these state management solutions until you actually need to! For a simple blog like the one we&#39;ll be building today the only state you actually need is the current URL.</p><p>&quot;But!&quot; I hear you cry &quot;How will I store/cache/handle the API-first data I&#39;m fetching over the network, from a great service like Cosmic?&quot;. Well worry not! In the second half of this post we&#39;re going to explore GraphQL, a\r\nsystem for declaratively fetching data from a server and specifically the Apollo GraphQL client for simply interfacing with GraphQL.</p><p>We&#39;re focusing on a simple, view only app in this post, but it&#39;s worth mentioning that the state provided by class based React components is often sufficient for bits of state that only affect a localised part of your app. Dan Abramov (creator\r\nof Redux) has written in more detail about this subject here</p><h3>Use routing to store your view information</h3><p>Of course, if we don&#39;t have some state, we&#39;d just be displaying our whole web app all at once. Luckily, your browser provides a built in state store with undo history, frictionless sharing, and a simple interface: your URL bar.</p><p>The excellent React Router library provides a simple and expressive interface for navigating around your app. Most of the routing in our example app is handled in the following file:</p><div><pre class=\"prism\">// src/components/posts.js\r\n\r\nimport styled from &quot;styled-components&quot;;\r\nimport { Route, Switch, } from &quot;react-router&quot;;\r\n\r\nimport Post, { Blank, Home, FourOhFour, } from &quot;./post&quot;;\r\nimport Sidebar from &quot;./Sidebar&quot;;\r\n\r\nconst PostsStyled = styled.div`\r\n&nbsp; &nbsp; background-color:&nbsp;${R.path([&quot;theme&quot;, &quot;white&quot;,])};\r\n&nbsp; &nbsp; flex-direction: row;\r\n`;\r\n\r\nexport default () =&gt; (\r\n   &lt;PostsStyled&gt;\r\n\r\n        &lt;Route path = &quot;/post&quot; component = { Sidebar } /&gt;\r\n\r\n        &lt;Switch&gt; \r\n            &lt;Route path = &quot;/post/:postSlug&quot; component = { Post } /&gt;\r\n            &lt;Route path = &quot;/post/&quot; component = { Blank } /&gt;\r\n            &lt;Route path = &quot;/&quot; exact component = { Home } /&gt;\r\n            &lt;Route component = { FourOhFour } /&gt;\r\n        &lt;/Switch&gt;\r\n\r\n    &lt;/PostsStyled&gt;\r\n);</pre></div><p>The first Route renders the sidebar for any URL beginning with /post</p><p>The Switch component renders the first of its children with a matching path. Our routing configuration does the following:</p><ul><li>If the URL is /post/some-post-slug we show the post with the slug some-post-slug</li><li>If the URL is /post we only show the Sidebar that lets you select a post</li><li>If the URL is / we show the home page</li><li>For any other URL we show the 404 page</li></ul><p>All this together means we can simply switch between all the different views of our app just by changing the URL.</p><p>React Router provides a Link component, that acts like a supercharged &lt;a&gt; tag. You should use Link for any hyperlinks that don&#39;t lead out of your website.</p><h3>Styled-Components and ThemeProvider stay on top of your styles</h3><p>CSS precompilers like SASS first enabled web developers to start using variables and functions in their styles. Then React came along and popularised the inline style system:</p><div><pre class=\"prism\">&lt;div\r\n   style = {{\r\n      display: &quot;flex&quot;,\r\n      backgroundColor: &quot;red&quot;,\r\n      color: &quot;white&quot;,\r\n      margin: &quot;4px&quot;,\r\n   }}\r\n/&gt;</pre></div><p>The hottest new trend is Styled Components, which allows you to create new components by specifying a component, and the CSS styles you&#39;d like to apply to it. These styles are automatically vendor-prefixed, and are all converted to a stylesheet in\r\nthe end.</p><div><pre class=\"prism\">const Link = styled.a`\r\n&nbsp; &nbsp;color: white;\r\n&nbsp; &nbsp;font-size: 0.8em;\r\n&nbsp; &nbsp;text-decoration: none;\r\n`;</pre></div><p>Styled Components also provide a way to set global variables that are inherited by each styled component. The ThemeProvider component can be used to supply variables to each styled component like so:</p><div><pre class=\"prism\">const theme = {\r\n    white: &quot;#fff&quot;,\r\n    blue: &quot;#00afd7&quot;,\r\n};\r\n\r\nexport default () =&gt; (\r\n    &lt;ThemeProvider theme = { theme }&gt;\r\n      &lt;App/&gt;\r\n    &lt;/ThemeProvider&gt;\r\n);</pre></div><p>Now every styled component that is a child of App can access those variables using a function in the styles:</p><div><pre class=\"prism\">const Link = styled.a`\r\n&nbsp; &nbsp;color:&nbsp;${ (props) =&gt; props.theme.blue };\r\n&nbsp; &nbsp;font-size: 0.8em;\r\n&nbsp; &nbsp;text-decoration: none;\r\n`</pre></div><p>The theme object can be any javascript object, and the function inside the ${ } block can be any function, so there&#39;s a huge range of cool stuff you can do in your styled components while still keeping all your variables in one unified place.</p><h2>GraphQL</h2><p>GraphQL is a declarative, self documenting API specification that allows you to ask your API only for the data you need. It imposes a few restrictions and ideas on your API, that allows a GraphQL Client to create some really cool features, including:</p><ul><li>Automatic caching.</li><li>Smart resolving data requests from stored data.</li><li>Connecting data fetching to the components that display the data.</li></ul><p>We&#39;re going to be going through and explaining all the steps we&#39;ve used in our example project, but if you&#39;d like a more complete explanation of the GraphQL protocol, you can read about it in full here.</p><p>The GraphQL API provided by Cosmic has 3 queries:</p><ul><li>objects: gets all the objects in a bucket</li><li>objectsByType: gets all the objects of a certain type in a bucket</li><li>object: gets a specific object by its slug</li></ul><p>And those queries are documented in full here.</p><h3>Setting up the Cosmic GraphQL API</h3><p>First we need to set up our ApolloClient:</p><div><pre class=\"prism\">//src/GraphQL/index.js\r\n\r\nimport { ApolloClient, createNetworkInterface, } from &quot;react-apollo&quot;;\r\n\r\nconst networkInterface = createNetworkInterface({\r\n    uri: &quot;https://graphql.cosmicjs.com/v1&quot;,\r\n});\r\n\r\nconst client = new ApolloClient({\r\n    networkInterface,\r\n});\r\n\r\nexport default client;</pre></div><p>Which we then provide to the rest of our app using the ApolloProvider:</p><div><pre class=\"prism\">//src/app.js\r\n\r\nimport React from &quot;react&quot;;\r\nimport { ApolloProvider, } from &quot;react-apollo&quot;;\r\nimport styled, { ThemeProvider, } from &quot;styled-components&quot;;\r\n\r\nimport client from &quot;./GraphQL&quot;;\r\n\r\nexport default () =&gt; (\r\n    &lt;ThemeProvider theme = { theme }&gt;\r\n        &lt;ApolloProvider client = { client }&gt;\r\n         &lt;App /&gt;\r\n        &lt;/ApolloProvider&gt;\r\n    &lt;/ThemeProvider&gt;\r\n);</pre></div><p>The Apollo provider means that any component in our app can connect itself to a GraphQL query, meaning each component can ask the client to fetch exactly the data needed to render itself. Don&#39;t worry about multiple components spamming the server with\r\nrequests; the ApolloClient handles caching and de-duplication itself!</p><p>We&#39;ll now spend a little time exploring some methods you can use to make GraphQL a little nicer to use, before we start exploring how we&#39;ve used it in this app. We&#39;re not including all the code necessary to run the example in this blog post,\r\nbut you can find the source code for our demo project here. Follow along!</p><h3>Reuse Data with Fragments</h3><p>Sometimes you want to get the same fields from an object in two different queries, GraphQL provides a system to do this in the form of Fragments. Fragments allow you to pick some fields from an object, and ask for only those fields.</p><p>For example, in the sidebar we only want some basic information about a post:</p><div><pre class=\"prism\">fragment PostPreview on Object {\r\n    slug\r\n    typeSlug: type_slug\r\n    title\r\n    modifiedAt: modified_at\r\n}</pre></div><p>But in the post itself we want all that information, plus some more:</p><div><pre class=\"prism\">fragment PostAllContent on Object {\r\n    ...PostPreview\r\n    content\r\n    metadata\r\n    order\r\n}</pre></div><p>We can then use the PostPreview fragment in the query used by our Sidebar:</p><div><pre class=\"prism\"># getAllPostsQuery\r\nquery($bucketSlug: String! $readKey: String!){\r\n    objects: objectsByType(bucket_slug: $bucketSlug, read_key: $readKey, type_slug: &quot;posts&quot;) {\r\n        ...PostPreview\r\n    }\r\n}</pre></div><p>And the PostAllContent fragment in the query used by our Post component</p><div><pre class=\"prism\"># getPostQuery\r\nquery($bucketSlug: String! $readKey: String! $postSlug: String!){\r\n    object(bucket_slug: $bucketSlug, read_key: $readKey, slug: $postSlug) {\r\n        ...PostAllContent\r\n    }\r\n}</pre></div><p>Fragments are great for two reasons:</p><ol><li>They allow you to modularise and reuse the properties you want to get from a query</li><li>They ensure that two queries which should get the same information always stay in sync, so Apollo can successfully cache the results</li></ol><h3>Use Component props as query parameters</h3><p>You&#39;ll notice that the above queries have 2/3 input fields:</p><ul><li>$bucketString: The slug of the bucket we&#39;d like to get objects from</li><li>$readKey: The read key (if needed) to read from the bucket</li><li>$postSlug: The slug of the specific object we want to get (if needed)</li></ul><p>These variables are used to direct the query to the correct data. Apollo gives us a powerful API to set these variables, but often for simple components it&#39;s easier to just set them using props:</p><h4>Default Props</h4><p>For variables that are the same across our app, like $bucketSlug, we can add them to our components using their defaultProps:</p><div><pre class=\"prism\">//src/components/sidebar.js\r\n\r\nconst Sidebar = graphql(getAllPostsQuery, { name: &quot;allPosts&quot;, })(\r\n   props =&gt; (\r\n      &lt;SidebarStyled&gt;\r\n         &lt;Nav&gt;\r\n            &lt;SidebarText&gt;\r\n               Posts\r\n            &lt;/SidebarText&gt;\r\n\r\n            {\r\n            props.allPosts.loading\r\n               ? &lt;Loading /&gt;\r\n               : props.allPosts.objects.map(({ slug, ...rest }) =&gt; (\r\n                  &lt;PostLink key = { slug } slug = { slug } { ...rest } /&gt;\r\n               ))\r\n            }\r\n\r\n         &lt;/Nav&gt;\r\n      &lt;/SidebarStyled&gt;\r\n   )\r\n);\r\n\r\nSideBar.defaultProps = {\r\n    bucketSlug: config.bucket.slug,\r\n    readKey: config.bucket[&quot;read_key&quot;],\r\n};</pre></div><h4>Dynamic Props</h4><p>For variables that change for different instances of a component, like $postSlug, you can pass them in as a prop to each instance of a component:</p><div><pre class=\"prism\">//src/components/post.js\r\nconst PostWrapper = GraphQL(getPostQuery)(props =&gt; (\r\n    &lt;PostContainerStyled&gt;\r\n        {\r\n         props.data.loading\r\n            ? &lt;Loading /&gt;\r\n            : &lt;Post\r\n               noShare = { props.noShare }\r\n               title = { R.path([&quot;data&quot;, &quot;object&quot;, &quot;title&quot;,])(props) }\r\n               content = { R.path([&quot;data&quot;, &quot;object&quot;, &quot;content&quot;,])(props) }\r\n               /&gt;\r\n      }\r\n    &lt;/PostContainerStyled&gt;\r\n));\r\n\r\nPostWrapper.defaultProps = {\r\n    bucketSlug: config.bucket.slug,\r\n    readKey: config.bucket[&quot;read_key&quot;],\r\n};\r\n\r\nexport const Home = () =&gt; &lt;PostWrapper noShare postSlug = &quot;home&quot; /&gt;;</pre></div><h3>Preloading Data</h3><p>It&#39;s always good to prefetch our data before the user needs it, this speeds up page transition time and makes for a nicer UX, Apollo provides a very simple way to do this.</p><p>While the Sidebar gets the query it need to display a preview of each post, it also performs another query:</p><div><pre class=\"prism\">#getAllPostsWithExtraQuery\r\nquery($bucketSlug: String! $readKey: String!){\r\n    objectsWithExtra: objectsByType(bucket_slug: $bucketSlug, read_key: $readKey, type_slug: &quot;posts&quot;) {\r\n        ...PostAllContent\r\n    }\r\n}</pre></div><p>This query gets all the fields of every post, meaning all that data is already loaded into the cache before we navigate to a Post page. You can attach multiple queries to a component using the compose function from the react-apollo package.</p><div><pre class=\"prism\">//src/components/sidebar.js\r\n\r\nconst Sidebar = compose(\r\n    GraphQL(getAllPostsQuery, { name: &quot;allPosts&quot;, }),\r\n    GraphQL(getAllPostsWithExtraQuery, { name: &quot;allPostsPreFetch&quot;, }),\r\n)(props =&gt; (\r\n    &lt;SidebarStyled&gt;\r\n        &lt;Nav&gt;\r\n            &lt;SidebarText&gt;\r\n                Posts\r\n            &lt;/SidebarText&gt;\r\n\r\n            &lt;Line /&gt;\r\n\r\n            {props.allPosts.loading\r\n                ? &lt;Loading /&gt;\r\n                : props.allPosts.objects.map(({ slug, ...rest }) =&gt; (\r\n                    &lt;PostLink key = { slug } slug = { slug } { ...rest } /&gt;\r\n                    ))}\r\n\r\n        &lt;/Nav&gt;\r\n    &lt;/SidebarStyled&gt;\r\n));\r\n\r\nSideBar.defaultProps = {\r\n    bucketSlug: config.bucket.slug,\r\n    readKey: config.bucket[&quot;read_key&quot;],\r\n};</pre></div><p>However, if you were to just do this, you would see no improvement in your network performance, and every time you loaded a new post you&#39;d have to make a new network request. To benefit from this preloading we have to tell the ApolloClient a few more things.</p><h3>Teach Apollo the shape of your data</h3><p>By default, ApolloClient assumes that every Object returned by your API is identifiable by a field called id or _id. In Cosmic, each object is identifiable by a field called slug.</p><p>Telling Apollo about this is simple:</p><div><pre class=\"prism\">import { ApolloClient, createNetworkInterface, } from &quot;react-apollo&quot;;\r\nimport { toIdValue, } from &quot;Apollo-client&quot;;\r\n\r\n// ------------------------------\r\n\r\nconst networkInterface = createNetworkInterface({\r\n    uri: &quot;https://GraphQL.cosmicjs.com/v1&quot;,\r\n});\r\n\r\nconst dataIdFromObject = ({ __typename, slug, }) =&gt; __typename + slug;\r\n\r\nconst customResolvers = {\r\n    Query: {\r\n        object: (_, args) =&gt;\r\n            toIdValue(\r\n                dataIdFromObject({ __typename: &quot;Object&quot;, slug: args.slug, }),\r\n            ),\r\n    },\r\n};\r\n\r\nconst client = new ApolloClient({\r\n    networkInterface,\r\n    dataIdFromObject,\r\n    customResolvers,\r\n});\r\n\r\n//------------------------------\r\n\r\nexport default client</pre></div><p>The function dataIdFromObject tells ApolloClient how to generate a unique ID from any object it gets.</p><p>The object customResolvers tells ApolloClient that whenever we make an object query, we can try looking in the cache using the query variable slug.</p><p>Now our sidebar preloads all posts using getAllPostsWithExtraQuery, and any future calls to get Post data will be served by ApolloClient&#39;s cache, instead of the network.</p><h3>Load GraphQL queries with webpack</h3><p>Finally, Apollo provides us with another nifty technique to improve the developer experience.</p><p>If you&#39;re using webpack as part of your build system you can keep all your GraphQL queries and mutations in seperate files, and import them into javascript like any other file. This only only means to can benefit from compartmentalised code &amp;\r\nsyntax highlighting, it also means that webpack can pre-compile your GraphQL queries into Apollo&#39;s own internal representation at build time, rather than in your user&#39;s browser.</p><p>Integrating the GraphQL loader into webpack is easy, you just have to include the following code in your webpack config:</p><div><pre class=\"prism\">module: {\r\n   rules: [\r\n      {\r\n         test: /\\.(GraphQL|gql)$/,\r\n         exclude: /node_modules/,\r\n         loader: &#39;GraphQL-tag/loader&#39;,\r\n      },\r\n   ],\r\n},</pre></div><h2>Conclusion</h2><p>Now you know some of the tips, tricks, and techniques we&#39;ve learnt from using React and GraphQL in production apps. If you&#39;ve learnt something, please share this article!</p><p>If you&#39;re making a static site, or anything else, with Cosmic <a href=\"https://www.cosmicjs.com/community\">get in touch on our Slack</a> or <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, we&#39;d love to see what you&#39;re making.</p><p>This post was written by <a href=\"https://codogo.io/\" rel=\"noopener noreferrer\" target=\"_blank\">Codogo</a>, an award-winning digital agency with a passion for creating amazing digital experiences.</p>","metafields":[{"object_type":"authors","value":"590b73ff200ca2723f002d01","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"590b73ff200ca2723f002d01","slug":"freddie-ridell","title":"Freddie Ridell","content":"","metafields":[{"value":"2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg","imgix_url":"https://imgix.cosmicjs.com/2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-04T18:33:35.138Z","created_by":"5357ef811693be2118000001","created":"2017-05-04T18:33:35.138Z","status":"published"}},{"value":"<p>Building and maintaining a React app can be no mean feat. There plenty of tutorials out there covering the technical aspects of making a React app, but as with any technology, it&#39;s often hard to find information on best practices.</p><p>In this post we&#39;ll be exploring some tips, tricks, and techniques we&#39;ve learnt whilst producing React/GraphQL apps for our clients. Hopefully these will help you make your project more performant and simplify maintenance.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"5a56d280-4109-11e7-8d6b-a1a75699efdb-cosmicjs-graphql.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/5a56d280-4109-11e7-8d6b-a1a75699efdb-cosmicjs-graphql.jpg","imgix_url":"https://imgix.cosmicjs.com/5a56d280-4109-11e7-8d6b-a1a75699efdb-cosmicjs-graphql.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-05-25T05:15:59.538Z","created_by":"5357ef811693be2118000001","created":"2017-05-25T05:15:59.538Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"590b73ff200ca2723f002d01","slug":"freddie-ridell","title":"Freddie Ridell","content":"","metafields":[{"value":"2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg","imgix_url":"https://imgix.cosmicjs.com/2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-04T18:33:35.138Z","created_by":"5357ef811693be2118000001","created":"2017-05-04T18:33:35.138Z","status":"published","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg","imgix_url":"https://imgix.cosmicjs.com/2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg"}}},"teaser":"<p>Building and maintaining a React app can be no mean feat. There plenty of tutorials out there covering the technical aspects of making a React app, but as with any technology, it&#39;s often hard to find information on best practices.</p><p>In this post we&#39;ll be exploring some tips, tricks, and techniques we&#39;ve learnt whilst producing React/GraphQL apps for our clients. Hopefully these will help you make your project more performant and simplify maintenance.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/5a56d280-4109-11e7-8d6b-a1a75699efdb-cosmicjs-graphql.jpg","imgix_url":"https://imgix.cosmicjs.com/5a56d280-4109-11e7-8d6b-a1a75699efdb-cosmicjs-graphql.jpg"}}},{"_id":"5922eb34707c1e004500016f","order":130,"slug":"new-metafields-required-and-value-less-parent","title":"New Metafields: Required and Value-less Parent","content":"<p>We&#39;ve released a couple new additions to our powerful Metafields feature. &nbsp;Check them out:</p><p><strong>Required Metafield</strong><br>You can now mark a Metafield as required to make sure that your editor fills in a value. &nbsp;This can be applied for all Metafield types except any parent Metafield. &nbsp;Your content editor will notice the required Metafields are marked with a red asterisk next to the title.\r\nScreenshot below:</p><p><img src=\"https://www.cosmicjs.com/uploads/2898b270-3f0d-11e7-bb72-af71fa7a5dfd-required.png\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><strong>Value-less Parent Metafield</strong><br>No, it&#39;s not time to move in with Grandma, the name of this new Metafield describes how the Metafield contains children but has no value of its own.</p><p>Let&#39;s say you have a list of items on a page that you would like to keep under a certain title, but are not\r\nusing the parent element for any value other than to keep the child elements. &nbsp;Enter the Value-less Parent Metafield which stores all of the child elements but has no value of its own.</p><p>Notice from the gif screenshot below that you can nest the children below the parent element by dragging them under the parent element.</p><p><img src=\"https://www.cosmicjs.com/uploads/f70fb720-3f08-11e7-bb72-af71fa7a5dfd-parent.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>In the API our Value-less Parent Metafield renders the metadata to:</p><pre class=\"prism\">&quot;parent&quot;: {\r\n  &quot;child_1&quot;: &quot;Value 1&quot;,\r\n  &quot;child_2&quot;: &quot;Value 2&quot;\r\n}</pre><p>If you have any questions about how to use these new Metafield options, <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\">join our Slack community</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>We&#39;re releasing a couple new additions to our powerful Metafields feature. &nbsp;Check them out...</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"3508bc70-3f09-11e7-bb72-af71fa7a5dfd-Screen Shot 2017-05-22 at 11.10.21 AM.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/3508bc70-3f09-11e7-bb72-af71fa7a5dfd-Screen Shot 2017-05-22 at 11.10.21 AM.png","imgix_url":"https://imgix.cosmicjs.com/3508bc70-3f09-11e7-bb72-af71fa7a5dfd-Screen Shot 2017-05-22 at 11.10.21 AM.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-05-22T13:44:20.855Z","created_by":"5357ef811693be2118000001","created":"2017-05-22T13:44:20.855Z","status":"published","modified_at":"2020-08-10T14:04:22.001Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We&#39;re releasing a couple new additions to our powerful Metafields feature. &nbsp;Check them out...</p>","featured_image":{"url":"https://cdn.cosmicjs.com/3508bc70-3f09-11e7-bb72-af71fa7a5dfd-Screen Shot 2017-05-22 at 11.10.21 AM.png","imgix_url":"https://imgix.cosmicjs.com/3508bc70-3f09-11e7-bb72-af71fa7a5dfd-Screen Shot 2017-05-22 at 11.10.21 AM.png"}}},{"_id":"591dcd407b17dbf1050021d0","order":131,"slug":"how-to-build-a-mobile-product-catalog-app-using-angular-js-ionic-and-cosmic-js","title":"How to Build a Mobile Product Catalog App Using Angular JS, Ionic and Cosmic","content":"<div><h2><img src=\"https://www.cosmicjs.com/uploads/078a4f50-3c04-11e7-bc92-138e0a29050b-ionic-angular-cosmic.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></h2><h2>TL;DR</h2><p><a href=\"https://github.com/cosmicjs/ionic-angular-app\" target=\"_blank\">View the codebase and follow installation instructions on GitHub.</a></p><p>In this tutorial I&rsquo;m going to show you how to create a simple catalog mobile app with Cosmic and Ionic Framework.</p><p style=\"text-align: center;\"><img src=\"https://www.cosmicjs.com/uploads/8847e6f0-4624-11e7-a37e-4d027322a5ca-ionic-angular-app.gif\" style=\"width: 366px; height: 623.353px;\" class=\"fr-fic fr-dib\"></p><h1>Prerequisites</h1><p>You&rsquo;ll need the node.js, npm and ionic cli pre-installed. Make sure you already have them before start. Please refer to ionic docs how to do this. You need Ionic framework &gt;= 2.0 to run this example, so make sure you have the right Ionic version:</p><div><pre class=\"prism\">ionic -v</pre></div><h1>Getting Started</h1><p>First of all we&rsquo;ll need to create the ionic project. We&rsquo;ll use standard tabs template and will modify one tab to keep our Catalog component. So once you&rsquo;ll have all prerequisites installed, you&rsquo;ll need to setup the new Ionic project:</p><div><pre class=\"prism\">ionic start cosmic-demo tabs --v2</pre></div><p>After you&rsquo;ll setup this project you&rsquo;ll be able to run</p><div><pre class=\"prism\">ionic serve</pre></div><p>And play with your app in browser</p><h1>Setting up Cosmic library</h1><p>First of all, install Cosmic Angular/JavaScript library</p><div><pre class=\"prism\">npm install cosmicjs --save</pre></div><p>Now you should be able to import Cosmic object and perform Cosmic API calls like following:</p><div><pre class=\"prism\">import Cosmic from &#39;cosmicjs&#39;;\r\nconst bucket = { slug: &#39;your-bucket-slug&#39; };\r\n\r\nCosmic.getObjects({ bucket }, (err, res) =&gt; {\r\n  console.log(res.objects);\r\n});</pre></div><h1>Setting up things with Cosmic</h1><p>Create the bucket and remember the bucket name (&lsquo;cosmic-ionic&rsquo; in our case):&nbsp;</p><p><img src=\"https://www.cosmicjs.com/uploads/2e0542a0-3c01-11e7-bfc3-91ffe5d3362c-Screen Shot 2017-05-18 at 2.31.13 PM.png\" class=\"fr-fic fr-dib\"></p><p>Than create a new object type named &lsquo;Category&rsquo; and please remember the object type slug (&lsquo;categories&rsquo;).</p><p><img src=\"https://www.cosmicjs.com/uploads/3e61cc40-3c01-11e7-bfc3-91ffe5d3362c-Screen Shot 2017-05-18 at 2.35.20 PM.png\" class=\"fr-fic fr-dib\"></p><p>We don&rsquo;t need any additional settings right now, so just set the name and save object type. After save you&rsquo;ll be redirected to &lsquo;New Category&rsquo; page. Create some categories using this page and save them.</p><p>Now create the Product object type using the same method as for categories. But we&rsquo;ll have one difference - please enter the &ldquo;Metafields Template&rdquo; tab and add &ldquo;Image/File&rdquo; type metafield with key &#39;image&#39;. This metafield\r\nwill store the product image.</p><p>The second metafield you&rsquo;ll need to add is &ldquo;Single Object Relationship&rdquo;. Please create such metafield and choose Category as &ldquo;Object type to choose from&rdquo;.</p><p>Such Product structure allows us to create one-to-many relationship between products and categories.</p><p>Once Product object type will be created, please add some demo products and assign them to different categories. Make sure you&rsquo;ll have more than 5 products in single category - this allow us to test infinite scroll.</p><h1>Ionic part of the app</h1><p>Create src/pages/categories_list/categories_list.ts file with the following content:</p><div><pre class=\"prism\">import { Component } from &#39;@angular/core&#39;;\r\nimport { NavController } from &#39;ionic-angular&#39;;\r\nimport Cosmic from &#39;cosmicjs&#39;;\r\nimport { ProductsList } from &#39;../products_list/products_list&#39;;\r\n\r\n@Component({\r\n    selector: &#39;page-categories&#39;,\r\n    templateUrl: &#39;categories_list.html&#39;\r\n})\r\nexport class CategoriesList {\r\n    public categories;\r\n\r\n    constructor(\r\n        public navCtrl: NavController\r\n    ) {\r\n        this.categories = [];\r\n\r\n        Cosmic.getObjectType({\r\n            bucket: {\r\n                slug: &#39;cosmic-ionc&#39;\r\n            }\r\n        }, {\r\n            type_slug: &#39;categories&#39;\r\n        }, (err, res) =&gt; {\r\n            this.categories = res.objects.all;\r\n        });\r\n    }\r\n    navToCategory(category) {\r\n        this.navCtrl.push(ProductsList, { title: category.title, id: category._id });\r\n    }\r\n}</pre></div><p>Than create a template for CategoriesList component:</p><div><pre class=\"prism\">&lt;ion-header&gt;\r\n  &lt;ion-navbar&gt;\r\n    &lt;ion-title&gt;\r\n      Categories\r\n    &lt;/ion-title&gt;\r\n  &lt;/ion-navbar&gt;\r\n&lt;/ion-header&gt;\r\n&lt;ion-content padding&gt;\r\n    &lt;ion-list&gt;\r\n        &lt;button ion-item *ngFor=&quot;let category of categories&quot; (click)=&quot;showProducts()&quot;&gt;\r\n            {{ category.title }}\r\n        &lt;/button&gt;\r\n    &lt;/ion-list&gt;\r\n&lt;/ion-content&gt;</pre></div><p>Add CategoriesList component to app.module.ts as it&rsquo;s done with other components like HomePage and set it as first tab for TabsPage component.</p><h2>What happens here?</h2><p>Our Categories list component uses Cosmic API on its constructor to receive a list of categories we have. It uses two things to achieve the required functionality:</p><ul><li>Filters objects by Cosmic bucket</li><li>Filters objects by object type</li></ul><p>CategoriesList components references ProductsList component - it navigates to products list page once user click on the category item. So we need the ProductsList - component which will show us products list for each particular category. Let&rsquo;s introduce it!</p><div><pre class=\"prism\">import { Component } from &#39;@angular/core&#39;;\r\nimport { NavController, NavParams } from &#39;ionic-angular&#39;;\r\nimport {Http} from &#39;@angular/http&#39;;\r\nimport { DomSanitizer } from &#39;@angular/platform-browser&#39;\r\n@Component({\r\n    selector: &#39;page-products-list&#39;,\r\n    templateUrl: &#39;products_list.html&#39;\r\n})\r\nexport class ProductsList {\r\n    public products;\r\n    public category_title;\r\n    constructor(\r\n        public navCtrl: NavController,\r\n        public params: NavParams,\r\n        public http: Http,\r\n        private sanitizer: DomSanitizer\r\n    ) {\r\n        this.products = [];\r\n        this.category_title = this.params.get(&#39;title&#39;);        this.http.get(`https://api.cosmicjs.com/v1/cosmic-ionc/object-type/products/search?metafield_key=category&amp;metafield_value=${this.params.get(&#39;id&#39;)}`).subscribe((resp) =&gt; {\r\n            let data = resp.json();\r\n            if (data.objects) {\r\n                this.products = data.objects;\r\n            }\r\n            else {\r\n                this.products = [];\r\n            }\r\n        });\r\n    }\r\n    getImageUrl(product) {\r\n        let url = product.metafields.find((v) =&gt; { return (v.key == &#39;image&#39;) }).value;\r\n        return `https://cosmicjs.imgix.net/${url}`;\r\n    }\r\n    sanContent(product): any {\r\n        return this.sanitizer.bypassSecurityTrustHtml(product.content);\r\n    }\r\n\r\n}</pre></div><p>And here we have the ProductsList template:</p><div><pre class=\"prism\">&lt;ion-header&gt;\r\n  &lt;ion-navbar&gt;\r\n    &lt;ion-title&gt;\r\n      {{ category_title }}\r\n    &lt;/ion-title&gt;\r\n  &lt;/ion-navbar&gt;\r\n&lt;/ion-header&gt;\r\n&lt;ion-content padding&gt;\r\n    &lt;ion-card ion-item *ngFor=&quot;let product of products&quot;&gt;\r\n        &lt;img [src]=&quot;getImageUrl(product)&quot; alt=&quot;&quot;&gt;\r\n        &lt;ion-card-content&gt;\r\n            &lt;ion-card-title&gt;{{ product.title }}&lt;/ion-card-title&gt;\r\n            &lt;div class=&quot;white-space-normal&quot; [innerHTML]=&quot;sanContent(product)&quot;&gt;&lt;/div&gt;\r\n        &lt;/ion-card-content&gt;\r\n    &lt;/ion-card&gt;\r\n&lt;/ion-content&gt;</pre></div><h2>What&rsquo;s happening here?</h2><p>Cosmic JavaScript library doesn&rsquo;t provide any method to filter objects by their properties, but REST API does. That&rsquo;s why we&rsquo;re doing a HTTP request to Cosmic API using Angular Http module.</p><p>In this case request URL should look like the following:</p><pre class=\"prism\">https://api.cosmicjs.com/v1/BUCKET_NAME/object-type/OBJECT_TYPE_SLUG/search?metafield_key=CATEGORY_OBJECT_TYPE_SLUG&amp;metafield_value=CATEGORY_OBJECT_ID</pre><p>The second interesting thing we have to look at is getImageUrl function. Image is a part of product metadata, that&rsquo;s why it&rsquo;ll be an item of metafields array for each API response object. Our goal is to extract the required metafieldsarray\r\nitem (with key field equals to &lsquo;image&rsquo; - the key we&rsquo;ve entering during metafield creation). This array item will also have value key - it&rsquo;s the image file name, we&rsquo;ll need to prepend it with https://cosmicjs.imgix.net/ to\r\nget full image URL.</p><p>We&rsquo;re using Angular 4 here, that&rsquo;s why we have to use DomSanitizer to display HTML markup received from Cosmic API.</p><h1>Conclusion</h1><p>Cosmic allows us to quickly start mobile application development without thinking too much about backend and API. Generally, everything can be done using your Ionic/Angular developers and would save you a lof of time and money. Any backend/API entities\r\ncan be quickly added/removed or modified to meet your project requirements.</p></div>","metafields":[{"object_type":"authors","value":"591dcc617b17dbf10500212d","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"591dcc617b17dbf10500212d","slug":"ivan-larionov","title":"Ivan Larionov","content":"","metafields":[{"value":"713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg","imgix_url":"https://imgix.cosmicjs.com/713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-18T16:31:29.363Z","created_by":"5357ef811693be2118000001","created":"2017-05-18T16:31:29.363Z","status":"published"}},{"value":"<p>In this tutorial I&rsquo;m going to show you how to create a simple catalog mobile app with Cosmic and Ionic Framework.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"0274a5e0-3be8-11e7-bfc3-91ffe5d3362c-angular-ionic-cosmic.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0274a5e0-3be8-11e7-bfc3-91ffe5d3362c-angular-ionic-cosmic.jpg","imgix_url":"https://imgix.cosmicjs.com/0274a5e0-3be8-11e7-bfc3-91ffe5d3362c-angular-ionic-cosmic.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-05-18T16:35:12.586Z","created_by":"5357ef811693be2118000001","created":"2017-05-18T16:35:12.586Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"591dcc617b17dbf10500212d","slug":"ivan-larionov","title":"Ivan Larionov","content":"","metafields":[{"value":"713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg","imgix_url":"https://imgix.cosmicjs.com/713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-18T16:31:29.363Z","created_by":"5357ef811693be2118000001","created":"2017-05-18T16:31:29.363Z","status":"published","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg","imgix_url":"https://imgix.cosmicjs.com/713396e0-3be7-11e7-bfc3-91ffe5d3362c-ivan.jpeg"}}},"teaser":"<p>In this tutorial I&rsquo;m going to show you how to create a simple catalog mobile app with Cosmic and Ionic Framework.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/0274a5e0-3be8-11e7-bfc3-91ffe5d3362c-angular-ionic-cosmic.jpg","imgix_url":"https://imgix.cosmicjs.com/0274a5e0-3be8-11e7-bfc3-91ffe5d3362c-angular-ionic-cosmic.jpg"}}},{"_id":"5919ab2fe5e17073690057d4","order":132,"slug":"building-an-inventory-management-app-using-vuejs-and-laravel","title":"Building an Inventory Management App Using Vue.js and Laravel","content":"<p style=\"text-align: center;\"><img src=\"https://cosmicjs.imgix.net/a7b78780-3971-11e7-8b8c-299270efeba9-inventory-app-main.png\" style=\"width: 609px; height: 663.81px;\" class=\"fr-fic fr-dib\"></p><p>In this tutorial, we are going to be creating a simple inventory management application with Laravel and Vue.js as our frontend. This tutorial assumes you have a basic knowledge of object oriented php and javascript, and though we will be going through the basics of Laravel and Vue.js, it is recommended to have a basic understanding of their concepts. Now that we have that cleared, fire up your php server and let&rsquo;s build something.</p><h2>TL;DR</h2><p><a href=\"http://inventory-app.cosmicapp.co/\" rel=\"noopener noreferrer\" target=\"_blank\">View Demo</a><br><a href=\"https://github.com/cosmicjs/inventory-app\" rel=\"noopener noreferrer\" target=\"_blank\">Check out the code on GitHub</a></p><h2>Getting Started:</h2><p>Since this is a laravel application you will need to create a new laravel project, ensure your server meets laravel&rsquo;s requirements as stated here Laravel Servrer Requirements, and also make sure you have Composer installed on your server. Once you\r\nhave composer installed open up your command line and cd into your server root then simply run</p><pre class=\"prism\">composer create-project --prefer-dist laravel/laravel inventory</pre><p>This will setup a new laravel project in the directory inventory once it has been succesfully run.</p><p>After setting up the new project you will then run npm install or npm install --no-bin-links if you are devveloping on windows. This will download and setup all our javascript dependencies. To be able to view our empty laravel project simply run php artisan\r\nserve from our project&#39;s directory, this will fire up a php server from our project&#39;s root which you can then type http://127.0.0.1:8000 in your browser url and you should be greeted with the default laravel screen.</p><h2>Setting up the Cosmic php library</h2><p>We will be using some functions from the Cosmic php library, download the repo into a separate folder, we will have to edit it a bit to work neatly with laravel. In the inventory/app/ folder, create a /Vendor/cosmicjs folder and copy all the contents of the cosmicjs-php library into it, such that for example the path for cosmicjs.php becoms app/Vendor/cosmicjs/cosmicjs.php. Then rename app/Vendor/cosmicjs/curl class to app/Vendor/cosmicjs/cosmiccurl and change this top part of the code:</p><pre class=\"prism\">class Curl {\r\n  ...\r\n  }</pre><p>to</p><pre class=\"prism\">namespace App\\Vendor\\cosmicjs;\r\n\r\nclass CosmicCurl {\r\n  ....\r\n}</pre><p>What we did was add a namespace to the cosmiccurl file so we can import into laravel and change the class name to match the file name. After doing that replace this section of cosmicjs.php</p><pre class=\"prism\">include(&quot;curl.php&quot;);\r\n$curl = new Curl;\r\nclass CosmicJS {\r\n  function __construct(){\r\n    global $curl;\r\n    global $config;\r\n    $this-&gt;curl = $curl;\r\n    $this-&gt;config = $config;\r\n    $this-&gt;config-&gt;bucket_slug = $config-&gt;bucket_slug;\r\n    $this-&gt;config-&gt;object_slug = $config-&gt;object_slug;\r\n    $this-&gt;config-&gt;read_key = $config-&gt;read_key;\r\n    $this-&gt;config-&gt;write_key = $config-&gt;write_key;\r\n    $this-&gt;config-&gt;url = &quot;https://api.cosmicjs.com/v1/&quot; . $this-&gt;config-&gt;bucket_slug;\r\n    $this-&gt;config-&gt;objects_url = $this-&gt;config-&gt;url . &quot;/objects?read_key=&quot; . $this-&gt;config-&gt;read_key;\r\n    $this-&gt;config-&gt;object_url = $this-&gt;config-&gt;url . &quot;/object/&quot; . $this-&gt;config-&gt;object_slug . &quot;?read_key=&quot; . $this-&gt;config-&gt;read_key;\r\n    $this-&gt;config-&gt;media_url = $this-&gt;config-&gt;url . &quot;/media?read_key=&quot; . $this-&gt;config-&gt;read_key;\r\n    $this-&gt;config-&gt;add_object_url = $this-&gt;config-&gt;url . &quot;/add-object?write_key=&quot; . $this-&gt;config-&gt;write_key;\r\n    $this-&gt;config-&gt;edit_object_url = $this-&gt;config-&gt;url . &quot;/edit-object?write_key=&quot; . $this-&gt;config-&gt;write_key;\r\n    $this-&gt;config-&gt;delete_object_url = $this-&gt;config-&gt;url . &quot;/delete-object?write_key=&quot; . $this-&gt;config-&gt;write_key;\r\n  }</pre><p>with</p><pre class=\"prism\">namespace App\\Vendor\\cosmicjs;\r\n\r\nuse App\\Vendor\\cosmicjs\\CosmicCurl;\r\n\r\nclass CosmicJS {\r\n\r\n    private $config;\r\n    private $curl;\r\n    function __construct($bucket_slug, $type_slug,$object_slug = &quot;&quot;, $read_key = &quot;&quot;, $write_key = &quot;&quot;) {\r\n        $this-&gt;curl = new CosmicCurl();\r\n        $this-&gt;config = new \\stdClass();\r\n        //$this-&gt;config = $config;\r\n        $this-&gt;config-&gt;bucket_slug = $bucket_slug;\r\n        $this-&gt;config-&gt;object_slug = $object_slug;\r\n        $this-&gt;config-&gt;type_slug = $type_slug;\r\n        $this-&gt;config-&gt;read_key = $read_key;\r\n        $this-&gt;config-&gt;write_key = $write_key;\r\n        $this-&gt;config-&gt;url = &quot;https://api.cosmicjs.com/v1/&quot; . $this-&gt;config-&gt;bucket_slug;\r\n        $this-&gt;config-&gt;objects_url = $this-&gt;config-&gt;url . &quot;/objects?read_key=&quot; . $this-&gt;config-&gt;read_key;\r\n        $this-&gt;config-&gt;object_type_url = $this-&gt;config-&gt;url . &quot;/object-type/&quot; . $this-&gt;config-&gt;type_slug . &quot;?read_key=&quot; . $this-&gt;config-&gt;read_key;\r\n        $this-&gt;config-&gt;object_url = $this-&gt;config-&gt;url . &quot;/object/&quot; . $this-&gt;config-&gt;object_slug . &quot;?read_key=&quot; . $this-&gt;config-&gt;read_key;\r\n        $this-&gt;config-&gt;media_url = $this-&gt;config-&gt;url . &quot;/media?read_key=&quot; . $this-&gt;config-&gt;read_key;\r\n        $this-&gt;config-&gt;add_object_url = $this-&gt;config-&gt;url . &quot;/add-object?write_key=&quot; . $this-&gt;config-&gt;write_key;\r\n        $this-&gt;config-&gt;edit_object_url = $this-&gt;config-&gt;url . &quot;/edit-object?write_key=&quot; . $this-&gt;config-&gt;write_key;\r\n        $this-&gt;config-&gt;delete_object_url = $this-&gt;config-&gt;url . &quot;/delete-object?write_key=&quot; . $this-&gt;config-&gt;write_key;\r\n    }\r\n\r\n</pre><p>what this bit of change does is that it imports the cosmiccurl using its namespace, and it enables us to create multiple instances of a cosmicjs object quickly within laravel, simply by initializing with constructor parameters instead of having to setup some config variables which can get messy when being used with larger applications.Finally add the following function to the cosmicjs.php file.</p><pre class=\"prism\">public function getByObjectSlug($key,$slug)\r\n    {   \r\n        $this-&gt;config-&gt;object_by_meta_object = $this-&gt;config-&gt;url .&quot;/object-type/&quot; . $this-&gt;config-&gt;type_slug .&quot;/search?metafield_key=&quot; . $key .&quot;&amp;metafield_object_slug=&quot; .$slug;\r\n        $data = json_decode($this-&gt;curl-&gt;get($this-&gt;config-&gt;object_by_meta_object));\r\n        return $data;\r\n    }</pre><h2>Building our app</h2><p>Now that we have our cosmicjs library setup in the app/Vendor folder, its time to actually build something. Since all requests will be handled by the app/Http/Controller/IndexController.php file open it up and copy and paste this code into it.</p><pre class=\"prism\">&lt;?php\r\n\r\nnamespace App\\Http\\Controllers;\r\n\r\nuse Illuminate\\Http\\Request;\r\nuse App\\Vendor\\cosmicjs\\CosmicJS;\r\nuse GuzzleHttp\\Client;\r\n\r\nclass IndexController extends Controller {\r\n\r\n    private $locations_cosmic;\r\n    private $items_cosmic;\r\n    private $bucket_slug = &#39;&#39;;\r\n    private $read_key = &#39;&#39;;\r\n    private $write_key = &#39;&#39;;\r\n\r\n    public function __construct() {\r\n        //initialize cosmicjs php instance for fetching all locations\r\n        $this-&gt;bucket_slug = config(&#39;cosmic.slug&#39;);\r\n        $this-&gt;read_key = config(&#39;cosmic.read&#39;);\r\n        $this-&gt;write_key = config(&#39;cosmic.write&#39;);\r\n        $this-&gt;locations_cosmic = new CosmicJS($this-&gt;bucket_slug, &#39;locations&#39;);\r\n        $this-&gt;items_cosmic = new CosmicJS($this-&gt;bucket_slug, &#39;items&#39;, $this-&gt;read_key, $this-&gt;write_key);\r\n    }\r\n\r\n    public function index($location = null) {\r\n\r\n        //get objects with cosmic-js php\r\n        $locations = $this-&gt;locations_cosmic-&gt;getObjectsType();\r\n\r\n        //set locations and bucket_slug variable to be passed to view\r\n        if (property_exists($locations, &#39;objects&#39;)) {\r\n            $data[&#39;locations&#39;] = $locations-&gt;objects;\r\n        }\r\n        else\r\n        {\r\n            $data[&#39;locations&#39;] = [];\r\n        }\r\n\r\n        $data[&#39;bucket_slug&#39;] = $this-&gt;bucket_slug;\r\n\r\n        //if location slug was passed in url, pass it to view as well\r\n        if ($location) {\r\n            $data[&#39;location_slug&#39;] = $location;\r\n        } else {\r\n            $data[&#39;location_slug&#39;] = &#39;&#39;;\r\n        }\r\n\r\n        //load view\r\n        return view(&#39;index&#39;, $data);\r\n    }\r\n\r\n    //fetch items for location based on slug\r\n    public function itemsByLocation($slug) {\r\n        //fetch items using the cosmicjs library&#39;s custom function\r\n        $items = $this-&gt;items_cosmic-&gt;getByObjectSlug(&#39;location&#39;, $slug);\r\n\r\n        //if the returned value has &quot;object&quot; property, pass it \r\n        if (property_exists($items, &#39;objects&#39;)) {\r\n            //returning arrays in laravel automatically converts it to json string\r\n            return $items-&gt;objects;\r\n        } else {\r\n            return 0;\r\n        }\r\n    }\r\n\r\n    public function newLocation(Request $request) {\r\n        //get passed input\r\n        $title = $request-&gt;input(&#39;title&#39;);\r\n        $address = $request-&gt;input(&#39;address&#39;);\r\n        $picture = $request-&gt;input(&#39;image&#39;);\r\n\r\n        //set data array\r\n        $data[&#39;title&#39;] = $title;\r\n        $data[&#39;type_slug&#39;] = &quot;locations&quot;;\r\n        $data[&#39;bucket_slug&#39;] = $this-&gt;bucket_slug;\r\n        $metafields = array();\r\n        $address_data[&#39;key&#39;] = &quot;address&quot;;\r\n        $address_data[&#39;type&#39;] = &#39;textarea&#39;;\r\n        $address_data[&#39;value&#39;] = $address;\r\n        if ($picture != &#39;&#39;) {\r\n            $picture_data[&#39;key&#39;] = &quot;picture&quot;;\r\n            $picture_data[&#39;type&#39;] = &#39;file&#39;;\r\n            $picture_data[&#39;value&#39;] = $picture;\r\n            array_push($metafields, $picture_data);\r\n        }\r\n        array_push($metafields, $address_data);\r\n        $data[&#39;metafields&#39;] = $metafields;\r\n\r\n        //create a new guzzle client\r\n        $client = new Client();\r\n        //create guzzle request with data array passed as json value\r\n        $result = $client-&gt;post(&#39;https://api.cosmicjs.com/v1/&#39; . $this-&gt;bucket_slug . &#39;/add-object&#39;, [\r\n            &#39;json&#39; =&gt; $data,\r\n            &#39;headers&#39; =&gt; [\r\n                &#39;Content-type&#39; =&gt; &#39;application/json&#39;,\r\n            ]\r\n        ]);\r\n        //flash message\r\n        $request-&gt;session()-&gt;flash(&#39;status&#39;, &#39;The location&quot;&#39; . $title . &#39;&quot; was successfully locations&#39;);\r\n        //return result body\r\n        return $result-&gt;getBody();\r\n    }\r\n\r\n    //create a new item\r\n    public function newItem(Request $request) {\r\n        //get data\r\n        $name = $request-&gt;input(&#39;name&#39;);\r\n        $count = $request-&gt;input(&#39;count&#39;);\r\n        $location_id = $request-&gt;input(&#39;location&#39;);\r\n        $picture = $request-&gt;input(&#39;image&#39;);\r\n\r\n        //create data array to be passed\r\n        $data[&#39;title&#39;] = $name;\r\n        $data[&#39;type_slug&#39;] = &quot;items&quot;;\r\n        $data[&#39;bucket_slug&#39;] = $this-&gt;bucket_slug;\r\n        $count_metafield[&#39;key&#39;] = &quot;count&quot;;\r\n        $count_metafield[&#39;value&#39;] = $count;\r\n        $count_metafield[&#39;type&#39;] = &quot;text&quot;;\r\n        $location_meta[&#39;key&#39;] = &quot;location&quot;;\r\n        $location_meta[&#39;object_type&#39;] = &quot;locations&quot;;\r\n        $location_meta[&#39;type&#39;] = &quot;object&quot;;\r\n        $location_meta[&#39;value&#39;] = $location_id;\r\n        $metafields = array();\r\n\r\n        //set picture if passed into request\r\n        if ($picture != &#39;&#39;) {\r\n            $picture_data[&#39;key&#39;] = &quot;picture&quot;;\r\n            $picture_data[&#39;type&#39;] = &#39;file&#39;;\r\n            $picture_data[&#39;value&#39;] = $picture;\r\n            array_push($metafields, $picture_data);\r\n        }\r\n        array_push($metafields, $count_metafield);\r\n        array_push($metafields, $location_meta);\r\n        $data[&#39;metafields&#39;] = $metafields;\r\n\r\n        $client = new Client();\r\n        $result = $client-&gt;post(&#39;https://api.cosmicjs.com/v1/&#39; . $this-&gt;bucket_slug . &#39;/add-object&#39;, [\r\n            &#39;json&#39; =&gt; $data,\r\n            &#39;headers&#39; =&gt; [\r\n                &#39;Content-type&#39; =&gt; &#39;application/json&#39;,\r\n            ]\r\n        ]);\r\n        //flash message\r\n        $request-&gt;session()-&gt;flash(&#39;status&#39;, &#39;The Item &quot;&#39; . $name . &#39;&quot; was successfully created&#39;);\r\n        //return result body\r\n        return $result-&gt;getBody();\r\n    }\r\n\r\n    public function editItem(Request $request) {\r\n        $name = $request-&gt;input(&#39;name&#39;);\r\n        $count = $request-&gt;input(&#39;count&#39;);\r\n        $slug = $request-&gt;input(&#39;slug&#39;);\r\n        $location_id = $request-&gt;input(&#39;location_id&#39;);\r\n\r\n        $data[&#39;title&#39;] = $name;\r\n        $data[&#39;slug&#39;] = $slug;\r\n        $count_meta[&#39;key&#39;] = &quot;count&quot;;\r\n        $count_meta[&#39;value&#39;] = $count;\r\n        $count_meta[&#39;type&#39;] = &quot;text&quot;;\r\n        $location_meta[&#39;key&#39;] = &quot;location&quot;;\r\n        $location_meta[&#39;object_type&#39;] = &quot;locations&quot;;\r\n        $location_meta[&#39;type&#39;] = &quot;object&quot;;\r\n        $location_meta[&#39;value&#39;] = $location_id;\r\n        $metafields = array();\r\n        //set picture if passed into request\r\n        if ($request-&gt;input(&#39;image&#39;)) {\r\n            $picture_data[&#39;key&#39;] = &quot;picture&quot;;\r\n            $picture_data[&#39;type&#39;] = &#39;file&#39;;\r\n            $picture_data[&#39;value&#39;] = $request-&gt;input(&#39;image&#39;);\r\n            array_push($metafields, $picture_data);\r\n        }\r\n        array_push($metafields, $count_meta);\r\n        array_push($metafields, $location_meta);\r\n        $data[&#39;metafields&#39;] = $metafields;\r\n\r\n        $client = new Client();\r\n        $result = $client-&gt;put(&#39;https://api.cosmicjs.com/v1/&#39; . $this-&gt;bucket_slug . &#39;/edit-object&#39;, [\r\n            &#39;json&#39; =&gt; $data,\r\n            &#39;headers&#39; =&gt; [\r\n                &#39;Content-type&#39; =&gt; &#39;application/json&#39;,\r\n            ]\r\n        ]);\r\n        //flash message\r\n        $request-&gt;session()-&gt;flash(&#39;status&#39;, &#39;The Item was successfully edited!&#39;);\r\n        //return result body\r\n        return $result-&gt;getBody();\r\n    }\r\n\r\n    public function deleteItem(Request $request, $slug) {\r\n        //create new client and delete item\r\n        $client = new Client();\r\n        $result = $client-&gt;delete(&#39;https://api.cosmicjs.com/v1/&#39; . $this-&gt;bucket_slug . &#39;/&#39; . $slug, [\r\n            &#39;headers&#39; =&gt; [\r\n                &#39;Content-type&#39; =&gt; &#39;application/json&#39;,\r\n            ]\r\n        ]);\r\n\r\n        //flash message\r\n        $request-&gt;session()-&gt;flash(&#39;status&#39;, &#39;The Item was successfully deleted!&#39;);\r\n        return $result;\r\n    }\r\n\r\n}\r\n\r\n</pre><p>The code above is preety self explanatory with the comments included</p><h3>Things to note:</h3><ol><li>We create a new Cosmic instance for retrieving locations</li><li>We are setting up all functions our vuejs frontend will interact with</li><li>$client = new CLient() creates a new guzzle instance which we use to make calls to the cosmic api</li></ol><p>Next we will create our routes in the routes/web.php file. Open up the file and copy and paste this code into it.</p><pre class=\"prism\">&lt;?php\r\nRoute::get(&#39;/{location?}&#39;, &#39;IndexController@index&#39;);\r\nRoute::get(&#39;items/{slug}&#39;, &#39;IndexController@itemsByLocation&#39;);\r\nRoute::post(&#39;locations/new&#39;,&#39;IndexController@newLocation&#39;);\r\nRoute::post(&#39;items/new&#39;,&#39;IndexController@newItem&#39;);\r\nRoute::post(&#39;items/edit&#39;,&#39;IndexController@editItem&#39;);</pre><h3>what are we doing</h3><p>We are registering all our IndexCOntroller&#39;s function to routes so they can be accessible by the frontend.</p><h2>Building the frontend</h2><p>Remember this code in our IndexController return view(&#39;index&#39;, $data);? well its time to create the view that will be loaded. Open up the /resources/views folder and open up the <a href=\"master.blade.php\">master.blade.php</a> then copy and paste this into it.</p><pre class=\"prism\">&lt;html lang=&quot;{{ config(&#39;app.locale&#39;) }}&quot;&gt;\r\n    &lt;head&gt;\r\n        &lt;meta charset=&quot;utf-8&quot;&gt;\r\n        &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;\r\n        &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;\r\n        &lt;!-- Set Csrf token on all pages --&gt;\r\n        &lt;meta name=&quot;csrf-token&quot; content=&quot;{{ csrf_token() }}&quot;&gt;\r\n        &lt;!-- Load Bootstrap--&gt;\r\n        &lt;link rel=&quot;stylesheet&quot; href=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css&quot; integrity=&quot;sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u&quot; crossorigin=&quot;anonymous&quot;&gt;\r\n        &lt;link href=&quot;https://cdnjs.cloudflare.com/ajax/libs/limonte-sweetalert2/6.6.2/sweetalert2.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;\r\n        &lt;title&gt;Inventory Manger&lt;/title&gt;\r\n\r\n        &lt;!-- Fonts --&gt;\r\n        &lt;link rel=&quot;stylesheet&quot; href=&quot;{{ asset(&#39;css/font-awesome/css/font-awesome.min.css&#39;)}}&quot;/&gt;\r\n        &lt;link href=&quot;https://fonts.googleapis.com/css?family=Raleway:100,600&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;\r\n        &lt;script src=&quot;https://use.fontawesome.com/682442a8be.js&quot;&gt;&lt;/script&gt;\r\n\r\n        &lt;!-- Set Csrf token to be used by javascript and axios--&gt;\r\n        &lt;script&gt;\r\nwindow.Laravel = &lt;?php\r\necho json_encode([\r\n    &#39;csrfToken&#39; =&gt; csrf_token(),\r\n]);\r\n?&gt;\r\n        &lt;/script&gt;\r\n        &lt;!-- Styles --&gt;\r\n        &lt;style&gt;\r\n            .location-tab{\r\n                height:104px;\r\n                padding-left: 150px;\r\n            }\r\n            \r\n            .location-tab &gt; img{\r\n                position: absolute;\r\n                left: 0;\r\n                top: 0;\r\n                height: 100%;\r\n                width: auto;\r\n                max-width: 130px;\r\n            }\r\n            \r\n            .text-primary{\r\n                color: #29ABE2 !important;\r\n            }\r\n            \r\n            .panel-heading{\r\n                background-color: #29ABE2 !important;\r\n                color: white !important;\r\n            }\r\n            \r\n            .panel{\r\n                border-color: #29ABE2 !important;\r\n            }\r\n            \r\n            .btn-primary{\r\n                background-color: #29ABE2 !important;\r\n                color: white !important;\r\n                border-color: #29ABE2 !important;\r\n                border-radius: 3px;\r\n                margin: 10px 0;\r\n            }\r\n        &lt;/style&gt;\r\n    &lt;/head&gt;\r\n    &lt;body&gt;\r\n        &lt;div class=&quot;container&quot;&gt;\r\n            &lt;div id=&quot;wrapper&quot;&gt;\r\n                @yield(&#39;content&#39;)\r\n            &lt;/div&gt;\r\n        &lt;/div&gt;\r\n        &lt;!-- Load Jquery and bootstrap js--&gt;\r\n        &lt;script src=&quot;https://code.jquery.com/jquery-3.2.1.min.js&quot; integrity=&quot;sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=&quot; crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;\r\n        &lt;script src=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js&quot; integrity=&quot;sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa&quot; crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;\r\n        &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/limonte-sweetalert2/6.6.2/sweetalert2.min.js&quot;&gt;&lt;/script&gt;\r\n        &lt;script src=&quot;{{ asset(&#39;/js/app.js&#39;)}}&quot;&gt;&lt;/script&gt;\r\n        @yield(&#39;scripts&#39;)\r\n    &lt;/body&gt;\r\n&lt;/html&gt;\r\n\r\n</pre><p>THe <a href=\"master.blade.php\">master.blade.php</a> will serve as an extendable layout which we can then use as parent layouts for all our other views. Now create an <a href=\"index.blade.php\">index.blade.php</a> file in the same folder and paste this into it.</p><pre class=\"prism\">@extends(&#39;master&#39;)\r\n\r\n@section(&#39;content&#39;)\r\n&lt;div class=&quot;row&quot;&gt;\r\n    &lt;div class=&quot;col-md-12&quot;&gt;\r\n        &lt;div style=&quot;float:left&quot;&gt;\r\n            &lt;h1&gt;Inventory Management&lt;/h1&gt;\r\n        &lt;/div&gt;\r\n        &lt;div style=&quot;float:right;padding-top: 20px&quot;&gt;\r\n            &lt;a class=&quot;btn btn-default&quot;&gt;&lt;i class=&quot;fa fa-github&quot;&gt;&lt;/i&gt; View on Github&lt;/a&gt;\r\n        &lt;/div&gt;\r\n    &lt;/div&gt;\r\n&lt;/div&gt;\r\n\r\n&lt;div class=&quot;row&quot;&gt;\r\n    &lt;div class=&quot;col-md-12&quot;&gt;\r\n        &lt;div style=&quot;float: right; margin-bottom: 15px;&quot;&gt;&lt;a href=&quot;https://www.cosmicjs.com&quot; target=&quot;_blank&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;img class=&quot;pull-left&quot; src=&quot;https://www.cosmicjs.com/images/logo.svg&quot; width=&quot;28&quot; height=&quot;28&quot; style=&quot;margin-right: 10px;&quot;&gt;&lt;span style=&quot;color: rgb(102, 102, 102); position: relative; top: 3px;&quot;&gt;Proudly powered by Cosmic&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;\r\n    &lt;/div&gt;\r\n&lt;/div&gt;\r\n\r\n&lt;div class=&quot;row&quot; style=&quot;font-size: 16px&quot;&gt;\r\n    &lt;!-- Display vue component and set props from given data  --&gt;\r\n    &lt;inventory message=&quot;{{Session::get(&#39;status&#39;)}}&quot; :initial-locations=&quot;{{ json_encode($locations) }}&quot; slug=&quot;{{ $bucket_slug }}&quot; location-slug=&quot;{{ $location_slug }}&quot;&gt;&lt;/inventory&gt;\r\n&lt;/div&gt;\r\n@endsection\r\n\r\n@section(&#39;scripts&#39;)\r\n&lt;script&gt;\r\n&lt;/script&gt;\r\n@endsection</pre><h3>Things to note</h3><ol><li>We created a master layout which has available sections for content, script and style that our other view can extend.</li><li>We added the vue component (which will be created in the next section), with props as the data given to the view by the controller</li></ol><h2>Creating Our Controller</h2><p>This section assumes you have fundamental knowledge of Vuejs, if not i recommend you brush up on it, as explaining how some vue functions works is out of the scope of this tutorial. Now to begin, open a command prompt and cd to the app&#39;s folder then\r\nrun npm run watch to fire up laravel mix, this will compile our assets whenever a change has been made to any of our files, alternatively you could type npm run dev whenever you need to compile the assets yourself. Open the /resources/assets/js/app.js\r\nfile and change this</p><pre class=\"prism\">Vue.component(&#39;example&#39;, require(&#39;./components/Example.vue&#39;));</pre><p>to</p><pre class=\"prism\">Vue.component(&#39;inventory&#39;, require(&#39;./components/Inventory.vue&#39;));</pre><p>Here we are replacing the default example component with a component called inventory which we will be <a href=\"creating.In\">creating.In</a> the /resources/assets/js/components folder create and <a href=\"Inventory.vue\">Inventory.vue</a> file to house our component. In the newly created file copy and paste this code into it</p><pre class=\"prism\">&lt;template&gt;\r\n    &lt;div&gt;\r\n        &lt;!---- ADD LOCATION FORM --&gt;\r\n        &lt;div v-if=&quot;add_location&quot;&gt;\r\n            &lt;button class=&quot;btn btn-primary&quot; v-on:click=&quot;add_location=false&quot;&gt;&lt;span class=&quot;glyphicon glyphicon-chevron-left&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt; Go back&lt;/button&gt;\r\n            &lt;div class=&quot;panel panel-default&quot;&gt;\r\n                &lt;div class=&quot;panel-heading&quot;&gt;Add New Location&lt;/div&gt;\r\n                &lt;div class=&quot;panel-body&quot;&gt;\r\n                    &lt;form id=&quot;location_form&quot; name=&quot;location&quot;&gt;\r\n                        &lt;div class=&quot;form-group&quot;&gt;\r\n                            &lt;label for=&quot;name&quot;&gt;Name&lt;/label&gt;\r\n                            &lt;input type=&quot;text&quot; class=&quot;form-control&quot; name=&quot;title&quot; required=&quot;&quot;&gt;\r\n                            &lt;label for=&quot;address&quot;&gt;Address&lt;/label&gt;\r\n                            &lt;input type=&quot;text&quot; class=&quot;form-control&quot; name=&quot;address&quot; required=&quot;&quot;&gt;\r\n                            &lt;label for=&quot;image&quot;&gt;Image&lt;/label&gt;\r\n                            &lt;input type=&quot;file&quot; class=&quot;form-control media&quot; name=&quot;media&quot;/&gt;\r\n                        &lt;/div&gt;\r\n                        &lt;button type=&quot;submit&quot; class=&quot;btn btn-primary&quot; :class=&quot;{disabled: isDisabled}&quot; v-on:click.prevent=&quot;addLocation&quot;&gt;Submit&lt;/button&gt;\r\n                    &lt;/form&gt;\r\n                &lt;/div&gt;\r\n            &lt;/div&gt;\r\n        &lt;/div&gt;\r\n        &lt;div v-else&gt;\r\n            &lt;!---- LOCATIONS LIST --&gt;\r\n            &lt;div v-if=&quot;unselected&quot;&gt;\r\n                &lt;button class=&quot;btn btn-primary pull-right&quot; v-on:click=&quot;add_location = true&quot;&gt;&lt;span class=&quot;glyphicon glyphicon-plus&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;Add New&lt;/button&gt;\r\n                &lt;ul class=&quot;list-group&quot;&gt;\r\n                    &lt;button type=&quot;button&quot; class=&quot;list-group-item location-tab text-primary&quot; :class=&quot;{disabled: list_disable}&quot; v-for=&quot;location in locations&quot; v-on:click=&quot;fetchItems(location)&quot;&gt;&lt;img v-if=&quot;location.metadata.hasOwnProperty(&#39;picture&#39;)&quot; :src=&quot;location.metadata.picture.url&quot;&gt;{{ location.title }} - {{ location.metadata.address}}&lt;/button&gt;\r\n                &lt;/ul&gt;\r\n            &lt;/div&gt;\r\n\r\n            &lt;div v-else&gt;\r\n                &lt;!---- ADD ITEM FORM --&gt;\r\n                &lt;div v-if=&quot;add_item&quot;&gt;\r\n                    &lt;button class=&quot;btn btn-primary&quot; v-on:click=&quot;add_item=false&quot;&gt;&lt;span class=&quot;glyphicon glyphicon-chevron-left&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt; Go back&lt;/button&gt;\r\n                    &lt;div class=&quot;panel panel-default&quot;&gt;\r\n                        &lt;div class=&quot;panel-heading&quot;&gt;Add New Item&lt;/div&gt;\r\n                        &lt;div class=&quot;panel-body&quot;&gt;\r\n                            &lt;form id=&quot;item_form&quot;&gt;\r\n                                &lt;div class=&quot;form-group&quot;&gt;\r\n                                    &lt;label for=&quot;name&quot;&gt;Name&lt;/label&gt;\r\n                                    &lt;input type=&quot;text&quot; class=&quot;form-control&quot; name=&quot;name&quot;&gt;\r\n                                &lt;/div&gt;\r\n                                &lt;div class=&quot;form-group&quot;&gt;\r\n                                    &lt;label for=&quot;count&quot;&gt;Count&lt;/label&gt;\r\n                                    &lt;input type=&quot;number&quot; class=&quot;form-control&quot; name=&quot;count&quot;&gt;\r\n                                &lt;/div&gt;\r\n                                &lt;div&gt;\r\n                                    &lt;label for=&quot;image&quot;&gt;Image&lt;/label&gt;\r\n                                    &lt;input type=&quot;file&quot; class=&quot;form-control media&quot; name=&quot;media&quot;/&gt;\r\n                                &lt;/div&gt;\r\n                                &lt;button type=&quot;submit&quot; class=&quot;btn btn-primary&quot; :class=&quot;{disabled: isDisabled}&quot; v-on:click.prevent=&quot;addItem&quot;&gt;Submit&lt;/button&gt;\r\n                            &lt;/form&gt;\r\n                        &lt;/div&gt;\r\n                    &lt;/div&gt;\r\n                &lt;/div&gt;\r\n\r\n                &lt;!---- EDIT ITEM FORM --&gt;\r\n                &lt;div v-else-if=&quot;edit_item&quot;&gt;\r\n                    &lt;button class=&quot;btn btn-primary&quot; v-on:click=&quot;edit_item=false&quot;&gt;&lt;span class=&quot;glyphicon glyphicon-chevron-left&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt; Go back&lt;/button&gt;\r\n                    &lt;div class=&quot;panel panel-default&quot;&gt;\r\n                        &lt;div class=&quot;panel-heading&quot;&gt;Edit {{ selected_item.title }}&lt;/div&gt;\r\n                        &lt;div class=&quot;panel-body&quot;&gt;\r\n                            &lt;form id=&quot;edit_item&quot;&gt;\r\n                                &lt;div class=&quot;form-group&quot;&gt;\r\n                                    &lt;label for=&quot;name&quot;&gt;Name&lt;/label&gt;\r\n                                    &lt;input type=&quot;text&quot; class=&quot;form-control&quot; name=&quot;name&quot; :value=&quot;selected_item.title&quot;&gt;\r\n                                &lt;/div&gt;\r\n                                &lt;div class=&quot;form-group&quot;&gt;\r\n                                    &lt;label for=&quot;count&quot;&gt;Count&lt;/label&gt;\r\n                                    &lt;input type=&quot;number&quot; class=&quot;form-control&quot; name=&quot;count&quot; :value=&quot;selected_item.metadata.count&quot;&gt;\r\n                                &lt;/div&gt;\r\n                                &lt;button type=&quot;submit&quot; class=&quot;btn btn-primary&quot; :class=&quot;{disabled: isDisabled}&quot; v-on:click.prevent=&quot;editItem&quot;&gt;Submit&lt;/button&gt;\r\n                            &lt;/form&gt;\r\n                        &lt;/div&gt;\r\n                    &lt;/div&gt;\r\n                &lt;/div&gt;\r\n                &lt;div v-else&gt;\r\n                    &lt;!---- ITEMS LIST --&gt;\r\n                    &lt;button class=&quot;btn btn-primary&quot; v-on:click=&quot;unselected=true&quot;&gt;&lt;span class=&quot;glyphicon glyphicon-chevron-left&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt; Go back&lt;/button&gt;\r\n                    &lt;button class=&quot;btn btn-primary pull-right&quot; v-on:click=&quot;add_item = true&quot;&gt;&lt;span class=&quot;glyphicon glyphicon-plus&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;Add New Item&lt;/button&gt;\r\n                    &lt;div class=&quot;panel panel-default&quot;&gt;\r\n                        &lt;div class=&quot;panel-heading&quot;&gt;{{ selected_location.title }}&lt;/div&gt;\r\n                        &lt;div class=&quot;panel-body&quot;&gt;\r\n                            &lt;ul class=&quot;list-group&quot;&gt;\r\n                                &lt;button type=&quot;button&quot; class=&quot;list-group-item text-primary location-tab&quot; :class=&quot;{disabled: isDisabled}&quot; v-for=&quot;item in items&quot;&gt;&lt;img v-if=&quot;item.metadata.hasOwnProperty(&#39;picture&#39;)&quot; :src=&quot;item.metadata.picture.url&quot;&gt;{{ item.title }} - {{ item.metadata.count }} &lt;div class=&quot;pull-right&quot;&gt;&lt;span class=&quot;glyphicon glyphicon-pencil&quot; aria-hidden=&quot;true&quot; v-on:click.prevent=&quot;openEdit(item)&quot;&gt;&lt;/span&gt;&lt;span class=&quot;glyphicon glyphicon-trash&quot; aria-hidden=&quot;true&quot; v-on:click.prevent=&quot;deleteItem(item)&quot; style=&quot;padding: 0 5px;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/button&gt;\r\n                            &lt;/ul&gt;\r\n                        &lt;/div&gt;\r\n                    &lt;/div&gt;\r\n                &lt;/div&gt;\r\n            &lt;/div&gt;\r\n        &lt;/div&gt;\r\n    &lt;/div&gt;\r\n\r\n&lt;/template&gt;\r\n\r\n&lt;script&gt;\r\n    export default {\r\n        mounted() {\r\n            var self = this;\r\n            //If location slug was passed show items for that location\r\n            if(this.message)\r\n            {\r\n                swal(this.message);\r\n            }\r\n            if (this.locationSlug)\r\n            {\r\n                this.unselected = false;\r\n                //find location with slug\r\n                var item = this.locations.filter(function (obj)\r\n                {\r\n                    return obj.slug === self.locationSlug;\r\n                });\r\n\r\n                this.selected_location = item[0];\r\n                this.fetchItems(this.selected_location);\r\n            }\r\n        },\r\n        props: [&#39;initial-locations&#39;, &#39;slug&#39;, &#39;location-slug&#39;,&#39;message&#39;],\r\n        data: function () {\r\n            return {\r\n                edit_item: false,\r\n                locations: this.initialLocations,\r\n                isDisabled: false,\r\n                list_disable: false,\r\n                unselected: true,\r\n                items: [],\r\n                add_location: false,\r\n                selected_location: [],\r\n                selected_item: [],\r\n                add_item: false\r\n            };\r\n        },\r\n        methods: {\r\n            fetchItems(location)\r\n            {\r\n                //disable the list and fetch items from laravel\r\n                var self = this;\r\n                this.list_disable = true;\r\n                axios.get(&#39;items/&#39; + location.slug).then(response =&gt; {\r\n                    if (response.data.constructor === Array)\r\n                    {\r\n                        self.items = (response.data);\r\n                        self.selected_location = location;\r\n                        self.unselected = false;\r\n                    } else {\r\n                        self.selected_location = location;\r\n                        self.items = [];\r\n                        self.unselected = false;\r\n                    }\r\n                    self.list_disable = false;\r\n\r\n                });\r\n            },\r\n            addLocation()\r\n            {\r\n                //disable button\r\n                this.isDisabled = true;\r\n                var image = &#39;&#39;;\r\n                var form = $(&quot;#location_form&quot;)[0];\r\n                var data = new FormData(form);\r\n                //Check if image is selected then upload image first\r\n                if ($(&quot;#location_form .media&quot;).val() !== &#39;&#39;)\r\n                {\r\n                    //delete X-csrf-token default header as it is not accepted by cosmic api\r\n                    delete axios.defaults.headers.common[&quot;X-CSRF-TOKEN&quot;];\r\n                    axios.post(&#39;https://api.cosmicjs.com/v1/&#39; + this.slug + &#39;/media&#39;, data).then(function (response)\r\n                    {\r\n                        //set x-csrf-token again\r\n                        window.axios.defaults.headers.common[&#39;X-CSRF-TOKEN&#39;] = window.Laravel.csrfToken;\r\n                        //get image name, append to formdata and send form data to laravel to add location\r\n                        image = response.data.media.name;\r\n                        data.set(&#39;image&#39;, image);\r\n                        axios.post(&#39;locations/new&#39;, data).then(response =&gt; {\r\n                            location.reload(true);\r\n                        });\r\n                    });\r\n                } else {\r\n                    window.axios.defaults.headers.common[&#39;X-CSRF-TOKEN&#39;] = window.Laravel.csrfToken;\r\n                    //send form data to laravel without image\r\n                    axios.post(&#39;locations/new&#39;, data).then(response =&gt; {\r\n                        location.reload(true);\r\n                    });\r\n                }\r\n\r\n            },\r\n            //set selected item and open edit item section\r\n            openEdit(item)\r\n            {\r\n                this.selected_item = item;\r\n                this.edit_item = true;\r\n            },\r\n            addItem() {\r\n                var self = this;\r\n                this.isDisabled = true;\r\n                var form = $(&#39;#item_form&#39;)[0];\r\n                var data = new FormData(form);\r\n                data.append(&#39;location&#39;, this.selected_location._id);\r\n                //Check if image is selected the upload image first\r\n                if ($(&quot;#item_form .media&quot;).val() !== &#39;&#39;)\r\n                {\r\n                    //delete X-csrf-token default header as it is not allowed by cosmic api and post\r\n                    delete axios.defaults.headers.common[&quot;X-CSRF-TOKEN&quot;];\r\n                    axios.post(&#39;https://api.cosmicjs.com/v1/&#39; + this.slug + &#39;/media&#39;, data).then(function (response)\r\n                    {\r\n                        //set x-csrf-token again\r\n                        window.axios.defaults.headers.common[&#39;X-CSRF-TOKEN&#39;] = window.Laravel.csrfToken;\r\n                        //get image name, append to formdata and send form data to laravel to add location\r\n                        var image = response.data.media.name;\r\n                        data.set(&#39;image&#39;, image);\r\n                        axios.post(&#39;items/new&#39;, data).then(response =&gt; {\r\n                            //refresh page BUT pass location_slug, which then makes the app load into the passed location\r\n                            window.location.href = &quot;./&quot; + self.selected_location.slug;\r\n                        });\r\n                    });\r\n                } else {\r\n                    //add header back after post\r\n                    window.axios.defaults.headers.common[&#39;X-CSRF-TOKEN&#39;] = window.Laravel.csrfToken;\r\n                    //send form data to laravel without image\r\n                    axios.post(&#39;items/new&#39;, data).then(response =&gt; {\r\n                        window.location.href = &quot;./&quot; + self.selected_location.slug;\r\n                    });\r\n                }\r\n            },\r\n            editItem()\r\n            {\r\n                //edit item, by sending data to IndexController&#39;s editItem() function\r\n                var self = this;\r\n                var form = $(&quot;#edit_item&quot;)[0];\r\n                var data = new FormData(form);\r\n                this.isDisabled = true;\r\n                data.append(&#39;slug&#39;, this.selected_item.slug);\r\n                if(this.selected_item.metadata.hasOwnProperty(&#39;picture&#39;)){\r\n                    data.append(&#39;image&#39;,this.selected_item.metafields[0].value);\r\n                }\r\n                \r\n                data.append(&#39;location_id&#39;, this.selected_location._id);\r\n                axios.post(&#39;items/edit&#39;, data).then(response =&gt; {\r\n                    //refresh page BUT pass location_slug, which then makes the app load into the passed location\r\n                    window.location.href = &quot;./&quot; + self.selected_location.slug;\r\n                });\r\n            },\r\n            deleteItem(item)\r\n            {\r\n                var self = this;\r\n                swal({\r\n                    title: &#39;Are you sure?&#39;,\r\n                    text: &#39;You will not be able to recover this item!&#39;,\r\n                    type: &#39;warning&#39;,\r\n                    showCancelButton: true,\r\n                    confirmButtonText: &#39;Yes, delete it!&#39;,\r\n                    cancelButtonText: &#39;Nope, still need it&#39;\r\n                }).then(function(){\r\n                    axios.get(&#39;item/&#39; + item.slug + &#39;/delete&#39;).then(response =&gt; {\r\n                    window.location.href = &quot;./&quot; + self.selected_location.slug;\r\n                });\r\n                })\r\n                \r\n            }\r\n\r\n        }\r\n    }\r\n&lt;/script&gt;</pre><h2>The big question, what is going on here (A Lot)?</h2><p>A lot is going on in our vue components as that is where majority of the frontend is, to keep the tutorial simple, the main goal of sections and variables will be stated out, also the comments in the code explain what that section of the code is meant\r\nto accomplish</p><ol><li>We begin by setting up a few boolean (edit_item, add_item, add_location, unselected), these help in switching thw views of our app wheenever a variable has been changed, e.g when edit_item is true, the view is switched to the edit item form</li><li>isDisable and list_disable are used to disable some ui elements sucha s buttons by binding their values to &quot;disabled&quot; class of bootstrap buttons</li><li>Code in the mounted function, simply checks if a location slug was passed and if so switch the view to the location&#39;s items</li><li>The methods created perform calls when actions have been taken, their main logic is stated in comments</li><li>We used axios to make all our calls to laravel backend</li><li>For image uploads, we first check if a file is selected, the upload the selected file first, before creating a new item with its picture metadata set as the returned picture name.</li></ol><h2>Note</h2><ol><li>Make sure the assets were successfully compiled after the changes were made, and if you want to manually compile it simply run npm run production to compile into productin mode.</li><li>We create a self variable and set it to this at the start of most functions because, if we use this in some nested function calls, we begin to loose context for the this variable. More info can be found on this stack overflow post</li></ol><h2>Setting the bucket slug</h2><p>Now we want to set our bucket slug. We want to be able to set it by running an artisan comman so run php artisan make:command SetSlug. Now navigate to app/console/Commands/SetSlug and copy and paste this into it:</p><pre class=\"prism\">&lt;?php\r\n\r\nnamespace App\\Console\\Commands;\r\n\r\nuse Illuminate\\Console\\Command;\r\n\r\nclass SetSlug extends Command {\r\n\r\n    /**\r\n     * The name and signature of the console command.\r\n     *\r\n     * @var string\r\n     */\r\n    protected $signature = &#39;bucket {slug} {read?} {write?}&#39;;\r\n\r\n    /**\r\n     * The console command description.\r\n     *\r\n     * @var string\r\n     */\r\n    protected $description = &#39;Set the bucket slug&#39;;\r\n\r\n    /**\r\n     * Create a new command instance.\r\n     *\r\n     * @return void\r\n     */\r\n    protected $files;\r\n    protected $read;\r\n    protected $write;\r\n\r\n    public function __construct(\\Illuminate\\Filesystem\\Filesystem $files) {\r\n        parent::__construct();\r\n        $this-&gt;files = $files;\r\n        \r\n    }\r\n\r\n    /**\r\n     * Execute the console command.\r\n     *\r\n     * @return mixed\r\n     */\r\n    public function handle() {\r\n        $this-&gt;read = $this-&gt;argument(&#39;slug&#39;);\r\n        $this-&gt;write = $this-&gt;argument(&#39;slug&#39;);\r\n        $config_path = base_path() . &quot;/config/cosmic.php&quot;;\r\n        $content = &quot;&lt;?php\\n\\treturn [\\n\\t\\t&#39;slug&#39; =&gt; &#39;&quot; . $this-&gt;argument(&#39;slug&#39;) . &quot;&#39;,\\n\\t\\t&quot;\r\n                . &quot;&#39;read&#39; =&gt; &#39;&quot; . $this-&gt;argument(&#39;read&#39;).&quot;&#39;,\\n\\t\\t&quot;\r\n                .&quot;&#39;write&#39; =&gt; &#39;&quot; . $this-&gt;argument(&#39;write&#39;).&quot;&#39;,\\n\\t];&quot;;\r\n        $this-&gt;files-&gt;put($config_path, $content);\r\n        echo &quot;Bucket variables set&quot;;\r\n    }\r\n\r\n}</pre><p>What we are doing is opening/creating a configuration file at config/cosmic.php and saving our variables from the command, now the bucket slug can be set with php artisan bucket bucket_slug read_key write_key. Now register it in your app/console/kernel.php\r\non the commands section with</p><pre class=\"prism\">protected $commands = [\r\n        Commands\\SetSlug::class\r\n    ];</pre><h1>Conclusion</h1><p>We were able to create and update items using vue, the Cosmic php library, a bit of guzzle, and a lot of axios. You can feel free to tinker with the code and make your own modifications, a way to delete items, move to new locations, you name it, remember\r\nwe only scratched the surface of the amazing use of Cosmic with Laravel. So go on and create something amazing.</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"wZVBYMSjSE","value":"5919aa2ee5e17073690057b6","object_type":"authors","object":{"_id":"5919aa2ee5e17073690057b6","slug":"kofo-okesola","title":"Kofo Okesola","content":"","metafields":[{"value":"b3fecc70-3970-11e7-8b8c-299270efeba9-kofo.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/b3fecc70-3970-11e7-8b8c-299270efeba9-kofo.jpg","imgix_url":"https://imgix.cosmicjs.com/b3fecc70-3970-11e7-8b8c-299270efeba9-kofo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-15T13:16:29.985Z","created_by":"5357ef811693be2118000001","created":"2017-05-15T13:16:29.985Z","status":"published"}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"yd18ZUZBXY","value":"<p>In this tutorial, we are going to be creating a simple inventory management application with Laravel and Vue.js as our frontend.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"CPCK6XLT6G","value":"a7b78780-3971-11e7-8b8c-299270efeba9-inventory-app-main.png","url":"https://cdn.cosmicjs.com/a7b78780-3971-11e7-8b8c-299270efeba9-inventory-app-main.png","imgix_url":"https://imgix.cosmicjs.com/a7b78780-3971-11e7-8b8c-299270efeba9-inventory-app-main.png"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"fPwf0lIVF8","value":""},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"XVscCXAtKv","value":""}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-05-15T13:20:47.823Z","created_by":"5357ef811693be2118000001","created":"2017-05-15T13:20:47.823Z","status":"published","modified_at":"2020-10-02T02:08:33.459Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-10-02T02:08:33.459Z","unpublish_at":null,"metadata":{"author":{"_id":"5919aa2ee5e17073690057b6","slug":"kofo-okesola","title":"Kofo Okesola","content":"","metafields":[{"value":"b3fecc70-3970-11e7-8b8c-299270efeba9-kofo.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/b3fecc70-3970-11e7-8b8c-299270efeba9-kofo.jpg","imgix_url":"https://imgix.cosmicjs.com/b3fecc70-3970-11e7-8b8c-299270efeba9-kofo.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-15T13:16:29.985Z","created_by":"5357ef811693be2118000001","created":"2017-05-15T13:16:29.985Z","status":"published","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/b3fecc70-3970-11e7-8b8c-299270efeba9-kofo.jpg","imgix_url":"https://imgix.cosmicjs.com/b3fecc70-3970-11e7-8b8c-299270efeba9-kofo.jpg"}}},"teaser":"<p>In this tutorial, we are going to be creating a simple inventory management application with Laravel and Vue.js as our frontend.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/a7b78780-3971-11e7-8b8c-299270efeba9-inventory-app-main.png","imgix_url":"https://imgix.cosmicjs.com/a7b78780-3971-11e7-8b8c-299270efeba9-inventory-app-main.png"},"seo_meta_description":"","published_date":""}},{"_id":"591498a3a57d9d4b390034a3","order":133,"slug":"how-to-build-an-angularjs-events-app","title":"How to Build an AngularJS Events App","content":"<p>In this tutorial I&#39;m going to show you how to create an &quot;Events&quot; app using a little bit of Node, Angular JS and Cosmic. For the sake of understanding how to consume Restful API&rsquo;s, this tutorial will show how to make simple AJAX requests to\r\nthe Cosmic API in order to retrieve, update, and delete data in our Cosmic Bucket. Let&#39;s get started.</p><h2>TL;DR</h2><p><a href=\"https://github.com/cosmicjs/events-app\" rel=\"noopener noreferrer\" target=\"_blank\">Download the GitHub repo.</a><br><a href=\"https://www.cosmicjs.com/apps/events-app\" rel=\"noopener noreferrer\" target=\"_blank\">Check out the demo.</a></p><h2>Getting Started:</h2><p>First, let&rsquo;s make a new directory to build our project in and lets also make a package.json file.</p><pre class=\"prism\">mkdir events-app</pre><pre class=\"prism\">events-app$ touch package.json</pre><p>Now, in your package.json, copy and paste the code below:</p><pre class=\"prism\">//events-app/package.json\r\n{\r\n  &quot;name&quot;: &quot;events-app&quot;,\r\n  &quot;version&quot;: &quot;1.0.0&quot;,\r\n  &quot;main&quot;: &quot;app-server.js&quot;,\r\n  &quot;engines&quot;: {\r\n    &quot;node&quot;: &quot;4.1.2&quot;,\r\n    &quot;npm&quot;: &quot;3.5.2&quot;\r\n  },\r\n  &quot;description&quot;: &quot;&quot;,\r\n  &quot;dependencies&quot;: {\r\n    &quot;bower&quot;: &quot;^1.7.7&quot;,\r\n    &quot;http-server&quot;: &quot;^0.9.0&quot;,\r\n    &quot;gulp&quot;: &quot;^3.9.1&quot;,\r\n    &quot;gulp-autoprefixer&quot;: &quot;^3.1.0&quot;,\r\n    &quot;gulp-concat&quot;: &quot;^2.6.0&quot;,\r\n    &quot;gulp-concat-css&quot;: &quot;^2.2.0&quot;,\r\n    &quot;gulp-minify-css&quot;: &quot;^1.2.4&quot;,\r\n    &quot;gulp-webserver&quot;: &quot;^0.9.1&quot;,\r\n    &quot;wiredep&quot;: &quot;^3.0.0&quot;,\r\n    &quot;express&quot;: &quot;^4.13.3&quot;\r\n  },\r\n  &quot;scripts&quot;: {\r\n    &quot;postinstall&quot;: &quot;bower install&quot;,\r\n    &quot;start&quot;: &quot;npm run production&quot;,\r\n    &quot;production&quot;: &quot;node app-server.js&quot;\r\n  },\r\n  &quot;author&quot;: &quot;&quot;,\r\n  &quot;license&quot;: &quot;ISC&quot;\r\n}\r\n            </pre><p>Second, let&rsquo;s make a bower.json file.</p><pre class=\"prism\">events-app$ touch bower.json</pre><p>Now, in your bower.json, copy and paste the code below:</p><pre class=\"prism\">//events-app/bower.json\r\n{\r\n  &quot;name&quot;: &quot;events-app&quot;,\r\n  &quot;description&quot;: &quot;Events App&quot;,\r\n  &quot;version&quot;: &quot;0.0.0&quot;,\r\n  &quot;homepage&quot;: &quot;https://github.com/cosmicjs/events-app&quot;,\r\n  &quot;license&quot;: &quot;MIT&quot;,\r\n  &quot;private&quot;: true,\r\n  &quot;dependencies&quot;: {\r\n    &quot;angular&quot;: &quot;~1.4.x&quot;,\r\n    &quot;angular-mocks&quot;: &quot;~1.4.x&quot;,\r\n    &quot;angular-bootstrap&quot;: &quot;~1.1.x&quot;,\r\n    &quot;angular-cookies&quot;: &quot;~1.4.x&quot;,\r\n    &quot;angular-route&quot;: &quot;~1.4.x&quot;,\r\n    &quot;angular-ui-router&quot;: &quot;0.2.x&quot;,\r\n    &quot;angular-resource&quot;: &quot;1.4.x&quot;,\r\n    &quot;angular-animate&quot;: &quot;~1.4.x&quot;,\r\n    &quot;ng-dialog&quot;: &quot;0.6.1&quot;,\r\n    &quot;bootstrap&quot;: &quot;3.3.x&quot;,\r\n    &quot;cr-acl&quot;: &quot;&quot;,\r\n    &quot;angular-chosen-localytics&quot;: &quot;*&quot;,\r\n    &quot;bootstrap-chosen&quot;: &quot;*&quot;,\r\n    &quot;ng-flow&quot;: &quot;^2.7.4&quot;,\r\n    &quot;angular-mask&quot;: &quot;*&quot;,\r\n    &quot;checklist-model&quot;: &quot;0.9.0&quot;,\r\n    &quot;angular-ui-notification&quot;: &quot;^0.2.0&quot;,\r\n    &quot;angular-ui-calendar&quot;: &quot;^1.0.2&quot;,\r\n    &quot;angular-ui-switch&quot;: &quot;^0.1.1&quot;,\r\n    &quot;ng-scrollbars&quot;: &quot;^0.0.11&quot;,\r\n    &quot;jquery.scrollbar&quot;: &quot;*&quot;,\r\n    &quot;angular-nvd3&quot;: &quot;*&quot;,\r\n    &quot;infinity-angular-chosen&quot;: &quot;^0.2.0&quot;,\r\n    &quot;angular-flash-alert&quot;: &quot;^2.4.0&quot;,\r\n    &quot;components-font-awesome&quot;: &quot;^4.7.0&quot;,\r\n    &quot;textAngular&quot;: &quot;^1.5.16&quot;,\r\n    &quot;angular-loading-bar&quot;: &quot;^0.9.0&quot;\r\n  },\r\n  &quot;resolutions&quot;: {\r\n    &quot;angular&quot;: &quot;~1.4.x&quot;\r\n  },\r\n  &quot;devDependencies&quot;: {\r\n    &quot;cr-acl&quot;: &quot;^0.5.0&quot;\r\n  }\r\n}\r\n            </pre><p>Config app server:</p><pre class=\"prism\">events-app$ touch <a href=\"app-server.js\">app-server.js</a></pre><pre class=\"prism\">//events-app/app-server.js\r\nvar express = require(&#39;express&#39;)\r\nvar app = express()\r\napp.set(&#39;port&#39;, process.env.PORT || 3000)\r\napp.use(express.static(__dirname))\r\nvar http = require(&#39;http&#39;).Server(app)\r\n// Route\r\napp.get(&#39;/&#39;, (req, res) =&gt; {\r\n  res.sendFile(__dirname + &#39;/index.html&#39;)\r\n})\r\nhttp.listen(app.get(&#39;port&#39;), () =&gt; {\r\n  console.log(&#39;Wedding Site listening on &#39; + app.get(&#39;port&#39;))\r\n})\r\n            </pre><h2>What we&#39;re installing and why:</h2><ol><li>We&#39;re going to use the AngularJS framework to a build single-page application.</li><li>We&#39;re installing angular-ui-router for create multi views.</li><li>We are going to use gulp for build all js and css files into one file.</li></ol><h2>Building our app:</h2><p>Now we&#39;re going to build out our file structure a bit more so that we can organize our angular modules and js files. This is what our events-app directory should look like:</p><pre class=\"prism\">events-app\r\n|----app\r\n|       |----auth\r\n|                 |----auth.ctrl.js\r\n|                 |----auth.service.js\r\n|       |----config\r\n|                 |----config.js\r\n|       |----event\r\n|                 |----add\r\n|                           |----event.add.ctrl.js\r\n|                           |----event.add.mdl.js\r\n|                 |----feed\r\n|                           |----event.feed.ctrl.js\r\n|                           |----event.feed.mdl.js\r\n|                 |----profile\r\n|                           |----event.profile.ctrl.js\r\n|                           |----event.profile.mdl.js\r\n|                 |----event.ctrl.js\r\n|                 |----event.mdl.js\r\n|                 |----event.service.js\r\n|       |----user\r\n|                 |----profile\r\n|                           |----user.profile.ctrl.js\r\n|                           |----user.profile.mdl.js\r\n|                 |----settings\r\n|                           |----user.settings.ctrl.js\r\n|                           |----user.settings.mdl.js\r\n|                 |----user.ctrl.js\r\n|                 |----user.mdl.js\r\n|                 |----user.service.js\r\n|       |----main.mdl.js\r\n|----dist\r\n|       |----css\r\n|       |----img\r\n|       |----js\r\n|----css\r\n|----views\r\n|----gulpfile.js\r\n|----app-server.js\r\n|----bower.json\r\n|----package.json\r\n            </pre><p>Now we we will set up our index.html. Copy and paste the following code into your index.html file:</p><pre class=\"prism markup\">&lt;!DOCTYPE html&gt;\r\n&lt;html lang=&quot;en&quot; ng-app=&quot;main&quot;&gt;\r\n&lt;head&gt;\r\n    &lt;meta charset=&quot;utf-8&quot;&gt;\r\n    &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;\r\n    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;\r\n    &lt;meta name=&quot;description&quot; content=&quot;&quot;&gt;\r\n    &lt;meta name=&quot;author&quot; content=&quot;&quot;&gt;\r\n\r\n    &lt;title&gt;Events App&lt;/title&gt;\r\n\r\n    &lt;!-- bower:css --&gt;\r\n    &lt;!-- endbower --&gt;\r\n\r\n    &lt;!-- Bootstrap Core CSS --&gt;\r\n    &lt;link href=&quot;bower_components/bootstrap/dist/css/bootstrap.min.css&quot; rel=&quot;stylesheet&quot;&gt;\r\n\r\n    &lt;!-- Custom CSS --&gt;\r\n\r\n    &lt;link href=&quot;dist/css/main.min.css&quot; rel=&quot;stylesheet&quot;&gt;\r\n\r\n\r\n    <!-- HTML5 Shim and <a href=\"Respond.js\">Respond.js</a> IE8 support of HTML5 elements and media queries -->\r\n    <!-- WARNING: <a href=\"Respond.js\">Respond.js</a> doesn't work if you view the page via file:// -->\r\n    &lt;!--[if lt IE 9]&gt;\r\n    &lt;script src=&quot;https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js&quot;&gt;&lt;/script&gt;\r\n    &lt;script src=&quot;https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js&quot;&gt;&lt;/script&gt;\r\n    &lt;![endif]--&gt;\r\n\r\n&lt;/head&gt;\r\n&lt;body&gt;\r\n\r\n&lt;div ui-view&gt;&lt;/div&gt;\r\n\r\n&lt;!-- bower:js --&gt;\r\n&lt;!-- endbower --&gt;\r\n\r\n&lt;script src=&quot;dist/js/main.js&quot;&gt;&lt;/script&gt;\r\n&lt;/body&gt;\r\n&lt;/html&gt;\r\n            </pre><p>Here, we are going to target our &quot;root&quot; view to place our angular modules in later. The <a href=\"main.js\">main.js</a> file located in our dist directory is what our <a href=\"gulpfile.js\">gulpfile.js</a> file will spit out after bundling all of our angular modules. &nbsp;Now, set up our <a href=\"gulpfile.js\">gulpfile.js</a> file to bundle all of our js files and export that bundle file to our dist directory. Copy the following code into your <a href=\"gulpfile.js\">gulpfile.js</a> file:</p><pre class=\"prism\">//events-app/gulpfile.js\r\n&#39;use strict&#39;;\r\n\r\nvar gulp = require(&#39;gulp&#39;),\r\n    webserver = require(&#39;gulp-webserver&#39;),\r\n    minifyCSS = require(&#39;gulp-minify-css&#39;),\r\n    concatCss = require(&#39;gulp-concat-css&#39;),\r\n    concat = require(&#39;gulp-concat&#39;),\r\n    wiredep = require(&#39;wiredep&#39;).stream,\r\n    autoprefixer = require(&#39;gulp-autoprefixer&#39;);\r\n\r\ngulp.task(&#39;css&#39;, function () {\r\n  return gulp.src(&#39;css/**/*.css&#39;)\r\n    .pipe(minifyCSS())\r\n    .pipe(concat(&#39;main.min.css&#39;))\r\n    .pipe(autoprefixer())\r\n    .pipe(gulp.dest(&#39;dist/css&#39;));\r\n});\r\n\r\ngulp.task(&#39;js&#39;, function() {\r\n  return gulp.src(&#39;app/**/**/*.js&#39;)\r\n    .pipe(concat(&#39;main.js&#39;))\r\n    .pipe(gulp.dest(&#39;dist/js/&#39;));\r\n});\r\n\r\ngulp.task(&#39;default&#39;, function () {\r\n  gulp.watch(&#39;css/**/*.css&#39;, [&#39;css&#39;]);\r\n  gulp.watch(&#39;app/**/**/*.js&#39;, [&#39;js&#39;]);\r\n  gulp.watch(&#39;bower.json&#39;, [&#39;bower&#39;]);\r\n});\r\n\r\ngulp.task(&#39;bower&#39;, function () {\r\n  gulp.src(&#39;index.html&#39;)\r\n    .pipe(wiredep({\r\n      directory: &#39;bower_components&#39;\r\n    }))\r\n    .pipe(gulp.dest(&#39;&#39;));\r\n});\r\n            </pre><p>After that we can create config.js. Copy and paste the following code into your app/config/config.js file:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    var app = angular\r\n                .module(&#39;main&#39;);\r\n\r\n    app.constant(&#39;BUCKET_SLUG&#39;, &#39;your-bucket-slug&#39;);\r\n    app.constant(&#39;URL&#39;, &#39;https://api.cosmicjs.com/v1/&#39;);\r\n    app.constant(&#39;MEDIA_URL&#39;, &#39;https://api.cosmicjs.com/v1/your-bucket-slug/media&#39;);\r\n    app.constant(&#39;READ_KEY&#39;, &#39;your-read-key&#39;);\r\n    app.constant(&#39;WRITE_KEY&#39;, &#39;your-write-key&#39;);\r\n    app.constant(&#39;DEFAULT_EVENT_IMAGE&#39;, &#39;url-image&#39;);\r\n\r\n})();\r\n            </pre><p>After that we can create our main module. Copy and paste the following code into the app/main.mdl.js file:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;, [\r\n            &#39;ui.router&#39;,\r\n            &#39;ui.bootstrap&#39;,\r\n            &#39;ngMask&#39;,\r\n            &#39;ngCookies&#39;,\r\n            &#39;ngRoute&#39;,\r\n            &#39;ngDialog&#39;,\r\n            &#39;cr.acl&#39;,\r\n            &#39;ui-notification&#39;,\r\n            &#39;ngFlash&#39;,\r\n            &#39;textAngular&#39;,\r\n            &#39;flow&#39;,\r\n            &#39;angular-loading-bar&#39;,\r\n\r\n            &#39;event&#39;,\r\n            &#39;user&#39;\r\n        ])\r\n        .config(config)\r\n        .run(run);\r\n\r\n    config.$inject = [&#39;$stateProvider&#39;, &#39;$urlRouterProvider&#39;, &#39;cfpLoadingBarProvider&#39;, &#39;WRITE_KEY&#39;];\r\n    function config($stateProvider, $urlRouterProvider, cfpLoadingBarProvider, WRITE_KEY) {\r\n        cfpLoadingBarProvider.includeSpinner = false;\r\n\r\n        $urlRouterProvider.otherwise(function ($injector) {\r\n            var $state = $injector.get(&quot;$state&quot;);\r\n            var $location = $injector.get(&quot;$location&quot;);\r\n            var crAcl = $injector.get(&quot;crAcl&quot;);\r\n\r\n            var state = &quot;&quot;;\r\n\r\n            switch (crAcl.getRole()) {\r\n                case &#39;ROLE_USER&#39;:\r\n                    state = &#39;main.event.feed&#39;;\r\n                    break;\r\n            }\r\n\r\n            if (state) $state.go(state);\r\n            else $location.path(&#39;/login&#39;);\r\n        });\r\n\r\n        $stateProvider\r\n            .state(&#39;main&#39;, {\r\n                url: &#39;/&#39;,\r\n                abstract: true,\r\n                templateUrl: &#39;../views/main.html&#39;,\r\n                controller: &#39;UserCtrl as global&#39;,\r\n                data: {\r\n                    is_granted: [&#39;ROLE_USER&#39;]\r\n                }\r\n            })\r\n            .state(&#39;auth&#39;, {\r\n                url: &#39;/login&#39;,\r\n                templateUrl: &#39;../views/auth/login.html&#39;,\r\n                controller: &#39;AuthCtrl as auth&#39;,\r\n                onEnter: [&#39;AuthService&#39;, function(AuthService) {\r\n                    AuthService.clearCredentials();\r\n                }],\r\n                data: {\r\n                    is_granted: [&#39;ROLE_GUEST&#39;]\r\n                }\r\n            });\r\n    }\r\n\r\n    run.$inject = [&#39;$rootScope&#39;, &#39;$cookieStore&#39;, &#39;$http&#39;, &#39;crAcl&#39;, &#39;AuthService&#39;];\r\n    function run($rootScope, $cookieStore, $http, crAcl, AuthService) {\r\n\r\n        $rootScope.globals = $cookieStore.get(&#39;globals&#39;) || {};\r\n        $http.defaults.headers.common[&#39;X-Requested-With&#39;] = &#39;XMLHttpRequest&#39;;\r\n\r\n        crAcl\r\n            .setInheritanceRoles({\r\n                &#39;ROLE_SUPER_ADMIN&#39;: [&#39;ROLE_SUPER_ADMIN&#39;, &#39;ROLE_GUEST&#39;],\r\n                &#39;ROLE_USER&#39;: [&#39;ROLE_USER&#39;, &#39;ROLE_GUEST&#39;],\r\n                &#39;ROLE_GUEST&#39;: [&#39;ROLE_GUEST&#39;]\r\n            });\r\n\r\n        crAcl\r\n            .setRedirect(&#39;auth&#39;);\r\n\r\n        if ($rootScope.globals.currentUser) {\r\n\r\n            crAcl.setRole($rootScope.globals.currentUser.metadata.role);\r\n        }\r\n        else {\r\n            crAcl.setRole();\r\n        }\r\n\r\n    }\r\n\r\n})();\r\n            </pre><p>Now we we will set up our Auth Controller. Copy and paste the following code into your <a href=\"auth.ctrl.js\">auth.ctrl.js</a> file:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .controller(&#39;AuthCtrl&#39;, AuthCtrl);\r\n\r\n    function AuthCtrl(crAcl, $state, AuthService, Flash, $log) {\r\n        var vm = this;\r\n\r\n        vm.login = login;\r\n        vm.register = register;\r\n\r\n        vm.showRegisterForm = false;\r\n\r\n        vm.loginForm = null;\r\n        vm.registerForm = null;\r\n\r\n        vm.credentials = {};\r\n        vm.user = {};\r\n\r\n        function login(credentials) {\r\n            function success(response) {\r\n                function success(response) {\r\n                    if (response.data.status !== &#39;empty&#39;) {\r\n                        var currentUser = response.data.objects[0];\r\n\r\n                        crAcl.setRole(currentUser.metadata.role);\r\n                        AuthService.setCredentials(currentUser);\r\n                        $state.go(&#39;main.event.feed&#39;);\r\n                    }\r\n                    else\r\n                        Flash.create(&#39;danger&#39;, &#39;Incorrect username or password&#39;);\r\n                }\r\n\r\n                function failed(response) {\r\n                    $log.error(response);\r\n                }\r\n\r\n                if (response.data.status !== &#39;empty&#39;)\r\n                    AuthService\r\n                        .checkPassword(credentials)\r\n                        .then(success, failed);\r\n                else\r\n                    Flash.create(&#39;danger&#39;, &#39;Incorrect username or password&#39;);\r\n\r\n                $log.info(response);\r\n            }\r\n\r\n            function failed(response) {\r\n                $log.error(response);\r\n            }\r\n\r\n            if (vm.loginForm.$valid)\r\n                AuthService\r\n                    .checkUsername(credentials)\r\n                    .then(success, failed);\r\n        }\r\n\r\n        function register(credentials) {\r\n            function success(response) {\r\n                $log.info(response);\r\n\r\n                var currentUser = response.data.object.metafields;\r\n\r\n                Flash.create(&#39;success&#39;, &#39;You have successfully signed up!&#39;);\r\n                vm.credentials = {\r\n                    username: currentUser[0].value,\r\n                    password: currentUser[3].value\r\n                };\r\n                vm.showRegisterForm = false;\r\n            }\r\n\r\n            function failed(response) {\r\n                $log.error(response);\r\n            }\r\n\r\n            if (vm.registerForm.$valid)\r\n                AuthService\r\n                    .register(credentials)\r\n                    .then(success, failed);\r\n        }\r\n\r\n    }\r\n})();\r\n            </pre><p>Now we will create our Auth Service in app/auth/auth.service.js:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .service(&#39;AuthService&#39;, function ($http,\r\n                                          $cookieStore,\r\n                                          $q,\r\n                                          $rootScope,\r\n                                          URL, BUCKET_SLUG, READ_KEY, WRITE_KEY) {\r\n            var authService = this;\r\n            $http.defaults.headers.common[&#39;X-Requested-With&#39;] = &#39;XMLHttpRequest&#39;;\r\n\r\n            authService.checkUsername = function (credentials) {\r\n                return $http.get(URL + BUCKET_SLUG + &#39;/object-type/users/search&#39;, {\r\n                    params: {\r\n                        metafield_key: &#39;username&#39;,\r\n                        metafield_value_has: credentials.username,\r\n                        limit: 1,\r\n                        read_key: READ_KEY\r\n                    }\r\n                });\r\n            };\r\n            authService.checkPassword = function (credentials) {\r\n                return $http.get(URL + BUCKET_SLUG + &#39;/object-type/users/search&#39;, {\r\n                    ignoreLoadingBar: true,\r\n                    params: {\r\n                        metafield_key: &#39;password&#39;,\r\n                        metafield_value: credentials.password,\r\n                        limit: 1,\r\n                        read_key: READ_KEY\r\n                    }\r\n                });\r\n            };\r\n            authService.register = function (user) {\r\n\r\n                return $http.post(URL + BUCKET_SLUG + &#39;/add-object&#39;, {\r\n                    title: user.full_name,\r\n                    type_slug: &#39;users&#39;,\r\n                    slug: user.username,\r\n                    metafields: [\r\n                        {\r\n                            key: &quot;username&quot;,\r\n                            type: &quot;text&quot;,\r\n                            value: user.username\r\n                        },\r\n                        {\r\n                            key: &quot;email&quot;,\r\n                            type: &quot;text&quot;,\r\n                            value: user.email\r\n                        },\r\n                        {\r\n                            key: &quot;full_name&quot;,\r\n                            type: &quot;text&quot;,\r\n                            value: user.full_name\r\n                        },\r\n                        {\r\n                            key: &quot;password&quot;,\r\n                            type: &quot;text&quot;,\r\n                            value: user.password\r\n                        },\r\n                        {\r\n                            key: &quot;image&quot;,\r\n                            type: &quot;file&quot;,\r\n                            value: &quot;3b2180f0-2c40-11e7-85ac-e98751218524-1493421969_male.png&quot;\r\n                        },\r\n                        {\r\n                            key: &quot;role&quot;,\r\n                            type: &quot;radio-buttons&quot;,\r\n                            options: [\r\n                                {\r\n                                    value: &quot;ROLE_USER&quot;\r\n                                },\r\n                                {\r\n                                    value: &quot;ROLE_SUPER_ADMIN&quot;\r\n                                }\r\n                            ],\r\n                            value: &quot;ROLE_USER&quot;\r\n                        }\r\n                    ],\r\n\r\n                    write_key: WRITE_KEY\r\n                });\r\n            };\r\n            authService.setCredentials = function (user) {\r\n                $rootScope.globals = {\r\n                    currentUser: user\r\n                };\r\n\r\n                $cookieStore.put(&#39;globals&#39;, $rootScope.globals);\r\n            };\r\n            authService.clearCredentials = function () {\r\n                var deferred = $q.defer();\r\n                $cookieStore.remove(&#39;globals&#39;);\r\n\r\n                if (!$cookieStore.get(&#39;globals&#39;)) {\r\n                    $rootScope.globals = {};\r\n                    deferred.resolve(&#39;Credentials clear success&#39;);\r\n                } else {\r\n                    deferred.reject(&#39;Can\\&#39;t clear credentials&#39;);\r\n                }\r\n\r\n                return deferred.promise;\r\n            };\r\n        });\r\n})();\r\n            </pre><h2>What&#39;s going on here:</h2><ol><li>We are using the ui-router for config routes.</li><li>We created Auth Service for our asynchronous calls to our Cosmic API.</li><li>We created Auth Controller for checking credentials.</li></ol><p>Create User Service for get and update User, copy and paste the code below:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .service(&#39;UserService&#39;, function ($http,\r\n                                          $cookieStore,\r\n                                          $q,\r\n                                          $rootScope,\r\n                                          URL, BUCKET_SLUG, READ_KEY, WRITE_KEY) {\r\n            $http.defaults.headers.common[&#39;X-Requested-With&#39;] = &#39;XMLHttpRequest&#39;;\r\n\r\n            this.getCurrentUser = function (ignoreLoadingBar) {\r\n                return $http.get(URL + BUCKET_SLUG + &#39;/object/&#39; + $rootScope.globals.currentUser.slug, {\r\n                    ignoreLoadingBar: ignoreLoadingBar,\r\n                    params: {\r\n                        read_key: READ_KEY\r\n                    }\r\n                });\r\n            };\r\n            this.getUser = function (slug, ignoreLoadingBar) {\r\n                return $http.get(URL + BUCKET_SLUG + &#39;/object/&#39; + slug, {\r\n                    ignoreLoadingBar: ignoreLoadingBar,\r\n                    params: {\r\n                        read_key: READ_KEY\r\n                    }\r\n                });\r\n            };\r\n            this.updateUser = function (user) {\r\n                user.write_key = WRITE_KEY;\r\n\r\n                return $http.put(URL + BUCKET_SLUG + &#39;/edit-object&#39;, user, {\r\n                    ignoreLoadingBar: false\r\n                });\r\n            };\r\n\r\n        });\r\n})();\r\n            </pre><p>Create User Controller for get current user and log out, copy and paste the code below:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .controller(&#39;UserCtrl&#39;, UserCtrl);\r\n\r\n    function UserCtrl($rootScope, $scope, $state, AuthService, Flash, $log) {\r\n        var vm = this;\r\n\r\n        vm.currentUser = $rootScope.globals.currentUser.metadata;\r\n\r\n        vm.logout = logout;\r\n\r\n        function logout() {\r\n            function success(response) {\r\n                $state.go(&#39;auth&#39;);\r\n\r\n                $log.info(response);\r\n            }\r\n\r\n            function failed(response) {\r\n                $log.error(response);\r\n            }\r\n\r\n            AuthService\r\n                .clearCredentials()\r\n                .then(success, failed);\r\n        }\r\n\r\n        $scope.state = $state;\r\n\r\n    }\r\n})();\r\n            </pre><p>Next we will create our Create User Module:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;user&#39;, [\r\n            &#39;user.profile&#39;,\r\n            &#39;user.settings&#39;\r\n        ])\r\n        .config(config);\r\n\r\n    config.$inject = [&#39;$stateProvider&#39;, &#39;$urlRouterProvider&#39;];\r\n    function config($stateProvider, $urlRouterProvider) {\r\n\r\n        $stateProvider\r\n            .state(&#39;main.user&#39;, {\r\n                url: &#39;user&#39;,\r\n                abstract: true,\r\n                data: {\r\n                    is_granted: [&#39;ROLE_USER&#39;]\r\n                }\r\n            });\r\n    }\r\n})();\r\n            </pre><h2>What&#39;s going on here:</h2><ol><li>We created User Service for our asynchronous calls to our Cosmic API.</li><li>We created User Controller for getting current user and logout.</li></ol><p>Next we will create our Event Service to get, update, add delete Events from the Cosmic API:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .service(&#39;EventService&#39;, function ($http,\r\n                                          $cookieStore,\r\n                                          $q,\r\n                                          $rootScope,\r\n                                          URL, BUCKET_SLUG, READ_KEY, WRITE_KEY, MEDIA_URL) {\r\n\r\n            $http.defaults.headers.common[&#39;X-Requested-With&#39;] = &#39;XMLHttpRequest&#39;;\r\n\r\n            this.getEvents = function () {\r\n                return $http.get(URL + BUCKET_SLUG + &#39;/object-type/events&#39;, {\r\n                    params: {\r\n                        limit: 100,\r\n                        read_key: READ_KEY\r\n                    }\r\n                });\r\n            };\r\n            this.getEventsByUsername = function (username, ignoreLoadingBar) {\r\n                return $http.get(URL + BUCKET_SLUG + &#39;/object-type/events/search&#39;,\r\n                    {\r\n                        ignoreLoadingBar: ignoreLoadingBar,\r\n                        params: {\r\n                            metafield_key: &#39;user&#39;,\r\n                            metafield_object_slug: username,\r\n                            limit: 10,\r\n                            read_key: READ_KEY\r\n                        }\r\n                    }\r\n                );\r\n            };\r\n            this.getEventById = function (slug) {\r\n                return $http.get(URL + BUCKET_SLUG + &#39;/object/&#39; + slug, {\r\n                    params: {\r\n                        read_key: READ_KEY\r\n                    }\r\n                });\r\n            };\r\n            this.updateEvent = function (event) {\r\n                event.write_key = WRITE_KEY;\r\n\r\n                return $http.put(URL + BUCKET_SLUG + &#39;/edit-object&#39;, event);\r\n            };\r\n            this.removeEvent = function (slug) {\r\n                return $http.delete(URL + BUCKET_SLUG + &#39;/&#39; + slug, {\r\n                    ignoreLoadingBar: true,\r\n                    headers:{\r\n                        &#39;Content-Type&#39;: &#39;application/json&#39;\r\n                    },\r\n                    data: {\r\n                        write_key: WRITE_KEY\r\n                    }\r\n                });\r\n            };\r\n            this.createEvent = function (event) {\r\n                event.write_key = WRITE_KEY;\r\n\r\n                var beginDate = new Date(event.metafields[1].value);\r\n                var endDate = new Date(event.metafields[2].value);\r\n\r\n                event.metafields[1].value = beginDate.getFullYear() + &#39;-&#39; + (beginDate.getMonth() + 1) + &#39;-&#39; + beginDate.getDate();\r\n                event.metafields[2].value = endDate.getFullYear() + &#39;-&#39; + (beginDate.getMonth() + 1) + &#39;-&#39; + endDate.getDate();\r\n\r\n                event.slug = event.title;\r\n                event.type_slug = &#39;events&#39;;\r\n\r\n                event.metafields[4] = {\r\n                    key: &quot;user&quot;,\r\n                    type: &quot;object&quot;,\r\n                    object_type: &quot;users&quot;,\r\n                    value: $rootScope.globals.currentUser._id\r\n                };\r\n                return $http.post(URL + BUCKET_SLUG + &#39;/add-object&#39;, event);\r\n            };\r\n            this.upload = function (file) {\r\n                var fd = new FormData();\r\n                fd.append(&#39;media&#39;, file);\r\n                fd.append(&#39;write_key&#39;, WRITE_KEY);\r\n\r\n                var defer = $q.defer();\r\n\r\n                var xhttp = new XMLHttpRequest();\r\n\r\n                xhttp.upload.addEventListener(&quot;progress&quot;,function (e) {\r\n                    defer.notify(parseInt(e.loaded * 100 / e.total));\r\n                });\r\n                xhttp.upload.addEventListener(&quot;error&quot;,function (e) {\r\n                    defer.reject(e);\r\n                });\r\n\r\n                xhttp.onreadystatechange = function() {\r\n                    if (xhttp.readyState === 4) {\r\n                        defer.resolve(JSON.parse(xhttp.response)); //Outputs a DOMString by default\r\n                    }\r\n                };\r\n\r\n                xhttp.open(&quot;post&quot;, MEDIA_URL, true);\r\n\r\n                xhttp.send(fd);\r\n\r\n                return defer.promise;\r\n            }\r\n        });\r\n})();\r\n            </pre><p>Our Event Controller will get all events and remove events:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .controller(&#39;EventCtrl&#39;, EventCtrl);\r\n\r\n    function EventCtrl(EventService, Notification, $log, $rootScope, DEFAULT_EVENT_IMAGE) {\r\n        var vm = this;\r\n\r\n        vm.getEvents = getEvents;\r\n        vm.removeEvent = removeEvent;\r\n        vm.DEFAULT_EVENT_IMAGE = DEFAULT_EVENT_IMAGE;\r\n\r\n        function getEvents(username) {\r\n            function success(response) {\r\n                $log.info(response);\r\n\r\n                vm.events = response.data.objects;\r\n            }\r\n\r\n            function failed(response) {\r\n                $log.error(response);\r\n            }\r\n            console.log(username);\r\n\r\n            EventService\r\n                .getEventsByUsername(username)\r\n                .then(success, failed);\r\n        }\r\n\r\n        function removeEvent(slug) {\r\n            function success(response) {\r\n                $log.info(response);\r\n\r\n                getEvents($rootScope.globals.currentUser.metadata.username);\r\n\r\n                Notification.success(&#39;Deleted&#39;);\r\n            }\r\n\r\n            function failed(response) {\r\n                Notification.error(response.data.message);\r\n\r\n                $log.error(response);\r\n            }\r\n\r\n            EventService\r\n                .removeEvent(slug)\r\n                .then(success, failed);\r\n        }\r\n    }\r\n})();\r\n            </pre><p>Our Event Module will render our events view:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;event&#39;, [\r\n            &#39;event.profile&#39;,\r\n            &#39;event.feed&#39;,\r\n            &#39;event.add&#39;\r\n        ])\r\n        .config(config);\r\n\r\n    config.$inject = [&#39;$stateProvider&#39;, &#39;$urlRouterProvider&#39;];\r\n    function config($stateProvider, $urlRouterProvider) {\r\n\r\n        $stateProvider\r\n            .state(&#39;main.event&#39;, {\r\n                url: &#39;events&#39;,\r\n                views: {\r\n                    &#39;&#39;: {\r\n                        templateUrl: &#39;../views/event/events.html&#39;,\r\n                        controller: &#39;EventCtrl as vm&#39;\r\n                    }\r\n                },\r\n                data: {\r\n                    is_granted: [&#39;ROLE_USER&#39;]\r\n                }\r\n            });\r\n    }\r\n\r\n})();\r\n            </pre><h2>What&#39;s going on here:</h2><ol><li>We created Event Service for our asynchronous calls to our Cosmic API. We can create, update, remove and getting Events.</li><li>We created Event Controller for getting all events and removing events.</li><li>We created an Event Module to render our views.</li></ol><p>Now let&#39;s create our Event Add Controller for adding events:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;main&#39;)\r\n        .controller(&#39;EventAddCtrl&#39;, EventAddCtrl);\r\n\r\n    function EventAddCtrl(EventService, Notification, $state, $log, $scope, MEDIA_URL, DEFAULT_EVENT_IMAGE, $timeout) {\r\n        var vm = this;\r\n\r\n        vm.createEvent = createEvent;\r\n        vm.cancelUpload = cancelUpload;\r\n        vm.upload = upload;\r\n\r\n        vm.dateBeginPicker = false;\r\n        vm.dateEndPicker = false;\r\n        vm.contentEditor = true;\r\n        vm.uploadProgress = 0;\r\n\r\n        vm.event = {\r\n            title: null,\r\n            slug: null,\r\n            content: null,\r\n            metafields: [\r\n                {\r\n                    key: &quot;image&quot;,\r\n                    type: &quot;file&quot;,\r\n                    value: null\r\n                },\r\n                {\r\n                    key: &quot;date_begin&quot;,\r\n                    type: &quot;date&quot;,\r\n                    value: null\r\n                },\r\n                {\r\n                    key: &quot;date_end&quot;,\r\n                    type: &quot;date&quot;,\r\n                    value: null\r\n                },\r\n                {\r\n                    key: &quot;type&quot;,\r\n                    type: &quot;select-dropdown&quot;,\r\n                    options: [\r\n                        {\r\n                            key: &quot;social&quot;,\r\n                            value: &quot;Social&quot;\r\n                        },\r\n                        {\r\n                            key: &quot;fun&quot;,\r\n                            value: &quot;Fun&quot;\r\n                        }\r\n                    ],\r\n                    value: &quot;Social&quot;\r\n                }\r\n            ]\r\n        };\r\n\r\n        $timeout(function() {\r\n            vm.event.metafields[1].value = new Date();\r\n            vm.event.metafields[2].value = new Date();\r\n        }, 100);\r\n\r\n        vm.flow = {};\r\n        vm.background = {\r\n            &#39;background-image&#39;: &#39;url(&#39; + DEFAULT_EVENT_IMAGE + &#39;)&#39;\r\n        };\r\n\r\n        vm.flowConfig = {\r\n            target: MEDIA_URL,\r\n            singleFile: true\r\n        };\r\n\r\n        function createEvent() {\r\n            if (vm.flow.files[0])\r\n                upload();\r\n            else\r\n                _createEvent(vm.event);\r\n        }\r\n\r\n        function _createEvent(event) {\r\n            function success(response) {\r\n                $log.info(response);\r\n\r\n                Notification.success(\r\n                    {\r\n                        message: &#39;Created&#39;,\r\n                        delay: 800,\r\n                        replaceMessage: true\r\n                    }\r\n                );\r\n\r\n                $state.go(&#39;main.event&#39;);\r\n            }\r\n\r\n            function failed(response) {\r\n                Notification.error(\r\n                    {\r\n                        message: response.data.error,\r\n                        delay: 4000,\r\n                        replaceMessage: true\r\n                    }\r\n                );\r\n\r\n                $log.error(response);\r\n            }\r\n\r\n            EventService\r\n                .createEvent(event)\r\n                .then(success, failed);\r\n        }\r\n\r\n        function cancelUpload() {\r\n            vm.flow.cancel();\r\n            vm.background = {\r\n                &#39;background-image&#39;: &#39;url(&#39; + DEFAULT_EVENT_IMAGE.url + &#39;)&#39;\r\n            };\r\n        }\r\n\r\n        $scope.$watch(&#39;vm.flow.files[0].file.name&#39;, function () {\r\n            if (!vm.flow.files[0]) {\r\n                return ;\r\n            }\r\n            var fileReader = new FileReader();\r\n            fileReader.readAsDataURL(vm.flow.files[0].file);\r\n            fileReader.onload = function (event) {\r\n                $scope.$apply(function () {\r\n                    vm.background = {\r\n                        &#39;background-image&#39;: &#39;url(&#39; + event.target.result + &#39;)&#39;\r\n                    };\r\n                });\r\n            };\r\n        });\r\n\r\n        function upload() {\r\n            EventService\r\n                .upload(vm.flow.files[0].file)\r\n                .then(function(response){\r\n\r\n                    vm.event.metafields[0].value = response.media.name;\r\n\r\n                    createEvent(vm.event);\r\n\r\n                    vm.flow.cancel();\r\n                    vm.uploadProgress = 0;\r\n\r\n                }, function(){\r\n                    console.log(&#39;failed :(&#39;);\r\n                }, function(progress){\r\n                    vm.uploadProgress = progress;\r\n                });\r\n\r\n        }\r\n\r\n    }\r\n})();\r\n            </pre><p>Next we create the Event Module:</p><pre class=\"prism\">(function () {\r\n    &#39;use strict&#39;;\r\n\r\n    angular\r\n        .module(&#39;event.add&#39;, [])\r\n        .config(config);\r\n\r\n    config.$inject = [&#39;$stateProvider&#39;, &#39;$urlRouterProvider&#39;];\r\n    function config($stateProvider, $urlRouterProvider) {\r\n\r\n        $stateProvider\r\n            .state(&#39;main.event.add&#39;, {\r\n                url: &#39;/add&#39;,\r\n                views: {\r\n                    &#39;@main&#39;: {\r\n                        templateUrl: &#39;../views/event/event.profile.html&#39;,\r\n                        controller: &#39;EventAddCtrl as vm&#39;\r\n                    }\r\n                },\r\n                data: {\r\n                    is_granted: [&#39;ROLE_USER&#39;]\r\n                }\r\n            });\r\n    }\r\n\r\n})();\r\n            </pre><h2>What&#39;s going on here:</h2><ol><li>We can add events.</li><li>We can upload images.</li></ol><h2>Conclusion:</h2><p>We were able to create a pretty complicated app to manage users, sessions, adding / editing events all through the Cosmic API. I hope you enjoyed this tutorial as much as I did, if you have any questions <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\">join our community on Slack</a>.</p><p><br></p>","metafields":[{"object_type":"authors","value":"5914999aa57d9d4b390034d5","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5914999aa57d9d4b390034d5","slug":"dmytro-kutsaniuk","title":"Dmytro Kutsaniuk","content":"","metafields":[{"value":"e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg","imgix_url":"https://imgix.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-11T17:04:26.061Z","created_by":"5357ef811693be2118000001","created":"2017-05-11T17:04:26.061Z","status":"published"}},{"value":"<p><span style='color: rgb(0, 0, 0); font-family: \"Open Sans\", sans-serif; font-size: 14px; text-align: start; background-color: rgb(255, 255, 255);'>In this tutorial I&#39;m going to show you how to create an &quot;Events&quot; app using a little bit of Node, Angular JS and Cosmic. For the sake of understanding how to consume Restful API&rsquo;s, this tutorial will show how to make simple AJAX requests to the Cosmic API in order to retrieve, update, and delete data in our Cosmic Buckets.</span></p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"6ce43dc0-36b4-11e7-8843-0d734648413f-angular-events-app.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/6ce43dc0-36b4-11e7-8843-0d734648413f-angular-events-app.png","imgix_url":"https://imgix.cosmicjs.com/6ce43dc0-36b4-11e7-8843-0d734648413f-angular-events-app.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-05-11T17:00:19.616Z","created_by":"5357ef811693be2118000001","created":"2017-05-11T17:00:19.616Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5914999aa57d9d4b390034d5","slug":"dmytro-kutsaniuk","title":"Dmytro Kutsaniuk","content":"","metafields":[{"value":"e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg","imgix_url":"https://imgix.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-11T17:04:26.061Z","created_by":"5357ef811693be2118000001","created":"2017-05-11T17:04:26.061Z","status":"published","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg","imgix_url":"https://imgix.cosmicjs.com/e265ea60-366b-11e7-9161-61cd2f0acd2a-kutsaniuk.jpeg"}}},"teaser":"<p><span style='color: rgb(0, 0, 0); font-family: \"Open Sans\", sans-serif; font-size: 14px; text-align: start; background-color: rgb(255, 255, 255);'>In this tutorial I&#39;m going to show you how to create an &quot;Events&quot; app using a little bit of Node, Angular JS and Cosmic. For the sake of understanding how to consume Restful API&rsquo;s, this tutorial will show how to make simple AJAX requests to the Cosmic API in order to retrieve, update, and delete data in our Cosmic Buckets.</span></p>","featured_image":{"url":"https://cdn.cosmicjs.com/6ce43dc0-36b4-11e7-8843-0d734648413f-angular-events-app.png","imgix_url":"https://imgix.cosmicjs.com/6ce43dc0-36b4-11e7-8843-0d734648413f-angular-events-app.png"}}},{"_id":"590b73e7200ca2723f002cfc","order":134,"slug":"how-to-build-a-react-graphql-static-site-served-from-aws-cloudfront","title":"How To Build a React GraphQL Static Site Served From AWS CloudFront","content":"<p><img src=\"https://cosmicjs.imgix.net/06ffb180-314e-11e7-8b84-cbc54315248d-react-graphql-aws-static-site.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>So you&#39;ve read all the great reasons to <a href=\"https://www.cosmicjs.com/why-cms-api\">go API-first</a>, and you&#39;ve produced a great looking single page app to display your content. But how do you serve it to the user?</p><p>You COULD set up a full Node server to host, route and serve your site. Or you could just host your website statically using AWS S3 and CloudFront! This means you simply put your website source files online, and they&#39;re served immediately to the user,\r\nno server processing needed.</p><p>There are several big advantages to static hosting with client-side rendering: + Blazing Fast (no server preprocessing) + Really simply (no server architecture to maintain) + Crazy Available (your server can&#39;t break if there isn&#39;t one) + Instant\r\nUpdates (don&#39;t have to wait for the site to rebuild to see your changes)</p><p>Setting up a static site is easier than you might think, and this tutorial walks you through how to set up a static website that gets its data from Cosmic and renders on the client in under 10 minutes!</p><p>We&#39;ll also cover some tips and tricks on getting the most out of your static site that you might not have known, which will be useful, even if you&#39;re not building a purely static site.</p><h2>TL;DR</h2><p><a href=\"http://react-graphql-blog.cosmicapp.co\" rel=\"noopener noreferrer\" target=\"_blank\">View the demo here</a></p><p><a href=\"https://github.com/cosmicjs/react-graphql-static-site\" rel=\"noopener noreferrer\" target=\"_blank\">Check out the React GraphQL Static Site codebase</a></p><h2>The site we&#39;ll be hosting</h2><p>Our example website is a static single page app, in our case using <code>webpack</code> and <code>react</code>, with <code>react-router</code> handling routing, and<a href=\"https://www.cosmicjs.com/docs/graphql\">&nbsp;Cosmic&#39;s GraphQL API</a> to fetch data (tutorial coming soon).</p><p>If you&#39;d like to follow along at home, you can <a href=\"https://github.com/cosmicjs/react-graphql-static-site\" rel=\"noopener noreferrer\" target=\"_blank\">download our demo code here</a>.</p><p>Our demo site is structured as follows:</p><div><pre style=' font-family: Consolas, Menlo, \"Liberation Mono\", Courier, monospace; font-size: 12px; background: rgb(245, 245, 245);'>.\r\n├── asset-manifest.json\r\n├── favicon.ico\r\n├── index.html\r\n└── static\r\n    └── js\r\n        ├── main.3c8c3c1e.js\r\n        ├── manifest.4a707e54.js\r\n        ├── vendor.94287fcf.js\r\n        ├── vendorConstant.0e34bc16.js\r\n        └── vendorReactApollo.c8e28b23.js</pre></div><p>We&#39;ve broken our <code>js</code> into several different files so that they can be cached independently; if <code>vendorReactApollo</code> is the only file that changes, it&#39;s the only file that our clients will have to re-get when they revisit our site.</p><p><code>index.html</code> is the only HTML file we need to deploy, and it&#39;s minimal:</p><div><pre style=' font-family: Consolas, Menlo, \"Liberation Mono\", Courier, monospace; font-size: 12px; background: rgb(245, 245, 245);'><span style=\" color: rgb(153, 153, 153);\">&lt;!DOCTYPE html&gt;</span>\r\n&lt;<span style=\"color: navy;\">html</span> <span style=\"color: teal;\">lang</span>=<span style=\"color: rgb(187, 136, 68);\">&quot;en&quot;</span>&gt;\r\n   &lt;<span style=\"color: navy;\">head</span>&gt;\r\n      &lt;<span style=\"color: navy;\">meta</span> <span style=\"color: teal;\">charset</span>=<span style=\"color: rgb(187, 136, 68);\">&quot;utf-8&quot;</span>&gt;\r\n      &lt;<span style=\"color: navy;\">meta</span> <span style=\"color: teal;\">name</span>=<span style=\"color: rgb(187, 136, 68);\">&quot;viewport&quot;</span> <span style=\"color: teal;\">content</span>=<span style=\"color: rgb(187, 136, 68);\">&quot;width=device-width,initial-scale=1,shrink-to-fit=no&quot;</span>&gt;\r\n      &lt;<span style=\"color: navy;\">link</span> <span style=\"color: teal;\">rel</span>=<span style=\"color: rgb(187, 136, 68);\">&quot;shortcut icon&quot;</span> <span style=\"color: teal;\">href</span>=<span style=\"color: rgb(187, 136, 68);\">&quot;/favicon.ico&quot;</span>&gt;\r\n      &lt;<span style=\"color: navy;\">title</span>&gt;React App&lt;/<span style=\"color: navy;\">title</span>&gt;\r\n   &lt;/<span style=\"color: navy;\">head</span>&gt;\r\n   &lt;<span style=\"color: navy;\">body</span>&gt;\r\n      &lt;<span style=\"color: navy;\">div</span> <span style=\"color: teal;\">id</span>=<span style=\"color: rgb(187, 136, 68);\">&quot;root&quot;</span>&gt; &lt;/<span style=\"color: navy;\">div</span>&gt;\r\n      &lt;<span style=\"color: navy;\">script</span> <span style=\"color: teal;\">type</span>=<span style=\"color: rgb(187, 136, 68);\">&quot;text/javascript&quot;</span> <span style=\"color: teal;\">src</span>=<span style=\"color: rgb(187, 136, 68);\">&quot;/static/js/manifest.4a707e54.js&quot;</span>&gt; &lt;/<span style=\"color: navy;\">script</span>&gt;\r\n      &lt;<span style=\"color: navy;\">script</span> <span style=\"color: teal;\">type</span>=<span style=\"color: rgb(187, 136, 68);\">&quot;text/javascript&quot;</span> <span style=\"color: teal;\">src</span>=<span style=\"color: rgb(187, 136, 68);\">&quot;/static/js/vendorConstant.0e34bc16.js&quot;</span>&gt;&lt;/<span style=\"color: navy;\">script</span>&gt;\r\n      &lt;<span style=\"color: navy;\">script</span> <span style=\"color: teal;\">type</span>=<span style=\"color: rgb(187, 136, 68);\">&quot;text/javascript&quot;</span> <span style=\"color: teal;\">src</span>=<span style=\"color: rgb(187, 136, 68);\">&quot;/static/js/vendorReactApollo.c8e28b23.js&quot;</span>&gt;&lt;/<span style=\"color: navy;\">script</span>&gt;\r\n      &lt;<span style=\"color: navy;\">script</span> <span style=\"color: teal;\">type</span>=<span style=\"color: rgb(187, 136, 68);\">&quot;text/javascript&quot;</span> <span style=\"color: teal;\">src</span>=<span style=\"color: rgb(187, 136, 68);\">&quot;/static/js/vendor.94287fcf.js&quot;</span>&gt;&lt;/<span style=\"color: navy;\">script</span>&gt;\r\n      &lt;<span style=\"color: navy;\">script</span> <span style=\"color: teal;\">type</span>=<span style=\"color: rgb(187, 136, 68);\">&quot;text/javascript&quot;</span> <span style=\"color: teal;\">src</span>=<span style=\"color: rgb(187, 136, 68);\">&quot;/static/js/main.3c8c3c1e.js&quot;</span>&gt;&lt;/<span style=\"color: navy;\">script</span>&gt;\r\n   &lt;/<span style=\"color: navy;\">body</span>&gt;\r\n&lt;/<span style=\"color: navy;\">html</span>&gt;</pre></div><p>With this single page app structure, we&#39;re ready to start serving it as a static site using AWS S3!</p><h2>S3 setup</h2><p>AWS S3 buckets can serve their contents as static web pages with little setup. This provides a hassle free solution for serving static files, like our website, quickly and simply.</p><p>Enabling website hosting on S3 requires a few steps:</p><h3>1. Bucket Policy</h3><p><img alt=\"Enable Permissions\" src=\"https://bytebucket.org/codogo/cosmic-js-cloudfront-blog-post/raw/b27d874687dbed8fa4eda249c6962a25ffecfd4f/img/s3_permissions_1.png\" class=\"fr-fic fr-dii\"></p><p>First, you need to set permissions for all files in your S3 bucket so they can be read by anyone. You can copy-paste the code we&#39;ve used, and replace our bucket name (<code>codogo-cosmic-js-demo-blog</code>) with your own:</p><div><pre style=' font-family: Consolas, Menlo, \"Liberation Mono\", Courier, monospace; font-size: 12px; background: rgb(245, 245, 245);'>{\r\n    <span style=\"color: navy;\">&quot;Version&quot;</span>: <span style=\"color: rgb(187, 136, 68);\">&quot;2012-10-17&quot;</span>,\r\n    <span style=\"color: navy;\">&quot;Statement&quot;</span>: [\r\n        {\r\n            <span style=\"color: navy;\">&quot;Sid&quot;</span>: <span style=\"color: rgb(187, 136, 68);\">&quot;AddPerm&quot;</span>,\r\n            <span style=\"color: navy;\">&quot;Effect&quot;</span>: <span style=\"color: rgb(187, 136, 68);\">&quot;Allow&quot;</span>,\r\n            <span style=\"color: navy;\">&quot;Principal&quot;</span>: <span style=\"color: rgb(187, 136, 68);\">&quot;*&quot;</span>,\r\n            <span style=\"color: navy;\">&quot;Action&quot;</span>: <span style=\"color: rgb(187, 136, 68);\">&quot;s3:GetObject&quot;</span>,\r\n            <span style=\"color: navy;\">&quot;Resource&quot;</span>: <span style=\"color: rgb(187, 136, 68);\">&quot;arn:aws:s3:::codogo-cosmic-js-demo-blog/*&quot;</span>\r\n        }\r\n    ]\r\n}</pre></div><h3>2. Website Hosting</h3><p><img alt=\"Enable Website Hosting\" src=\"https://bytebucket.org/codogo/cosmic-js-cloudfront-blog-post/raw/b27d874687dbed8fa4eda249c6962a25ffecfd4f/img/s3_website_1.png\" class=\"fr-fic fr-dii\"></p><p>Click on <code>Static website hosting</code>, and fill in the details as below.</p><p><img alt=\"Enable index.html\" src=\"https://bytebucket.org/codogo/cosmic-js-cloudfront-blog-post/raw/b27d874687dbed8fa4eda249c6962a25ffecfd4f/img/s3_website_2.png\" class=\"fr-fic fr-dii\"></p><p>The <em>Index Document</em> is required, and tells the S3 bucket which file to serve if we navigate to the root of our website.</p><p>The <em>Error Document</em> is the file that&#39;s served whenever a client navigates to a file that doesn&#39;t exist in the bucket. This is the most important setting for this tutorial, as it means no matter which path the user navigates to, they are still served our <code>index.html</code> file.</p><h3>3. Upload your files</h3><p><img alt=\"Show Files\" src=\"https://bytebucket.org/codogo/cosmic-js-cloudfront-blog-post/raw/b27d874687dbed8fa4eda249c6962a25ffecfd4f/img/s3_files_1.png\" class=\"fr-fic fr-dii\"></p><p>Upload your site to the root of your S3 bucket and your site will be ready to serve.</p><h3>Testing the hosting out</h3><p>Navigate to the <em>Endpoint</em> URL shown in the <code>Static Website Hosting</code> box, and you should see your web app! You can <a href=\"http://react-graphql-blog.cosmicapp.co/\" rel=\"noopener noreferrer\" target=\"_blank\">check out our demo here</a>.</p><p>Try navigating to other pages and refreshing the page - you should see that your web app loads as if the pages you&#39;re navigating to actually exist on the server.</p><h3>Next steps</h3><p>For a small site with low, unimportant traffic - for example, a company internal website - this hosting would be sufficient. However, there are two main issues with this hosting solution:</p><ol><li><strong>Served from one region</strong>: The website will only be served from the AWS region where your bucket lives, so people in other parts of the world will see poor performance.</li><li><strong>HTTP 404 Response code</strong>: If you open your browser network inspector and navigate to a page, you&#39;ll see that the server is responding with a <code>404</code>code, instead of the <code>200</code>/<code>302</code>that we want.</li></ol><p>Having every page of our site return a <code>404</code> code is terrible for SEO as any web-crawler that checks the HTTP response code will think every link on our site is broken! In the next section we&#39;ll look at how we can use AWS CloudFront to cache our site, handle our traffic, and fix our error code issue.</p><h2>CloudFront Config</h2><h3>1. Create A CloudFront Distribution</h3><p><img alt=\"Create A Distribution\" src=\"https://bytebucket.org/codogo/cosmic-js-cloudfront-blog-post/raw/b27d874687dbed8fa4eda249c6962a25ffecfd4f/img/cf_create_1.png\" class=\"fr-fic fr-dii\"></p><p>We need to create a CloudFront web distribution through which all our web traffic will flow. This will handle the world wide distribution of our S3 website, and can intercept and correct our <code>404</code>codes.</p><p><img alt=\"Point CF at our S3 website\" src=\"https://bytebucket.org/codogo/cosmic-js-cloudfront-blog-post/raw/b27d874687dbed8fa4eda249c6962a25ffecfd4f/img/cf_create_2.png\" class=\"fr-fic fr-dii\"></p><p>In the <code>Origin Domain Name</code> field you&#39;ll be given the option to pick your S3 bucket. <strong>Do Not Do This!</strong>Instead, set the <code>Origin Domain Name</code> to be your S3 website URL. For example, for our demo it would be <a href=\"https://bitbucket.org/codogo/cosmic-js-cloudfront-blog-post/src/b27d874687dbed8fa4eda249c6962a25ffecfd4f/codogo-cosmic-js-demo-blog.s3-website-eu-west-1.amazonaws.com\"></a>codogo-cosmic-js-demo-blog.s3-website-eu-west-1.amazonaws.com, not codogo-cosmic-js-demo-blog.s3.amazonaws.com.</p><h3>2. Cache long term files</h3><p><img alt=\"Create New Behaviour\" src=\"https://bytebucket.org/codogo/cosmic-js-cloudfront-blog-post/raw/b27d874687dbed8fa4eda249c6962a25ffecfd4f/img/cf_edit_1.png\" class=\"fr-fic fr-dii\"></p><p>Now we&#39;re going to tell CloudFront how to cache our <code>static</code> files. To do this we need to create a new Behaviour.</p><p><img alt=\"Cache Behaviour Settings\" src=\"https://bytebucket.org/codogo/cosmic-js-cloudfront-blog-post/raw/b27d874687dbed8fa4eda249c6962a25ffecfd4f/img/cf_edit_2.png\" class=\"fr-fic fr-dii\"></p><p>We want our <code>Path Pattern</code> to match everything in our static folder. The <code>Object Settings</code>should be left as they are.</p><h3>3. Correct Response Code</h3><p><img alt=\"Create Error Response\" src=\"https://bytebucket.org/codogo/cosmic-js-cloudfront-blog-post/raw/b27d874687dbed8fa4eda249c6962a25ffecfd4f/img/cf_edit_4.png\" class=\"fr-fic fr-dii\"></p><p>Now we create a new error page to intercept the errors from S3.</p><p><img alt=\"Custom Error Response Settings\" src=\"https://bytebucket.org/codogo/cosmic-js-cloudfront-blog-post/raw/b27d874687dbed8fa4eda249c6962a25ffecfd4f/img/cf_edit_5.png\" class=\"fr-fic fr-dii\"></p><p>Fill out the custom response as above.</p><p>You&#39;ll need to give your CloudFront distribution around 15 minutes to fully deploy, but then it should be accessible at it&#39;s domain name, ours looks like this: <a href=\"https://bitbucket.org/codogo/cosmic-js-cloudfront-blog-post/src/b27d874687dbed8fa4eda249c6962a25ffecfd4f/d2hqptkles3gsg.cloudfront.net\" style=\"color: rgb(53, 114, 176);\"></a>d2hqptkles3gsg.cloudfront.net.</p><h2>Conclusion</h2><p>And there you have it: A simple client-side rendered static site to display content from Cosmic that&#39;s super fast and super simple.</p><p>If you&#39;re making a static site, or anything else, with Cosmic <a href=\"https://www.cosmicjs.com/community\">get in touch on out Slack</a> or <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>; we&#39;d love to see what you&#39;re making. This post was written by <a href=\"https://codogo.io/\" rel=\"noopener noreferrer\" target=\"_blank\">Codogo</a>, a fresh new digital agency with a passion for creating amazing digital experiences. Keep an eye out for our next post, on best practice for making a Cosmic site using React and\r\nGraphQL.</p>","metafields":[{"object_type":"authors","value":"590b73ff200ca2723f002d01","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"590b73ff200ca2723f002d01","slug":"freddie-ridell","title":"Freddie Ridell","content":"","metafields":[{"value":"2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg","imgix_url":"https://imgix.cosmicjs.com/2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-04T18:33:35.138Z","created_by":"5357ef811693be2118000001","created":"2017-05-04T18:33:35.138Z","status":"published"}},{"value":"<p>So you&#39;ve read all the great reasons to <a href=\"https://www.cosmicjs.com/why-cms-api\">go API-first</a>, and you&#39;ve produced a great looking single page app to display your content. But how do you serve it to the user?</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"f96bc850-314e-11e7-8b84-cbc54315248d-react-graphql-aws-static-site.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f96bc850-314e-11e7-8b84-cbc54315248d-react-graphql-aws-static-site.jpg","imgix_url":"https://imgix.cosmicjs.com/f96bc850-314e-11e7-8b84-cbc54315248d-react-graphql-aws-static-site.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-05-04T18:33:11.092Z","created_by":"5357ef811693be2118000001","created":"2017-05-04T18:33:11.092Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"590b73ff200ca2723f002d01","slug":"freddie-ridell","title":"Freddie Ridell","content":"","metafields":[{"value":"2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg","imgix_url":"https://imgix.cosmicjs.com/2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-04T18:33:35.138Z","created_by":"5357ef811693be2118000001","created":"2017-05-04T18:33:35.138Z","status":"published","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg","imgix_url":"https://imgix.cosmicjs.com/2d96a700-30f8-11e7-8b84-cbc54315248d-freddie.jpg"}}},"teaser":"<p>So you&#39;ve read all the great reasons to <a href=\"https://www.cosmicjs.com/why-cms-api\">go API-first</a>, and you&#39;ve produced a great looking single page app to display your content. But how do you serve it to the user?</p>","featured_image":{"url":"https://cdn.cosmicjs.com/f96bc850-314e-11e7-8b84-cbc54315248d-react-graphql-aws-static-site.jpg","imgix_url":"https://imgix.cosmicjs.com/f96bc850-314e-11e7-8b84-cbc54315248d-react-graphql-aws-static-site.jpg"}}},{"_id":"590929bd1d2b961e2c00051c","order":135,"slug":"how-to-build-a-todo-app-using-react-redux-and-webpack","title":"How to Build a ToDo App Using React, Redux, and Webpack","content":"<p style=\"text-align: center;\"><img src=\"https://www.cosmicjs.com/uploads/1c996bb0-2fa7-11e7-8a4c-11dbea3cc073-todo-react-redux.gif\" style=\"width: 459px; height: 385.124px;\" class=\"fr-fic fr-dib\"></p><p>In this tutorial I&#39;m going to show you how to create a simple &ldquo;ToDo&rdquo; app using React, Redux, a little bit of Node, and Cosmic. For the sake of understanding how to consume Restful API&rsquo;s, this tutorial will show how to make simple\r\nAJAX requests to the Cosmic API in order to retrieve, update, and delete data in our Cosmic buckets. Let&#39;s get started.</p><h2>TL;DR</h2><p><a href=\"https://github.com/cosmicjs/todo-app\" rel=\"noopener noreferrer\" target=\"_blank\">Download the GitHub repo.</a><br><a href=\"https://www.cosmicjs.com/apps/todo-app\" rel=\"noopener noreferrer\" target=\"_blank\">Check out the demo.</a></p><h2>Getting Started:</h2><p>First, let&rsquo;s make a new directory to build our project in and lets also make a package.json file.</p><pre class=\"prism bash\">mkdir cool-cosmic-todo-app</pre><pre class=\"prism bash\">cool-cosmic-todo-app$ touch package.json</pre><p>Now, in your package.json, copy and paste the code below and then run npm install or yarn (if you&#39;re a super cool yarn user):</p><div><pre class=\"prism\">//cool-cosmic-todo-app/package.json\r\n{\r\n  &quot;name&quot;: &quot;cosmicToDo&quot;,\r\n  &quot;version&quot;: &quot;1.0.0&quot;,\r\n  &quot;description&quot;: &quot;A simple todo app thet uses the Cosmic API&quot;,\r\n  &quot;main&quot;: &quot;index.js&quot;,\r\n  &quot;scripts&quot;: {\r\n    &quot;start&quot;: &quot;nodemon server/index.js&quot;,\r\n    &quot;build&quot;: &quot;webpack -w&quot;,\r\n    &quot;test&quot;: &quot;echo \\&quot;Error: no test specified\\&quot; &amp;&amp; exit 1&quot;\r\n  },\r\n  &quot;author&quot;: &quot;&quot;,\r\n  &quot;license&quot;: &quot;ISC&quot;,\r\n  &quot;dependencies&quot;: {\r\n    &quot;axios&quot;: &quot;^0.16.1&quot;,\r\n    &quot;react&quot;: &quot;^15.5.4&quot;,\r\n    &quot;react-dom&quot;: &quot;^15.5.4&quot;,\r\n    &quot;react-redux&quot;: &quot;^5.0.4&quot;,\r\n    &quot;redux&quot;: &quot;^3.6.0&quot;,\r\n    &quot;redux-logger&quot;: &quot;^3.0.1&quot;,\r\n    &quot;redux-thunk&quot;: &quot;^2.2.0&quot;,\r\n    &quot;css-loader&quot;: &quot;^0.28.0&quot;\r\n  },\r\n  &quot;devDependencies&quot;: {\r\n    &quot;babel&quot;: &quot;^6.5.2&quot;,\r\n    &quot;babel-core&quot;: &quot;^6.18.0&quot;,\r\n    &quot;babel-loader&quot;: &quot;^6.2.7&quot;,\r\n    &quot;babel-preset-es2015&quot;: &quot;^6.18.0&quot;,\r\n    &quot;babel-preset-react&quot;: &quot;^6.16.0&quot;,\r\n    &quot;cross-env&quot;: &quot;^3.1.4&quot;,\r\n    &quot;nodemon&quot;: &quot;^1.11.0&quot;,\r\n    &quot;volleyball&quot;: &quot;^1.4.1&quot;,\r\n    &quot;webpack&quot;: &quot;^2.2.1&quot;,\r\n    &quot;webpack-livereload-plugin&quot;: &quot;^0.10.0&quot;,\r\n    &quot;sass-loader&quot;: &quot;^6.0.3&quot;,\r\n    &quot;style-loader&quot;: &quot;^0.16.1&quot;\r\n  }\r\n}</pre></div><h2>What we&#39;re installing and why:</h2><ol><li>We&#39;re going to use the axios library to handle our requests to our Cosmic bucket.</li><li>We&#39;re installing react and react-dom to build our react components.</li><li>We are going to use redux, react-redux, redux-logger, and redux-thunk to help us implement what is called the Flux architecture.</li><li>The only thing worth mentioning in the dev dependencies is webpack and volleyball. Webpack will help us bundle all of our react and redux files into one large &quot;bundle&quot; file that will be used in our index.html. Volleyball is a cool little library\r\nthat allows us to see in our console incoming and outgoing HTTP requests.</li></ol><h2>Building our app:</h2><p>Now we&#39;re going to build out our file structure a bit more so that we can organize our react components and redux files. This is what our cool-cosmic-todo-app directory should look like:</p><pre class=\"prism bash\">cool-cosmic-todo-app\r\n|----client\r\n| &nbsp; &nbsp; &nbsp; |----components\r\n| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |----Home.js\r\n| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |----Section.js\r\n| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |----Task.js\r\n| &nbsp; &nbsp; &nbsp; |----index.html\r\n| &nbsp; &nbsp; &nbsp; |----dist\r\n|----redux\r\n| &nbsp; &nbsp; &nbsp; |----store.js\r\n| &nbsp; &nbsp; &nbsp; |----reducer.js\r\n|----server\r\n| &nbsp; &nbsp; &nbsp; |----index.js\r\n|----webpack.config.js\r\n|----package.json</pre><p>Now we we will set up our index.html in our client directory. Copy and paste the following code into your index.html file:</p><div><pre class=\"prism markup\">&lt;!DOCTYPE html&gt;\r\n&lt;html&gt;\r\n&lt;head&gt;\r\n    &lt;meta charset=&quot;UTF-8&quot; /&gt;\r\n    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot; /&gt;\r\n    &lt;title&gt;Cosmic Todo App!&lt;/title&gt;\r\n    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css&quot;&gt;\r\n&nbsp; &nbsp; &lt;script src=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js&quot;&gt;&lt;/script&gt;\r\n    &lt;link rel=&quot;stylesheet&quot; href=&quot;./styles/mainSheet/main.css&quot;&gt;\r\n    &lt;link rel=&quot;stylesheet&quot; href=&quot;./styles/mainSheet/font-awesome.min.css&quot;&gt;\r\n&nbsp; &nbsp; &lt;script src=&quot;https://code.jquery.com/jquery-3.2.1.min.js&quot;\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; integrity=&quot;sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=&quot;\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;\r\n&nbsp; &nbsp; &lt;script src=&quot;/dist/bundle.js&quot; defer&gt;&lt;/script&gt;\r\n&lt;/head&gt;\r\n&lt;body&gt;\r\n&lt;div id=&quot;root&quot;&gt;&lt;/div&gt;\r\n&lt;/body&gt;\r\n&lt;/html&gt;</pre></div><p>Here, we are going to target our &quot;root&quot; div to place our react components in later. The <a href=\"bundle.js\">bundle.js</a> file located in our dist directory is what our webpack.config file will spit out after bundling all of our react components Now, set up our webpack.config file to bundle all of our react files and export that bundle file to our dist directory. Copy the following code into your <a href=\"webpack.config.js\">webpack.config.js</a> file:</p><div><pre class=\"prism\">let path = require(&#39;path&#39;);\r\nlet LiveReloadPlugin = require(&#39;webpack-livereload-plugin&#39;);\r\n\r\nmodule.exports = {\r\n  entry: &#39;./client/index.js&#39;,\r\n  output: {\r\n    filename: &#39;bundle.js&#39;,\r\n    path: path.resolve(__dirname, &#39;client/dist&#39;)\r\n  },\r\n  context: __dirname,\r\n  resolve: {\r\n    extensions: [&#39;.js&#39;, &#39;.jsx&#39;, &#39;.json&#39;, &#39;*&#39;]\r\n  },\r\n  module: {\r\n    rules: [{\r\n      test:&nbsp;/\\.jsx?$/,\r\n      exclude:&nbsp;/(node_modules|bower_components)/,\r\n      loader: &#39;babel-loader&#39;,\r\n      options: {\r\n        presets: [&#39;react&#39;, &#39;es2015&#39;]\r\n      }\r\n    },\r\n      {\r\n        test:&nbsp;/\\.scss$/,\r\n        use: [\r\n          &#39;style-loader&#39;,\r\n          &#39;css-loader&#39;,\r\n          &#39;sass-loader&#39;\r\n        ]\r\n      }]\r\n  },\r\n  plugins: [\r\n    new webpack.DefinePlugin({\r\n      &#39;process.env.COSMIC_BUCKET&#39;: JSON.stringify(process.env.COSMIC_BUCKET),\r\n      &#39;process.env.COSMIC_READ_KEY&#39;: JSON.stringify(process.env.COSMIC_READ_KEY),\r\n      &#39;process.env.COSMIC_WRITE_KEY&#39;: JSON.stringify(process.env.COSMIC_WRITE_KEY)\r\n    }),\r\n    new LiveReloadPlugin({appendScriptTag: true})\r\n  ]\r\n};</pre></div><p>Here, we are simply telling webpack to output a <a href=\"bundle.js\">bundle.js</a> file into our dist folder with all of our react components bundled in there as well. The babel-loader is simply transpiling JavaScript files using babel and webpack. The live reload plugin allows us to make changes to our files and automatically have webpack watch and &quot;re-bundle&quot; with our updated changes. Next, we&#39;re going to us a little bit of node with express to serve up our index.html file as well as our <a href=\"bundle.js\">bundle.js</a> file. Realistically, we aren&#39;t really making requests to our own node backend, but it&#39;s good to use node as a method to serve us static files. Copy and paste the code below into our <a href=\"index.js\">index.js</a>file\r\nlocated in our server directory.</p><div><pre class=\"prism\">const express = require(&#39;express&#39;);\r\nconst app = express();\r\nconst path = require(&#39;path&#39;);\r\nconst volleyball = require(&#39;volleyball&#39;);\r\n\r\napp.use(volleyball);\r\n\r\n//serve up static files\r\napp.use(express.static(path.resolve(__dirname, &#39;..&#39;, &#39;client&#39;)));\r\napp.use(express.static(path.resolve(__dirname, &#39;..&#39;, &#39;node_modules&#39;)));\r\n\r\napp.use(function (err, req, res, next) {\r\n  console.error(err);\r\n  console.error(err.stack);\r\n  res.status(err.status || 500).send(err.message || &#39;Internal server error.&#39;);\r\n});\r\n\r\n\r\n// handle every other route with index.html, which will contain\r\n// a script tag to our application&#39;s JavaScript file(s).\r\napp.get(&#39;*&#39;, function (request, response) {\r\n  response.sendFile(path.resolve(__dirname, &#39;..&#39;, &#39;client&#39;, &#39;index.html&#39;))\r\n});\r\n\r\n//listen on port 3000\r\napp.listen(process.env.PORT || 3000, function () {\r\n  console.log(&quot;Rockin&#39; out on port 3000 homie&quot;);\r\n});</pre></div><p>Here, we are simply telling our server to serve up static files out of our node_modules and client directories. The &#39;*&#39; route is basically telling express to serve up our index.html on any route requested within our app. Finally, we are telling express to listen on port 3000. Feel free to try it out! Run npm start or yarn start and see our &quot;Rockin&#39; out on port 3000 homie&quot; message log put to the console! Next, let&#39;s set up our redux <a href=\"store.js\">store.js</a> file, located in our client/redux folder. Copy and paste the following code into the <a href=\"store.js\">store.js</a> file located in our client/redux folder:</p><div><pre class=\"prism\">import { createStore, applyMiddleware } from &#39;redux&#39;;\r\nimport reducer from &#39;./reducer&#39;;\r\nimport thunkMiddleware from &#39;redux-thunk&#39;;\r\nimport {createLogger} from &#39;redux-logger&#39;;\r\n\r\nconst store = createStore(\r\n  reducer,\r\n  applyMiddleware(\r\n    createLogger(),\r\n    thunkMiddleware\r\n  )\r\n);\r\n\r\nexport default store;</pre></div><h3>What&#39;s going on here:</h3><ol><li>We are setting up our redux &quot;store&quot; so that we can pass data down through &quot;props&quot; into whatever components we want (I am going to assume you have some working knowledge of how the flux architecture functions, if you do not understand\r\nthis it is OK, just check the flux architecture link above).</li><li>We are using the redux-thunk middleware to handle all of our asynchronous calls to our Cosmic API. This middleware is used whenever we dispatch a function instead of an action.</li><li>We are also using &quot;createlogger&quot; middleware to visually see every logged action that we dispatch. Next, we are going to set up the <a href=\"index.js\">index.js</a> file, located in our client directory. Copy and paste the following code:</li></ol><div><pre class=\"prism\">import React from &#39;react&#39;;\r\nimport ReactDOM from &#39;react-dom&#39;;\r\nimport Home from &#39;./components/Home&#39;;\r\nimport {Provider} from &#39;react-redux&#39;;\r\nimport store from &#39;./redux/store&#39;;\r\n\r\nReactDOM.render(\r\n  &lt;Provider store={store}&gt;\r\n    &lt;Home /&gt;\r\n  &lt;/Provider&gt;,\r\n  document.getElementById(&#39;root&#39;)\r\n);</pre></div><h3>What&#39;s going on here:</h3><ol><li>We are telling ReactDOM to target our &quot;root&quot; div from our index.html file and pop in our &lt;Home/&gt; react component (which we will build out in our next step).</li><li>Our &nbsp;react component is being served up data from our store through that tag. It is &quot;providing&quot; its children with data (hence, why it&#39;s called &quot;Provider&quot;). Next, we will build out our Homecomponent. In our <a href=\"Home.js\">Home.js</a>file\r\nlocated in out client/components directory, copy and paste the following code:</li></ol><div><pre class=\"prism\">import React, {Component} from &#39;react&#39;;\r\nimport { connect } from &#39;react-redux&#39;;\r\nimport { getAllTasks, postNewTask } from &#39;../redux/reducer&#39;;\r\nimport Task from &#39;./Task&#39;;\r\n\r\nclass Home extends Component {\r\n  constructor(props){\r\n    super(props);\r\n  }\r\n  componentDidMount(){\r\n    getAllTasks();\r\n  }\r\n  render() {\r\n    return (\r\n      &lt;div&gt;\r\n      &lt;div className=&quot;container&quot;&gt;\r\n        &lt;div className=&quot;row&quot;&gt;\r\n          &lt;div className=&quot;col-xs-12&quot;&gt;\r\n           &lt;h1&gt;Cosmic To-Do App!!&lt;/h1&gt;\r\n            &lt;form onSubmit={evt =&gt; {\r\n               evt.preventDefault();\r\n               this.props.postNewTask(evt.target.taskName.value);\r\n               evt.target.taskName.value = &quot;&quot;;\r\n              }\r\n             }&gt;\r\n              &lt;div className=&quot;form-group&quot;&gt;\r\n              &lt;label for=&quot;exampleInputEmail1&quot;&gt;Add New To-Do&lt;/label&gt;\r\n              &lt;input name=&quot;taskName&quot; placeholder=&quot;Enter new task&quot; /&gt;\r\n              &lt;/div&gt;\r\n              &lt;button type=&quot;submit&quot;&gt;Add&lt;/button&gt;\r\n            &lt;/form&gt;\r\n          &lt;/div&gt;\r\n        &lt;/div&gt;\r\n      &lt;/div&gt;\r\n      &lt;div className=&quot;container&quot;&gt;\r\n        &lt;div className=&quot;row&quot;&gt;\r\n          &lt;div className=&quot;col-xs-12&quot;&gt;\r\n            &lt;h3&gt;Let&#39;s get some work done!&lt;/h3&gt;\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;\r\n&nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;/div&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;div className=&quot;container&quot;&gt;\r\n&nbsp; &nbsp; &nbsp; &nbsp; {\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.props.tasks &amp;&amp; this.props.tasks.map((task) =&gt; {\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return (\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Task key={task._id} Obj={task} isComplete={task.metafields[0].value} Name={task.title}/&gt;\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; )\r\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; })\r\n&nbsp; &nbsp; &nbsp; &nbsp; }\r\n&nbsp; &nbsp; &nbsp; &lt;/div&gt;\r\n&nbsp; &nbsp; &nbsp; &lt;/div&gt;\r\n&nbsp; &nbsp; )\r\n&nbsp; }\r\n}\r\n\r\nconst mapState = ({tasks}) =&gt; ({tasks});\r\nconst mapDispatch = {getAllTasks, postNewTask};\r\nexport default connect(mapState, mapDispatch)(Home);</pre></div><h3>What&#39;s going on (a lot!):</h3><ol><li>We are creating a react component and fetching all of our data when our Home component mounts (which will be tasks form our Cosmic bucket).</li><li>We are rendering &quot;HTML&quot; to our virtual DOM.</li><li>We are creating a form that will dispatch a function (that will go through our redux-thunk middleware) that adds tasks to our list of tasks to do whenever our users click the submit &lt;button&gt;.</li><li>We are doing a hacky check so that our app does not break by doing what is called a &quot;short-circuit&quot;. We are first checking if we have gotten back &quot;tasks&quot; from our asynchronous call to our Cosmic bucket and if we do then we are going\r\nto map over each of them and render a &lt;Task /&gt; component (which we will build in the nex step).</li><li>Finally, we are wrapping our Home component inside of the connect function that the react-redux library gives us. We are getting the {tasks} from our store as well as our {getAllTasks, postNewTask} functions from our store. Next, we are going to build out our &nbsp;component to render every task that we are getting from our store. In our <a href=\"Task.js\">Task.js</a> file, located in our client/components directory, copy and paste the following code:</li></ol><div><pre class=\"prism\">import React from &#39;react&#39;;\r\nimport { connect } from &#39;react-redux&#39;;\r\nimport { putChangeStatus, deleteTask } from &#39;../redux/reducers/reducer&#39;;\r\n\r\nconst Task = (props) =&gt; {\r\n  return (\r\n      &lt;div className=&quot;row&quot;&gt;\r\n        &lt;div className=&quot;btn-group&quot; role=&quot;group&quot; aria-label=&quot;Basic example&quot;&gt;\r\n          &lt;button type=&quot;button&quot; onClick={() =&gt; {\r\n            props.putChangeStatus(props.Obj, props.isComplete)}} className=&quot;btn&quot;&gt;{props.isComplete ? &quot;Undo&quot; : &quot;Complete&quot; }&lt;/button&gt;\r\n          &lt;button type=&quot;button&quot; onClick={() =&gt; props.deleteTask(props.Obj.slug)} className=&quot;btn&quot;&gt;Delete&lt;/button&gt;\r\n        &lt;/div&gt;\r\n        &lt;h3 style={{textDecoration: props.isComplete ? &quot;line-through&quot; : &quot;none&quot;}}&gt;{props.Name}&lt;/h3&gt;\r\n      &lt;/div&gt;\r\n  );\r\n};\r\n\r\nconst mapDispatch = {putChangeStatus, deleteTask};\r\nexport default connect(null, mapDispatch)(Task);</pre></div><h3>What&#39;s going on:</h3><ol><li>We are creating what is called a &quot;dumb&quot; react component and, again, wrapping it in our connect function.</li><li>We are pulling in putChangeStatus and deleteTask from our reducer (which we will finally make in te next step) and hookingit up to our store.</li><li>We are hooking up our &quot;Complete&quot; and &quot;Delete&quot; buttons to dispatch asynchronous functions onClick so that we actually update our Cosmic bucket as well. Next, we will FINALLY make our reducer and set up all of our asynchronous &quot;redux-thunk&quot; functions. In our <a href=\"reducer.js\">reducer.js</a> file, located in our client/redux directory, copy and paste the following code:</li></ol><div><pre class=\"prism\">import axios from &quot;axios&quot;;\r\n/////////////////CONSTANTS/////////////////////\r\nconst GET_ALL_TASKS = &quot;GET_ALL_TASKS&quot;;\r\nconst POST_TASK = &quot;POST_TASK&quot;;\r\nconst CHANGE_STATUS = &quot;CHANGE_STATUS&quot;;\r\nconst DELETE_TASK = &quot;DELETE_TASK&quot;;\r\n/////////////////ACTIONS//////////////\r\nconst getTasks = (tasks) =&gt; ({type: GET_ALL_TASKS, tasks});\r\nconst addTask = (task) =&gt; ({type: POST_TASK, task});\r\nconst changeStatus = (task) =&gt; ({type: CHANGE_STATUS, task});\r\nconst taskDelete = (slug) =&gt; ({type: DELETE_TASK, slug});\r\n/////////////////REDUCER/////////////////////\r\n//initiate your starting state\r\nlet initial = {\r\n  tasks: []\r\n};\r\nconst reducer = (state = initial, action) =&gt; {\r\n  switch (action.type) {\r\n    case GET_ALL_TASKS:\r\n      return Object.assign({}, state, {tasks: action.tasks.objects});\r\n    case POST_TASK:\r\n      let updatedTasks = [action.task].concat(state.tasks);\r\n      return Object.assign({}, state, {tasks: updatedTasks});\r\n    case CHANGE_STATUS:\r\n      let newArr = state.tasks.map((task) =&gt; {\r\n        if(task.slug === action.task.slug) task.metafields[0].value = !task.metafields[0].value;\r\n        return task;\r\n      });\r\n      return Object.assign({}, state, {tasks: newArr});\r\n    case DELETE_TASK:\r\n      let arr = state.tasks.filter((task) =&gt; {\r\n        return !(task.slug === action.slug);\r\n      });\r\n      return Object.assign({}, state, {tasks: arr});\r\n    default:\r\n      return state;\r\n  }\r\n\r\n};\r\n\r\nexport default reducer;\r\n\r\n\r\n/////////////// ACTION DISPATCHER FUNCTIONS///////////////////\r\n\r\nexport const getAllTasks = () =&gt; dispatch =&gt; {\r\n  axios.get(`https://api.cosmicjs.com/v1/your-bucket-slug-name/object-type/tasks`)\r\n    .then((response) =&gt; {\r\n      return response.data;\r\n    })\r\n    .then((tasks) =&gt; {\r\n      dispatch(getTasks(tasks))\r\n    })\r\n    .catch((err) =&gt; {\r\n      console.error.bind(err);\r\n    })\r\n};\r\n\r\nexport const postNewTask = (task) =&gt; dispatch =&gt; {\r\n  dispatch(addTask({title: task, metafields: [{value: false}], slug: formatSlug(task)}));\r\n  axios.post(`https://api.cosmicjs.com/v1/your-bucket-slug-name/add-object`, {type_slug: &quot;tasks&quot;, title: task, content: &quot;New Task&quot;,\r\n    metafields: [\r\n      {\r\n        title: &quot;Is Complete&quot;,\r\n        key: &quot;is_complete&quot;,\r\n        value: false,\r\n        type: &quot;text&quot;\r\n      }\r\n    ]})\r\n    .then((response) =&gt; {\r\n      console.log(response.data);\r\n    })\r\n    .catch((err) =&gt; {\r\n      console.error.bind(err);\r\n    })\r\n};\r\n\r\nexport const putChangeStatus = (task, bool) =&gt; (dispatch) =&gt; {\r\n  dispatch(changeStatus(task));\r\n  axios.put(`https://api.cosmicjs.com/v1/your-bucket-slug-name/edit-object`, {slug: task.slug,\r\n    metafields: [\r\n      {\r\n        title: &quot;Is Complete&quot;,\r\n        key: &quot;is_complete&quot;,\r\n        value: !bool,\r\n        type: &quot;text&quot;\r\n      }\r\n    ]})\r\n    .then((response) =&gt; {\r\n      console.log(response.data);\r\n    })\r\n    .catch((err) =&gt; {\r\n      console.error.bind(err);\r\n    })\r\n};\r\n\r\nexport const deleteTask = (slug) =&gt; (dispatch) =&gt; {\r\n  dispatch(taskDelete(slug));\r\n  axios.delete(`https://api.cosmicjs.com/v1/your-bucket-slug-name/${slug}`)\r\n    .then((response) =&gt; {\r\n    console.log(response.data)\r\n    })\r\n    .catch((err) =&gt; {\r\n      console.error.bind(err);\r\n    })\r\n};\r\n\r\nconst formatSlug = (title) =&gt; {\r\n  let lower = title.toLowerCase();\r\n  return lower.split(&quot; &quot;).join(&quot;-&quot;);\r\n};</pre></div><h3>What is going on?!</h3><p>Side note -&gt; I personally like to store all of my constants, actions, and action dispatcher functions inside of one file for every reducer that I have just so I&#39;m not contantly jumping from file to file. It&#39;s totally common and cool to break\r\nthese up into seperate files.</p><ol><li>We are puling in axios (our library that will be making the HTTP requests for us).</li><li>We are defining our constants.</li><li>We are setting up our actions to dispatch.</li><li>We define our reducer function that our store uses and we are starting it out initially with an object that has a tasks key with an empty array as a value (this array will be filled with task objects retrieved from our Cosmic bucket).</li><li>We define our action dispatcher functions that make our axios requests to the Cosmic API (specifically to our personal bucket). And we are done! Run npm run build or yarn build and in a different tab run npm start or yarn start and see what we made!\r\nIf you want to see my implementation of this (unnecessarily using react-router) to get a glimpse of how all this works together check out my github repo</li></ol><h2>Conclusion:</h2><p>We were able to consume the Cosmic API with our actions and dispatcher functions. If you&#39;re a little iffy on how how all the files work in conjunction with our store check out this gif to get a better picture of how redux is passing data around the app. I hope you enjoyed this tutorial as much as I did, if you have any questions <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\">join our community on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"59092a411d2b961e2c000524","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"59092a411d2b961e2c000524","slug":"ryan-skinner","title":"Ryan Skinner","content":"","metafields":[{"value":"0ca31460-2f9b-11e7-8a4c-11dbea3cc073-ryan.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0ca31460-2f9b-11e7-8a4c-11dbea3cc073-ryan.jpeg","imgix_url":"https://imgix.cosmicjs.com/0ca31460-2f9b-11e7-8a4c-11dbea3cc073-ryan.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-03T00:54:25.186Z","created_by":"5357ef811693be2118000001","created":"2017-05-03T00:54:25.186Z","status":"published"}},{"value":"<p>In this tutorial I&#39;m going to show you how to create a simple &ldquo;ToDo&rdquo; app using React, Redux, a little bit of Node, and Cosmic.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"89690aa0-2fb8-11e7-8a4c-11dbea3cc073-todo-app.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/89690aa0-2fb8-11e7-8a4c-11dbea3cc073-todo-app.jpg","imgix_url":"https://imgix.cosmicjs.com/89690aa0-2fb8-11e7-8a4c-11dbea3cc073-todo-app.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-05-03T00:52:13.656Z","created_by":"5357ef811693be2118000001","created":"2017-05-03T00:52:13.656Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"59092a411d2b961e2c000524","slug":"ryan-skinner","title":"Ryan Skinner","content":"","metafields":[{"value":"0ca31460-2f9b-11e7-8a4c-11dbea3cc073-ryan.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/0ca31460-2f9b-11e7-8a4c-11dbea3cc073-ryan.jpeg","imgix_url":"https://imgix.cosmicjs.com/0ca31460-2f9b-11e7-8a4c-11dbea3cc073-ryan.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-05-03T00:54:25.186Z","created_by":"5357ef811693be2118000001","created":"2017-05-03T00:54:25.186Z","status":"published","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/0ca31460-2f9b-11e7-8a4c-11dbea3cc073-ryan.jpeg","imgix_url":"https://imgix.cosmicjs.com/0ca31460-2f9b-11e7-8a4c-11dbea3cc073-ryan.jpeg"}}},"teaser":"<p>In this tutorial I&#39;m going to show you how to create a simple &ldquo;ToDo&rdquo; app using React, Redux, a little bit of Node, and Cosmic.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/89690aa0-2fb8-11e7-8a4c-11dbea3cc073-todo-app.jpg","imgix_url":"https://imgix.cosmicjs.com/89690aa0-2fb8-11e7-8a4c-11dbea3cc073-todo-app.jpg"}}},{"_id":"5905fe36710a2188470004a0","order":136,"slug":"how-to-build-a-command-line-note-taking-app","title":"How to Build a Command Line Note Taking App","content":"<p>In this tutorial I&#39;m going to show you how to build a simple note taking app that can be used inside of your command line. We&#39;re going to use Cosmic which allows us to view these notes from anywhere on any device.</p><h2>TL;DR</h2><p><a href=\"https://github.com/cosmicjs/notetoself\" rel=\"noopener noreferrer\" target=\"_blank\">Download and install the app on GitHub</a></p><h2>Setup</h2><p>In an empty directory start a new npm project.</p><div><pre class=\"prism\">npm init</pre></div><p>Next you&#39;ll need to add the following packages.</p><ul><li>cosmicjs ( makes accessing your bucket end points easier )</li><li>meteor-random ( generates a nicely formatted 16 character sequence )</li><li>chalk ( does a good job at coloring the terminal output )</li><li>inquirer ( a framework for the command line )</li></ul><div><pre class=\"prism\">npm install --save cosmicjs meteor-random chalk inquirer</pre></div><p>Now let&#39;s take a look at the package.json. If you did everything right so far it should look like this.</p><div><pre class=\"prism\">{\r\n  &quot;name&quot;: &quot;NoteToSelf&quot;,\r\n  &quot;version&quot;: &quot;1.0.0&quot;,\r\n  &quot;description&quot;: &quot;&quot;,\r\n  &quot;main&quot;: &quot;index.js&quot;,\r\n  &quot;scripts&quot;: {\r\n    &quot;test&quot;: &quot;echo \\&quot;Error: no test specified\\&quot; &amp;&amp; exit 1&quot;\r\n  },\r\n  &quot;keywords&quot;: [],\r\n  &quot;author&quot;: &quot;&quot;,\r\n  &quot;license&quot;: &quot;ISC&quot;,\r\n  &quot;dependencies&quot;: {\r\n    &quot;chalk&quot;: &quot;^1.1.3&quot;,\r\n    &quot;cosmicjs&quot;: &quot;^2.39.0&quot;,\r\n    &quot;inquirer&quot;: &quot;^3.0.6&quot;,\r\n    &quot;meteor-random&quot;: &quot;^0.0.3&quot;\r\n  }\r\n}</pre></div><p>Now let&#39;s take a second to setup our <a href=\"index.js\">index.js</a> file. First thing we need to do is import our packages at the top of the page</p><div><pre class=\"prism\">const chalk = require(&#39;chalk&#39;);\r\nconst inquirer = require(&#39;inquirer&#39;);\r\nconst Random = require(&#39;meteor-random&#39;);\r\nconst Cosmic = require(&#39;cosmicjs&#39;);</pre></div><p>When we have done that next we need to setup our buckets information to be used later.</p><div><pre class=\"prism\">var config = {};\r\nconfig.bucket = {\r\n  slug: &#39;&#39;,\r\n  read_key: &#39;&#39;,\r\n  write_key: &#39;&#39;\r\n}</pre></div><p>You will need to fill in the above object with your buckets information. Now we need to setup the main menu this is what you&#39;ll see when you start the program.</p><h2>Code Overview</h2><div><pre class=\"prism\">const MainMenu = () =&gt; {\r\n  inquirer.prompt(\r\n    {\r\n      type: &#39;list&#39;,\r\n      name: &#39;mainMenu&#39;,\r\n      message: &#39;Main Menu&#39;,\r\n      choices: [\r\n        &#39;New Note&#39;,\r\n        &#39;View Notes&#39;,\r\n        new inquirer.Separator(),\r\n        &#39;Exit&#39;\r\n      ]\r\n    }\r\n  ).then((answers)=&gt;{\r\n    if(answers.mainMenu === &quot;New Note&quot;){\r\n      NewNote()\r\n    } else if(answers.mainMenu === &quot;View Notes&quot;){\r\n      ViewNotes()\r\n    } else {\r\n      process.exit()\r\n    }\r\n  })\r\n}\r\nMainMenu()</pre></div><p>Let&#39;s break this down so it&#39;s easier to understand.</p><ol><li>generates a cli interface with 3 options</li><li>after you select an option it runs through a series of if statements directing you to the next interface</li></ol><p>Now we are going to create the interface for adding a new note. Buckle in because this is where it gets slightly more confusing.</p><div><pre class=\"prism\">const NewNote = () =&gt; {\r\n  var question = {\r\n    type: &#39;input&#39;,\r\n    name: &#39;note_text&#39;,\r\n    message: &#39;Note&#39;\r\n  } // 1\r\n  inquirer.prompt(question).then((answers) =&gt; { // 2\r\n    var params = {\r\n      write_key: config.bucket.write_key,\r\n      type_slug: &#39;notes&#39;,\r\n      slug: Random.id().toLowerCase(),\r\n      title: answers.note_text,\r\n      content: &#39;&#39;\r\n    } // 3\r\n    if(answers.note_text === &#39;&#39;){\r\n      console.log(chalk.red(&quot;You cannot add an empty note&quot;))\r\n      MainMenu()\r\n      return;\r\n    }\r\n    Cosmic.addObject(config, params, (error, response) =&gt;{ // 4\r\n      if(response.object){\r\n        console.log(chalk.green(&quot;\\u2713&quot; + &quot; Success&quot;))\r\n      }\r\n      if(error){\r\n        console.log(error)\r\n      }\r\n      MainMenu() //5\r\n    })\r\n  })\r\n}</pre></div><p>This isn&#39;t too confusing don&#39;t worry we&#39;ll walk through it together.</p><ol><li>we create the question type and declare it to a variable</li><li>we then send it to a inquirer function to get user input for what the note text should be</li><li>now we create an object with all the information we&#39;ll need for cosmic. It automatically pulls the input text from inquirer and builds a slug from the meteor random package.</li><li>we now use the wonder of Cosmic and create a new object.</li><li>return to the main menu</li></ol><p>The next menu is a little more confusing so we&#39;re going to break it down into smaller chunks.</p><pre class=\"prism\">const ViewNotes = () =&gt; {\r\n  var params = {\r\n    type_slug: &#39;notes&#39;,\r\n    limit: 10,\r\n    skip: 0\r\n  };\r\n        \r\n  Cosmic.getObjectType(config, params, (error, response)=&gt;{ //fetches all notes\r\n    var notes = []\r\n    var noteText = [chalk.yellow(&quot;Return&quot;)]\r\n    if(response.total === undefined){\r\n      console.log(chalk.red(&quot;No notes found.&quot;))\r\n      MainMenu()\r\n      return;\r\n    }\r\n    sortedresponse = response.objects.all.sort((a,b)=&gt;{\r\n      return new Date(b.created) - new Date(a.created)\r\n    })\r\n    const amount = response.objects.all.length\r\n    sortedresponse.map((note)=&gt;{\r\n      var newnote = {\r\n        name: note.title,\r\n        slug: note.slug\r\n      }\r\n      noteText.push(chalk.blue(note.title) + chalk.hidden(&#39;slug - &#39;+note.slug + &#39; | &#39;) )\r\n      notes.push(newnote)\r\n      if(notes.length === amount){\r\n        inquirer.prompt(\r\n          {\r\n            type: &#39;list&#39;,\r\n            name: &#39;allnotes&#39;,\r\n            message: &#39;All Notes:&#39;,\r\n            choices: noteText\r\n          }).then((answers)=&gt;{\r\n            if(answers.allnotes === &quot;\\u001b[33mReturn\\u001b[39m&quot;){\r\n              MainMenu()\r\n              return;\r\n            }\r\n            var regexSearch = /(\\w{17})/\r\n            var newvalue = answers.allnotes.match(regexSearch)\r\n            Cosmic.getObject(config, {slug: newvalue[0]}, (error, response)=&gt;{\r\n              inquirer.prompt({\r\n                type: &#39;expand&#39;,\r\n                message: chalk.blue(response.object.title),\r\n                name: &#39;morecontext&#39;,\r\n                choices: [\r\n                  {\r\n                    key: &#39;e&#39;,\r\n                    name: &#39;Edit&#39;,\r\n                    value: &#39;edit&#39;\r\n                  },\r\n                  {\r\n                    key: &#39;d&#39;,\r\n                    name: &#39;Delete&#39;,\r\n                    value: &#39;delete&#39;\r\n                  },\r\n                  {\r\n                    key: &#39;l&#39;,\r\n                    name: &#39;Leave&#39;,\r\n                    value: &#39;leave&#39;\r\n                  }\r\n                ]}).then((answers)=&gt;{\r\n                  if(answers.morecontext === &#39;edit&#39;){\r\n                    inquirer.prompt(\r\n                      {\r\n                        type: &#39;input&#39;,\r\n                        name: &#39;newText&#39;,\r\n                        message: &#39;New Text:&#39;\r\n                      }).then((answers)=&gt;{\r\n                        var params = {\r\n                          write_key: config.bucket.write_key,\r\n                          slug: response.object.slug,\r\n                          type_slug: &#39;notes&#39;,\r\n                          title: answers.newText,\r\n                          content: &#39;&#39;\r\n                        }\r\n                        Cosmic.editObject(config, params, (error, response)=&gt;{\r\n                          if(response.object){\r\n                            console.log(chalk.green(&quot;\\u2713&quot; + &quot; Success&quot;))\r\n                          }\r\n                          MainMenu()\r\n                        })\r\n                      })\r\n                    \r\n                  } else if(answers.morecontext === &#39;delete&#39;){\r\n                    var params = {\r\n                      write_key: config.bucket.write_key,\r\n                      slug: response.object.slug\r\n                    }\r\n                    Cosmic.deleteObject(config, params, (error, response)=&gt;{\r\n                      if(error){\r\n                        console.log(error)\r\n                      }\r\n                      if(response.object){\r\n                        console.log(chalk.green(&quot;\\u2713&quot; + &quot; Success&quot;))\r\n                      }\r\n                      MainMenu();\r\n                    });\r\n                  } else {\r\n                    MainMenu();\r\n                  }\r\n                })\r\n              })\r\n            })\r\n          }\r\n        })\r\n      })\r\n}</pre><p>If this seem like absolutely gibberish that&#39;s okay we can take it one piece at a time. Let&#39;s start with the top half where we get all of your notes (up to ten) and display them in a list view.</p><div><pre class=\"prism\">var params = {\r\n    type_slug: &#39;notes&#39;,\r\n    limit: 10,\r\n    skip: 0\r\n  };\r\n        \r\n  Cosmic.getObjectType(config, params, (error, response)=&gt;{ // 1\r\n    var notes = []\r\n    var noteText = [chalk.yellow(&quot;Return&quot;)]\r\n    if(response.total === undefined){\r\n      console.log(chalk.red(&quot;No notes found.&quot;))\r\n      MainMenu()\r\n      return;\r\n    }\r\n    sortedresponse = response.objects.all.sort((a,b)=&gt;{\r\n      return new Date(b.created) - new Date(a.created)\r\n    }) // 2\r\n    const amount = response.objects.all.length\r\n    sortedresponse.map((note)=&gt;{\r\n      var newnote = {\r\n        name: note.title,\r\n        slug: note.slug\r\n      }\r\n      noteText.push(chalk.blue(note.title) + chalk.hidden(&#39;slug - &#39;+note.slug + &#39; | &#39;) ) // 3\r\n      notes.push(newnote)\r\n      if(notes.length === amount){\r\n        inquirer.prompt(\r\n          {\r\n            type: &#39;list&#39;,\r\n            name: &#39;allnotes&#39;,\r\n            message: &#39;All Notes:&#39;,\r\n            choices: noteText\r\n          }).then((answers)=&gt;{\r\n            if(answers.allnotes === &quot;\\u001b[33mReturn\\u001b[39m&quot;){\r\n              MainMenu()\r\n              return;\r\n            }\r\n            var regexSearch = /(\\w{17})/\r\n            var newvalue = answers.allnotes.match(regexSearch) // 4\r\n            Cosmic.getObject(config, {slug: newvalue[0]}, (error, response)=&gt;{ // 5\r\n              inquirer.prompt({ // 6\r\n                type: &#39;expand&#39;,\r\n                message: chalk.blue(response.object.title),\r\n                name: &#39;morecontext&#39;,\r\n                choices: [\r\n                  {\r\n                    key: &#39;e&#39;,\r\n                    name: &#39;Edit&#39;,\r\n                    value: &#39;edit&#39;\r\n                  },\r\n                  {\r\n                    key: &#39;d&#39;,\r\n                    name: &#39;Delete&#39;,\r\n                    value: &#39;delete&#39;\r\n                  },\r\n                  {\r\n                    key: &#39;l&#39;,\r\n                    name: &#39;Leave&#39;,\r\n                    value: &#39;leave&#39;\r\n                  }\r\n                ]})</pre></div><ol><li>We use the Cosmic package to go ahead and grab all of the objects.</li><li>We take the array of objects and sort them so the most recent are on the top.</li><li>We create a string with two seperate parts. The first part is the text of the note styled to be blue using the chalk package. Next we take the slug of the item and pass it in but make it hidden. This is done so that we can fetch more information about\r\nthis note later on in the program.</li><li>We take the string the user selected and match it agains a regex search that will find the slug and return it.</li><li>We get the objects specific information this allows us to use it better later on.</li><li>We generate the next prompt using the newly fetched data and place the note text in the message field.</li></ol><p>That was the basics of fetching the data and manipulating the return in a manner that we can use it correctly in this instance. Now we&#39;re going to take a look at the second half of the view function. This is where we can edit and delete our selected\r\nnot from before.</p><div><pre class=\"prism\">]}).then((answers)=&gt;{\r\n    if(answers.morecontext === &#39;edit&#39;){\r\n      inquirer.prompt(\r\n        {\r\n          type: &#39;input&#39;,\r\n          name: &#39;newText&#39;,\r\n          message: &#39;New Text:&#39;\r\n        }).then((answers)=&gt;{ // 1\r\n          var params = {\r\n            write_key: config.bucket.write_key,\r\n            slug: response.object.slug,\r\n            type_slug: &#39;notes&#39;,\r\n            title: answers.newText,\r\n            content: &#39;&#39;\r\n          } // 2\r\n          Cosmic.editObject(config, params, (error, response) =&gt; { // 3\r\n            if(response.object){\r\n              console.log(chalk.green(&quot;\\u2713&quot; + &quot; Success&quot;))\r\n            }\r\n            MainMenu()\r\n          })\r\n        })\r\n    } else if(answers.morecontext === &#39;delete&#39;){\r\n      var params = {\r\n        write_key: config.bucket.write_key,\r\n        slug: response.object.slug\r\n      }\r\n      Cosmic.deleteObject(config, params, (error, response)=&gt;{\r\n        if(error){\r\n          console.log(error)\r\n        }\r\n        if(response.object){\r\n          console.log(chalk.green(&quot;\\u2713&quot; + &quot; Success&quot;))\r\n        }\r\n        MainMenu();\r\n      });\r\n    } else {\r\n      MainMenu();\r\n    }\r\n  })</pre></div><ol><li>Creates a prompt and asks the user for the new note text</li><li>Again we build an object with all the necessary parts you need.<ul><li>we grab the slug from the earlier Cosmic request</li><li>title is determined by what is typed in the box</li><li>content is left as a blank string on purpose</li></ul></li><li>Once we have all the pieces this is where we put them all together and edit what the note says.</li></ol><h2>Final Steps</h2><p>After all of that code it wasn&#39;t too bad in the end. After reading that overview you should have a pretty rough idea of what the program is doing. If your still having problems understanding what is going on I&#39;m just an email away. There are still\r\na few more things that need to be done though. First things first we need to make some adjusts to the package.json file.</p><div><pre class=\"prism\">{\r\n  &quot;name&quot;: &quot;NoteToSelf&quot;,\r\n  &quot;version&quot;: &quot;1.0.0&quot;,\r\n  &quot;description&quot;: &quot;&quot;,\r\n  &quot;main&quot;: &quot;index.js&quot;,\r\n  &quot;scripts&quot;: {\r\n    &quot;test&quot;: &quot;echo \\&quot;Error: no test specified\\&quot; &amp;&amp; exit 1&quot;\r\n  },\r\n  &quot;bin&quot;: {\r\n    &quot;notetoself&quot;: &quot;./index.js&quot;\r\n  },\r\n  &quot;keywords&quot;: [],\r\n  &quot;author&quot;: &quot;&quot;,\r\n  &quot;license&quot;: &quot;ISC&quot;,\r\n  &quot;dependencies&quot;: {\r\n    &quot;chalk&quot;: &quot;^1.1.3&quot;,\r\n    &quot;cosmicjs&quot;: &quot;^2.39.0&quot;,\r\n    &quot;inquirer&quot;: &quot;^3.0.6&quot;,\r\n    &quot;meteor-random&quot;: &quot;^0.0.3&quot;\r\n  }\r\n}</pre></div><p>This will make it so that the application is installable system wide and can be called by using &#39;notetoself&#39;. All that&#39;s left to do is install the package to your system.</p><div><pre class=\"prism\">npm install -g</pre></div><p>Once this is done simply run this command:</p><pre class=\"prism\">notetoself</pre><p>and you&#39;ll have system wide notes available anytime you want.</p><p>If you have any questions about this installing and using this app <a href=\"https://www.cosmicjs.com/community\">join the Cosmic community on Slack</a>, or <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">follow and reach out on Twitter</a>.</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"MaMKL9pcPx","value":"5905fe6a710a2188470004a5","object_type":"authors","object":{"_id":"5905fe6a710a2188470004a5","slug":"noah-vaillancourt","title":"Noah Vaillancourt","content":"","metafields":[{"value":"2664e120-2db7-11e7-826f-f34de0199ac5-noah-vaillancourt.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2664e120-2db7-11e7-826f-f34de0199ac5-noah-vaillancourt.jpeg","imgix_url":"https://imgix.cosmicjs.com/2664e120-2db7-11e7-826f-f34de0199ac5-noah-vaillancourt.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-04-30T15:10:34.252Z","created_by":"5357ef811693be2118000001","created":"2017-04-30T15:10:34.252Z","status":"published"}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"rukd6yWMs1","value":"<p>In this tutorial I&#39;m going to show you how to build a simple note taking app that can be used inside of your command line. We&#39;re going to use Cosmic which allows us to view these notes from anywhere on any device.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"X6yMzlTFEs","value":"f0322940-2e75-11e7-88fd-151e710b2934-note-to-self.jpg","url":"https://cdn.cosmicjs.com/f0322940-2e75-11e7-88fd-151e710b2934-note-to-self.jpg","imgix_url":"https://imgix.cosmicjs.com/f0322940-2e75-11e7-88fd-151e710b2934-note-to-self.jpg"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"fPwf0lIVF8","value":""},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"XVscCXAtKv","value":""}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-04-30T15:09:42.700Z","created_by":"5357ef811693be2118000001","created":"2017-04-30T15:09:42.700Z","status":"published","modified_at":"2020-10-02T02:08:48.172Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-10-02T02:08:48.172Z","unpublish_at":null,"metadata":{"author":{"_id":"5905fe6a710a2188470004a5","slug":"noah-vaillancourt","title":"Noah Vaillancourt","content":"","metafields":[{"value":"2664e120-2db7-11e7-826f-f34de0199ac5-noah-vaillancourt.jpeg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/2664e120-2db7-11e7-826f-f34de0199ac5-noah-vaillancourt.jpeg","imgix_url":"https://imgix.cosmicjs.com/2664e120-2db7-11e7-826f-f34de0199ac5-noah-vaillancourt.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created_at":"2017-04-30T15:10:34.252Z","created_by":"5357ef811693be2118000001","created":"2017-04-30T15:10:34.252Z","status":"published","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/2664e120-2db7-11e7-826f-f34de0199ac5-noah-vaillancourt.jpeg","imgix_url":"https://imgix.cosmicjs.com/2664e120-2db7-11e7-826f-f34de0199ac5-noah-vaillancourt.jpeg"}}},"teaser":"<p>In this tutorial I&#39;m going to show you how to build a simple note taking app that can be used inside of your command line. We&#39;re going to use Cosmic which allows us to view these notes from anywhere on any device.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/f0322940-2e75-11e7-88fd-151e710b2934-note-to-self.jpg","imgix_url":"https://imgix.cosmicjs.com/f0322940-2e75-11e7-88fd-151e710b2934-note-to-self.jpg"},"seo_meta_description":"","published_date":""}},{"_id":"58f68befeda3b0ce47001205","order":137,"slug":"how-to-build-a-simple-blog-using-nodejs","title":"How to Build a Simple Blog Using Node.js","content":"<p style=' color: rgb(0, 0, 0); font-family: \"Open Sans\", sans-serif; font-size: 14px; text-align: start; background-color: rgb(255, 255, 255);'><img src=\"https://www.cosmicjs.com/uploads/08149270-24a1-11e7-995a-2b3b96eb2f07-blog-roll-1.png\" style=\"width: 1005px;\" class=\"fr-fic fr-dib\"></p><p>In this tutorial I&#39;m going to show you how to create a simple blog using Node.js and Cosmic. &nbsp;This is going to be the fastest and most light-weight blog you have ever created. &nbsp;Let&#39;s get started.</p><h2>TL;DR</h2><p><a href=\"https://www.cosmicjs.com/apps/simple-blog/demo\">View the demo</a><br><a href=\"https://www.cosmicjs.com/apps/simple-blog\">Install the Simple Blog App on Cosmic</a><br><a href=\"https://github.com/cosmicjs/simple-blog\" rel=\"noopener noreferrer\" target=\"_blank\">View the codebase on GitHub</a></p><h2>Getting Started</h2><p>Make sure that you have Node.js and NPM installed on your machine, if not,<a href=\"https://nodejs.org/en/\" rel=\"noopener noreferrer\" target=\"_blank\">&nbsp;visit the Node.js website</a> to install the latest version.</p><p>Make sure you have <a href=\"https://yarnpkg.com/en/\" rel=\"noopener noreferrer\" target=\"_blank\">Yarn</a> installed globally:</p><pre class=\"prism\">npm install yarn -g</pre><p>Let&#39;s start by creating a folder for our app. &nbsp;In your favorite terminal run the following commands:</p><pre class=\"prism\">mkdir simple-blog\r\ncd simple-blog</pre><p>Now let&#39;s add a package.json file to import all of our dependencies for our app:</p><pre class=\"prism bash\">vim package.json</pre><p>Add the following to our package.json file:</p><pre class=\"prism\">{\r\n  &quot;dependencies&quot;: {\r\n    &quot;cosmicjs&quot;: &quot;^2.39.0&quot;,\r\n    &quot;express&quot;: &quot;^4.15.2&quot;,\r\n    &quot;hogan-express&quot;: &quot;^0.5.2&quot;,\r\n    &quot;nodemon&quot;: &quot;^1.11.0&quot;\r\n  },\r\n  &quot;scripts&quot;: {\r\n    &quot;start&quot;: &quot;node app.js&quot;,\r\n    &quot;development&quot;: &quot;nodemon app.js&quot;\r\n  }\r\n}</pre><p>&nbsp;It&#39;s a pretty light dependency list for a pretty light app. &nbsp;So what we will install is:</p><p>1. The Cosmic Node Module to get our content from our Cosmic Bucket.<br>2. Express for our web app framework<br>3. Hogan for our template views<br>4. Nodemon for development</p><p>Our scripts are necessary for starting our app in production and development.</p><p>Run the following command to install our dependencies:</p><pre class=\"prism\">yarn</pre><h2>Building Our Blog</h2><p>Next, let&#39;s begin building our blog pages. &nbsp;Create a file titled app.js:</p><pre class=\"prism\">vim app.js</pre><p>and add the following to app.js:</p><pre class=\"prism\">const express = require(&#39;express&#39;)\r\nconst app = express()\r\nconst hogan = require(&#39;hogan-express&#39;)\r\nconst http_module = require(&#39;http&#39;)\r\nconst http = http_module.Server(app)\r\napp.engine(&#39;html&#39;, hogan)\r\napp.set(&#39;port&#39;, (process.env.PORT || 3000))\r\napp.use(&#39;/&#39;, express.static(__dirname + &#39;/public/&#39;))\r\nconst Cosmic = require(&#39;cosmicjs&#39;)\r\nconst helpers = require(&#39;./helpers&#39;)\r\nconst bucket_slug = process.env.COSMIC_BUCKET || &#39;simple-blog-website&#39;\r\nconst read_key = process.env.COSMIC_READ_KEY\r\nconst partials = {\r\n  header: &#39;partials/header&#39;,\r\n  footer: &#39;partials/footer&#39;\r\n}\r\napp.use(&#39;/&#39;, (req, res, next) =&gt; {\r\n  res.locals.year = new Date().getFullYear()\r\n  next()\r\n})\r\n// Home\r\napp.get(&#39;/&#39;, (req, res) =&gt; {\r\n  Cosmic.getObjects({ bucket: { slug: bucket_slug, read_key: read_key } }, (err, response) =&gt; {\r\n    const cosmic = response\r\n    if (cosmic.objects.type.posts) {\r\n      cosmic.objects.type.posts.forEach(post =&gt; {\r\n        const friendly_date = helpers.friendlyDate(new Date(post.created_at))\r\n        post.friendly_date = friendly_date.month + &#39; &#39; + friendly_date.date\r\n      })\r\n    } else {\r\n      cosmic.no_posts = true\r\n    }\r\n    res.locals.cosmic = cosmic\r\n    res.render(&#39;index.html&#39;, { partials })\r\n  })\r\n})\r\nhttp.listen(app.get(&#39;port&#39;), () =&gt; {\r\n  console.info(&#39;==&gt; 🌎  Go to http://localhost:%s&#39;, app.get(&#39;port&#39;));\r\n})</pre><p>There are a few things happening here:</p><p>1. We are importing our essential modules: Express, Cosmic, setting our PORT dynamically, etc.<br>2. We are pointing to some partials: header and footer, you can <a href=\"https://github.com/cosmicjs/simple-blog/tree/master/views/partials\" rel=\"noopener noreferrer\" target=\"_blank\">reference these partials from the codebase on GitHub</a>.<br>3. We view our app home page (&#39;/&#39;) and query our Cosmic Bucket for Post Objects, set the friendly date, then return the index.html template.<br>4. We are also adding our data to this page in the form of a global data store: cosmic. &nbsp;This data structure makes our template implementation super intuitive.</p><h2>Adding Our Home Page Template Variables</h2><p>This part of the process is the most fun because it shows you the power of Cosmic combined with a declarative, logic-less template system like <a href=\"http://mustache.github.io/\" rel=\"noopener noreferrer\" target=\"_blank\">Mustache</a>. &nbsp;Let&#39;s\r\ncreate a folder called views and add our index.html file:</p><pre class=\"prism\">mkdir views\r\ncd views\r\nvim index.html</pre><p>Add the following to index.html:</p><pre class=\"prism markup\">{{&gt; header }}\r\n  &lt;main class=&quot;container&quot;&gt;\r\n    {{# cosmic.objects.type.posts }}\r\n      &lt;div class=&quot;card&quot; data-href=&quot;/{{ slug }}&quot;&gt;\r\n        {{# metadata.hero.imgix_url }}\r\n          &lt;div class=&quot;blog-post-hero blog-post-hero--short&quot; style=&quot;background-image: url({{ metadata.hero.imgix_url }})&quot;&gt;&lt;/div&gt;\r\n        {{/ metadata.hero.imgix_url }}\r\n        &lt;div class=&quot;card-padding&quot;&gt;\r\n          &lt;h2 class=&quot;blog__title blog__title--small&quot;&gt;\r\n            &lt;a href=&quot;/{{ slug }}&quot;&gt;{{ title }}&lt;/a&gt;\r\n          &lt;/h2&gt;\r\n          &lt;div class=&quot;blog__author&quot;&gt;\r\n            &lt;div class=&quot;blog__author-image&quot; style=&quot;background-image: url({{ metadata.author.metadata.image.imgix_url }}?w=100)&quot;&gt;&lt;/div&gt;\r\n            &lt;div class=&quot;blog__author-title&quot;&gt;by &lt;a href=&quot;/author/{{ metadata.author.slug }}&quot;&gt;{{ metadata.author.title }}&lt;/a&gt; on {{ friendly_date }}&lt;/div&gt;\r\n            &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;\r\n          &lt;/div&gt;\r\n          &lt;div class=&quot;blog__teaser droid&quot;&gt;{{{ metadata.teaser }}}&lt;/div&gt;\r\n          &lt;div class=&quot;blog__read-more&quot;&gt;\r\n            &lt;a href=&quot;/{{ slug }}&quot;&gt;Read more...&lt;/a&gt;\r\n          &lt;/div&gt;\r\n        &lt;/div&gt;\r\n      &lt;/div&gt;  \r\n    {{/ cosmic.objects.type.posts }}\r\n  &lt;/main&gt;\r\n{{&gt; footer }}</pre><p>What&#39;s happening here?<br>1. We pull in our header file with the Mustache template variable.<br>2. We pull in our Cosmic data using the Mustache variable {{ cosmic }} which has everything we need to layout our page&#39;s dynamic data.<br>3. We are looping through our {{ cosmic.objects.type.posts }} and rolling out our blog posts.</p><p>What I like about this approach is that the template is completely logic-less aside from some boolean queries and array looping. &nbsp;It really does a great job of keeping our logic separate from our presentation (thanks <a href=\"https://twitter.com/defunkt\" rel=\"noopener noreferrer\" target=\"_blank\">Chris Wanstrath</a>!)</p><p>If you want to build out the rest of the application, <a href=\"https://github.com/cosmicjs/simple-blog\" rel=\"noopener noreferrer\" target=\"_blank\">clone the GitHub repo</a> and follow the README instructions.</p><h2>Conclusion</h2><p>This is the abridged version of the <a href=\"https://www.cosmicjs.com/apps/simple-blog\">Simple Blog app</a> available for download in the <a href=\"https://www.cosmicjs.com/apps\">Cosmic Apps page</a>. &nbsp;The full codebase includes a single post page view as\r\nwell as a page dedicated to each author&#39;s posts. &nbsp;<a href=\"https://github.com/cosmicjs/simple-blog\" rel=\"noopener noreferrer\" target=\"_blank\">View the full codebase on GitHub</a> and deploy this app in a few clicks from your Cosmic dashboard by <a href=\"https://www.cosmicjs.com/apps/simple-blog\">installing the app</a> to your Cosmic Bucket.</p><p>I hope you enjoyed this tutorial, if you have any questions <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\">join our community on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>In this tutorial I&#39;m going to show you how to create a simple blog using Node.js and Cosmic. &nbsp;This is going to be the fastest and most light-weight blog you have ever created. &nbsp;Let&#39;s get started.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"12112ea0-24a1-11e7-995a-2b3b96eb2f07-paradise.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/12112ea0-24a1-11e7-995a-2b3b96eb2f07-paradise.jpg","imgix_url":"https://imgix.cosmicjs.com/12112ea0-24a1-11e7-995a-2b3b96eb2f07-paradise.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-04-18T21:58:07.568Z","created_by":"5357ef811693be2118000001","created":"2017-04-18T21:58:07.568Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>In this tutorial I&#39;m going to show you how to create a simple blog using Node.js and Cosmic. &nbsp;This is going to be the fastest and most light-weight blog you have ever created. &nbsp;Let&#39;s get started.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/12112ea0-24a1-11e7-995a-2b3b96eb2f07-paradise.jpg","imgix_url":"https://imgix.cosmicjs.com/12112ea0-24a1-11e7-995a-2b3b96eb2f07-paradise.jpg"}}},{"_id":"58f4efcd046dc6c8310012c4","order":138,"slug":"feature-update-add-existing-media-to-the-content-editor","title":"Feature Update: Add Existing Media to the Content Editor","content":"<p>We&#39;ve got a new feature to make adding existing media to your Objects even easier. &nbsp;Now when you click the image icon on any content editor, you will see a folder icon to browse existing media in your Bucket.</p><p><img src=\"https://www.cosmicjs.com/uploads/91892500-238b-11e7-b310-a1f15bdfff38-media-select.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>Let us know if you have any questions about how to use this new feature. &nbsp;<a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">Reach out to us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\">join our Slack community</a> to learn more about how Cosmic will help you build apps faster by going <a href=\"https://www.cosmicjs.com/why-cms-api\">API-first with our CMS API</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>We&#39;ve got a new feature to make adding existing media to your Objects even easier. &nbsp;Now when you click the image icon on any content editor, you will see a folder icon to browse existing media in your Bucket.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"c987ca90-238d-11e7-b310-a1f15bdfff38-media-added.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/c987ca90-238d-11e7-b310-a1f15bdfff38-media-added.jpg","imgix_url":"https://imgix.cosmicjs.com/c987ca90-238d-11e7-b310-a1f15bdfff38-media-added.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-04-17T16:39:41.790Z","created_by":"5357ef811693be2118000001","created":"2017-04-17T16:39:41.790Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We&#39;ve got a new feature to make adding existing media to your Objects even easier. &nbsp;Now when you click the image icon on any content editor, you will see a folder icon to browse existing media in your Bucket.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/c987ca90-238d-11e7-b310-a1f15bdfff38-media-added.jpg","imgix_url":"https://imgix.cosmicjs.com/c987ca90-238d-11e7-b310-a1f15bdfff38-media-added.jpg"}}},{"_id":"58f4ed29046dc6c8310011cc","order":139,"slug":"cosmic-js-users-hit-3000000-api-requests","title":"Cosmic Users Hit 3,000,000 API Requests","content":"<p style=\" color: rgb(0, 0, 0); font-family: 'Open Sans', sans-serif; font-size: 14px; text-align: start;\"><img src=\"https://cosmicjs.imgix.net/4ef29830-238a-11e7-b310-a1f15bdfff38-3M-api-requests.jpg\" style=\"width: 917.65625px;\" class=\"fr-fic fr-dii\"></p><p style=\" color: rgb(0, 0, 0); font-family: 'Open Sans', sans-serif; font-size: 14px; text-align: start;\">We wrote just a short time ago about the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Cosmic Community&nbsp;</a>exceeding <a href=\"https://www.cosmicjs.com/blog/api-usage-passes-2000000\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">2,000,000 API Requests</a>, and are now proud to announce the Community&#39;s expanded usage of the API-first cloud-based Content Management Platform has exceeded 3,000,000 API requests to date. This means that users from 90+ countries all over the world have accessed their content in some way 3,000,000 times using the newest and most efficient way to distribute content, through the cloud.&nbsp;</p><p style=\" color: rgb(0, 0, 0); font-family: 'Open Sans', sans-serif; font-size: 14px; text-align: start;\">Cosmic is an API-first CMS that works by decoupling content and code, letting web developers build applications in any programming language while simultaneously giving content editors an intuitive content editing experience. Cosmic Users avoid <a href=\"https://www.cosmicjs.com/why-cms-api\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">technical debt</a> by skipping the installation, configuration, maintenance and security usually associated with legacy installed content management systems. By going API-first now, you will see the immediate benefit of saved project hours, timelines and costs. Don&#39;t let another project become an installed headache that takes away resources from future projects.</p><p style=\" color: rgb(0, 0, 0); font-family: 'Open Sans', sans-serif; font-size: 14px; text-align: start;\">If you have not already joined the cloud revolution with Cosmic, <a href=\"https://www.cosmicjs.com/signup\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Sign Up Today</a>!</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>We&#39;re excited to announce that the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a> has exceeded 3 Million API Requests.&nbsp;</p><footer style=\" font-family: 'Source Sans Pro', Helvetica, sans-serif; font-size: 16px; vertical-align: baseline; color: rgb(100, 100, 100); text-align: start; background-color: rgb(255, 255, 255);\"><br></footer>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"e035a300-238a-11e7-b310-a1f15bdfff38-4ef29830-238a-11e7-b310-a1f15bdfff38-3M-api-requests (1).jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e035a300-238a-11e7-b310-a1f15bdfff38-4ef29830-238a-11e7-b310-a1f15bdfff38-3M-api-requests (1).jpg","imgix_url":"https://imgix.cosmicjs.com/e035a300-238a-11e7-b310-a1f15bdfff38-4ef29830-238a-11e7-b310-a1f15bdfff38-3M-api-requests (1).jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-04-17T16:28:25.237Z","created_by":"5716b504e9c686d006000073","created":"2017-04-17T16:28:25.237Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>We&#39;re excited to announce that the <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Community</a> has exceeded 3 Million API Requests.&nbsp;</p><footer style=\" font-family: 'Source Sans Pro', Helvetica, sans-serif; font-size: 16px; vertical-align: baseline; color: rgb(100, 100, 100); text-align: start; background-color: rgb(255, 255, 255);\"><br></footer>","featured_image":{"url":"https://cdn.cosmicjs.com/e035a300-238a-11e7-b310-a1f15bdfff38-4ef29830-238a-11e7-b310-a1f15bdfff38-3M-api-requests (1).jpg","imgix_url":"https://imgix.cosmicjs.com/e035a300-238a-11e7-b310-a1f15bdfff38-4ef29830-238a-11e7-b310-a1f15bdfff38-3M-api-requests (1).jpg"}}},{"_id":"58dc1f88e46161036e002122","order":140,"slug":"developer-spotlight-micah-walter","title":"Developer Spotlight: Micah Walter","content":"<p style=\"color: rgb(0, 0, 0);\"><img src=\"https://cosmicjs.imgix.net/9e2c74c0-1575-11e7-afb6-c5dedaeafa6f-shutterstock_609283322.jpg?w=1200\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p style=\"color: rgb(0, 0, 0);\">A new Developer Hero joins us in our latest installment of the <a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> Developer Spotlight Series. We sat down with <a href=\"https://micahwalter.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Micah Walter</a>, a developer in Brooklyn, New York who helps lead the charge on innovative app development for large institutions in the not-for-profit space, predominantly for museums. Micah has degrees from the Rochester Institute of Technology and Maryland Institute College of Art. Most recently he served as the Director of Digital &amp; Emerging Media at <a href=\"https://www.cooperhewitt.org\" rel=\"noopener noreferrer\" target=\"_blank\">Cooper Hewitt, Smithsonian Design Museum</a>in New York City. Check him out on <a href=\"https://twitter.com/micahwalter\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>, and enjoy the Q/A.</p><p style=\"color: rgb(0, 0, 0);\"><strong>Cosmic: How long have you been building software?<br></strong>Micah: I&#39;ve been making digital things for as long as I can remember. There was an Apple in my fifth grade classroom and my father bought a Xerox CPM machine for his business\r\nin the 80&#39;s (with Supercalc!). So, I&#39;ve been tinkering with computers for about 30 years.&nbsp;</p><p style=\"color: rgb(0, 0, 0);\">More recently I&#39;ve been working in museums and have had the opportunity to start building scalable websites and interactive projects. That&#39;s been going on for the last seven years or so.</p><p style=\"color: rgb(0, 0, 0);\"><strong>What is your preferred development stack?<br></strong>I really love PHP. I know, boring, old, PHP. But it works, it&#39;s easy to make things quickly, and it&#39;s become pretty rock solid over the years. Python is also a friend. Lately I&#39;ve\r\nbeen tinkering with Go, since that&#39;s what the cool kids are doing... I must confess, I know maybe two functions in JavaScript. I&#39;m also still very much a MySQL nerd. I guess I like things I can depend on.</p><p style=\"color: rgb(0, 0, 0);\"><strong>What past projects are you most proud of and why?<br></strong>I&#39;m really proud of the work I was involved in at Cooper Hewitt Labs. We built a serious infrastructure for a museum with a small team and on staff time. Those systems are there\r\nfor the next generation to come in and build on top of. It&#39;s a good feeling to know I was part of something that will eventually evolve into something else.</p><p style=\"color: rgb(0, 0, 0);\"><strong>What projects are you currently working on? <br></strong>Right now I&#39;m gearing up to do a long term project with another museum. We are aiming to use the same techniques we used at Cooper Hewitt to build a sound infrastructure, but in a much\r\nmore open kind of a way. Museums are funny places. You&#39;re constantly teetering between building things for the visitor with things for the museum staff. There&#39;s a tension there, which is actually a lot of fun to be in the middle of.</p><p style=\"color: rgb(0, 0, 0);\"><strong>We&rsquo;ve seen you&rsquo;ve done a lot of CMS work in the past. What drew you to Cosmic? What made you want to go API-first?<br></strong>It&#39;s still very much an experiment for me, but I think the philosophy is sound. As I mentioned before,\r\nthere are backends you build for the staff to use, and I think we are at a point where this has evolved into bells and whistles... Then there is the public version, which needs to be considered differently. An API-first methodology might help separate\r\nthese concerns, and I&#39;m a fan of anything that helps do that.</p><p style=\"color: rgb(0, 0, 0);\"><strong>What are some technologies you are excited about that you are using today, or want to learn more about?<br></strong>I think serverless architectures like Amazon&#39;s Lambda are really promising, but I&#39;m concerned about the vendor lock-in\r\nissue, which may be quicksand for a place like a museum. Apart from that, AI and Data Science are clearly the next enourmous industries to be a part of. Coming to terms with your self driving car&#39;s sensibility is gonna be something we&#39;ll all have\r\nto deal with at some point.&nbsp;</p><p style=\"color: rgb(0, 0, 0);\">Seriously though, I&#39;m really interested in any kind of technology that can help people in a profound way. I&#39;m not talking about Uber or &quot;moonshot&quot; ideas like Google&#39;s Balloons.. but technology that is cheap, bullet proof, and useful\r\nto those who need it the most.. that&#39;s what&#39;s I want to be involved in.</p><p style=\"color: rgb(0, 0, 0);\"><span style=\"font-size: 18px;\">Cosmic Developer Spotlight Series</span></p><p style=\"color: rgb(0, 0, 0);\"><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-joe-tuson\" rel=\"noopener noreferrer\" target=\"_blank\">Developer Spotlight: Joe Tuson</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-coding-dojo\" rel=\"noopener noreferrer\" target=\"_blank\">Developer Spotlight: Coding Dojo</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-simple-media\" rel=\"noopener noreferrer\" target=\"_blank\">Developer Spotlight: Simple Media</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-jon-kalfayan\" rel=\"noopener noreferrer\" target=\"_blank\">Developer Spotlight: Jon Kalfayan</a><br><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-jon-bloomer\" rel=\"noopener noreferrer\" target=\"_blank\">Developer Spotlight: Jon Bloomer</a></p><p style=\"color: rgb(0, 0, 0);\"><a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> is an API-first cloud-based content management platform that makes it easy to manage applications and content. If you have questions about the <a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic API</a>, please reach out to us on <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> or join the community on <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p><span style=\"color: rgb(0, 0, 0); font-size: 14px; background-color: rgb(255, 255, 255);\">A new Developer Hero joins us in our latest installment of the&nbsp;</span><a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" style=\" font-size: 14px;\" target=\"_blank\">Cosmic</a><span style=\"color: rgb(0, 0, 0); font-size: 14px; background-color: rgb(255, 255, 255);\">&nbsp;Developer Spotlight Series. We sat down with&nbsp;</span><a href=\"https://micahwalter.com/\" rel=\"noopener noreferrer\" style=\" font-size: 14px;\" target=\"_blank\">Micah Walter</a><span style=\"color: rgb(0, 0, 0); font-size: 14px; background-color: rgb(255, 255, 255);\">, a developer in Brooklyn, New York who helps lead the charge on innovative app development for large institutions in the not-for-profit space, predominantly museums.</span></p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"33ec3ae0-14c2-11e7-a09a-17f2d7a11dad-shutterstock_609283322.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/33ec3ae0-14c2-11e7-a09a-17f2d7a11dad-shutterstock_609283322.jpg","imgix_url":"https://imgix.cosmicjs.com/33ec3ae0-14c2-11e7-a09a-17f2d7a11dad-shutterstock_609283322.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-03-29T20:56:40.389Z","created_by":"5716b504e9c686d006000073","created":"2017-03-29T20:56:40.389Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p><span style=\"color: rgb(0, 0, 0); font-size: 14px; background-color: rgb(255, 255, 255);\">A new Developer Hero joins us in our latest installment of the&nbsp;</span><a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" style=\" font-size: 14px;\" target=\"_blank\">Cosmic</a><span style=\"color: rgb(0, 0, 0); font-size: 14px; background-color: rgb(255, 255, 255);\">&nbsp;Developer Spotlight Series. We sat down with&nbsp;</span><a href=\"https://micahwalter.com/\" rel=\"noopener noreferrer\" style=\" font-size: 14px;\" target=\"_blank\">Micah Walter</a><span style=\"color: rgb(0, 0, 0); font-size: 14px; background-color: rgb(255, 255, 255);\">, a developer in Brooklyn, New York who helps lead the charge on innovative app development for large institutions in the not-for-profit space, predominantly museums.</span></p>","featured_image":{"url":"https://cdn.cosmicjs.com/33ec3ae0-14c2-11e7-a09a-17f2d7a11dad-shutterstock_609283322.jpg","imgix_url":"https://imgix.cosmicjs.com/33ec3ae0-14c2-11e7-a09a-17f2d7a11dad-shutterstock_609283322.jpg"}}},{"_id":"58dd08a41864ab667d0000da","order":141,"slug":"new-multiple-objects-metafield","title":"New Multiple Objects Metafield","content":"<p>We just released a new Metafield to help you build content for your apps faster and easier. &nbsp;Now available for all Buckets, the new Multiple Object Relationship allows you to connect multiple Objects to an Object. &nbsp;This enables you to create a one-to-many relationship in addition to the one-to-one relationship still available with the Single Object Relationship Metafield.</p><p>Add, edit and remove your connected Objects easily and reorder them with a simple drag and drop.</p><p><img src=\"https://www.cosmicjs.com/uploads/92f4e430-154c-11e7-afb6-c5dedaeafa6f-multiple-objects-metafield.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>I hope you enjoy this new functionality and find it useful for your projects. &nbsp;If you have any questions, <a href=\"https://www.cosmicjs.com/community\">reach out to us in Slack</a> or <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">on Twitter</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>We just released a new Metafield to help you build content for your apps faster and easier.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"007576e0-154e-11e7-afb6-c5dedaeafa6f-multiple-object-metafield.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/007576e0-154e-11e7-afb6-c5dedaeafa6f-multiple-object-metafield.jpg","imgix_url":"https://imgix.cosmicjs.com/007576e0-154e-11e7-afb6-c5dedaeafa6f-multiple-object-metafield.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-03-30T13:31:16.762Z","created_by":"5357ef811693be2118000001","created":"2017-03-30T13:31:16.762Z","status":"published","modified_at":"2020-08-10T14:04:22.001Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We just released a new Metafield to help you build content for your apps faster and easier.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/007576e0-154e-11e7-afb6-c5dedaeafa6f-multiple-object-metafield.jpg","imgix_url":"https://imgix.cosmicjs.com/007576e0-154e-11e7-afb6-c5dedaeafa6f-multiple-object-metafield.jpg"}}},{"_id":"58d140b97fdbb5dd5e004af4","order":142,"slug":"how-to-build-a-jamstack-website","title":"How to Build a Jamstack Website","content":"<p><img src=\"https://cosmicjs.imgix.net/81abdb40-0e47-11e7-90ce-318e88698e0e-jamstack.jpg?w=1200&auto=format\" style=\"width: 100%;\" class=\"fr-fic fr-dii\"></p><h2><strong>Update</strong></h2><p>Check out the <a href=\"https://www.cosmicjs.com/knowledge-base/jamstack-cms\">Jamstack CMS knowledge base</a> page to learn how you can use Cosmic to build a Jamstack site using <a href=\"https://www.cosmicjs.com/articles?q=gatsbyjs\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby</a>, <a href=\"https://www.cosmicjs.com/articles?q=Nuxt.js\">Nuxt.js</a>, <a href=\"https://www.cosmicjs.com/articles?q=gridsome\">Gridsome</a>, and more.</p><p><br></p><p style=\"text-align: center;\"><a href=\"https://www.cosmicjs.com/articles?q=gatsbyjs\"><img src=\"https://imgix.cosmicjs.com/1931bf40-8479-11e8-9cb3-a15ae07f1c62-Xuq8DypK_400x400.jpg\" style=\"width: 100px; margin-right: 20px;\" class=\"fr-fic fr-dii\"></a>\r\n<a href=\"https://www.cosmicjs.com/articles?q=gridsome\"></a>\r\n<a href=\"https://www.cosmicjs.com/articles?q=Nuxt.js\"><img src=\"https://imgix.cosmicjs.com/2d15d4f0-9300-11ea-838a-0523b52a08cb-nuxt-square.svg\" data-name=\"nuxt-square.svg\" style=\"width: 100px;margin-right: 20px;\" class=\"fr-fic fr-dii\"></a>\r\n<a href=\"https://www.cosmicjs.com/articles?q=Gridsome\"><img src=\"https://cdn.cosmicjs.com/02c54f60-b24e-11ea-a522-15a7eafcdedf-gridsome-cms-icon.jpg\" style=\"width: 100px;\" class=\"fr-fic fr-dii\"></a></p><p><br></p><p>Continue reading for an example using <a href=\"https://www.npmjs.com/package/metalsmith\" rel=\"noopener noreferrer\" target=\"_blank\">Metalsmith</a>.</p><p><br></p><h2><strong>Introduction to Jamstack</strong></h2><p>There&rsquo;s been a recent surge of interest in static websites because they offer benefits including fast page loads and security. &nbsp;And a new term for this new way of building websites, coined by the folks at <a href=\"https://www.netlify.com/\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Netlify</a>, is <a href=\"https://jamstack.org/\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">JAMstack</a>(not to be confused with <a href=\"https://www.jamstack.io/\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">the most addicting way to play the electric guitar</a>). If you are new to this concept,\r\nthe JAMstack is comprised of a JavaScript-powered frontend for page interactions (J), APIs to connect to various APIs to get 3rd party functionality (A) and plain old Markup (HTML) which gets deployed to your instance (M).</p><p><a href=\"https://www.smashingmagazine.com/\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Smashing Magazine</a> has recently <a href=\"https://next.smashingmagazine.com/2017/03/a-little-surprise-is-waiting-for-you-here--meet-the-next-smashing-magazine/\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">raved about creating their new JAMstack website</a> and is currently undergoing a massive renovation of their existing web properties. &nbsp;They are drop-kicking their bloated, pain-point-prone WordPress monolith that they currently maintain in favor of a JAMStack-powered website with help from Netlify and the Netlify Open-Source CMS.<br><br></p><h2 style=' font-family: \"Open Sans\", sans-serif; color: rgb(0, 0, 0); font-size: 30px; text-align: start; background-color: rgb(255, 255, 255);'>Cosmic Jamming</h2><p>In this article, I will show you how you can use Cosmic to deploy your own JAMstack website in just a few clicks. &nbsp;When you JAM with Cosmic, you not only get the benefit of a fast, optimized static website, but your content is also available in the <a href=\"https://www.cosmicjs.com/docs\" style=\" background-color: transparent; color: rgb(0, 175, 215);\">Cosmic API</a>. &nbsp;This gives other applications easy access to your content which could include landing pages, microsites, or native iOS and Android applications.<br><br></p><h3>TL;DR</h3><p>1. <a href=\"https://www.cosmicjs.com/apps/static-website\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Install the Cosmic Static Website</a>.<br>2. <a href=\"https://github.com/cosmicjs/static-website\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">View the code on GitHub</a> to see how the app is built.<br>3. Deploy your app to the Cosmic App Server by going to Your Bucket &gt; Deploy Web App.<br>4. Set up your Webhooks located in Your Bucket &gt; Webhooks.<br><br></p><h3>Getting Started</h3><p>We&rsquo;re going to install the <a href=\"https://www.cosmicjs.com/apps/static-website\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Static Website App</a> available in the <a href=\"https://www.cosmicjs.com/apps\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Cosmic App Store</a>. &nbsp;As you do this, you should also <a href=\"https://github.com/cosmicjs/static-website\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">fork the repo</a> to your own repository on GitHub. &nbsp;This way you can make all the customizations you need to JAM in your own way.</p><p>Let&rsquo;s take a look at how this application is put together. &nbsp;To follow along, <a href=\"https://github.com/cosmicjs/static-website\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">go to the GitHub repo</a>. &nbsp;Here is the <a href=\"http://localhost:3000/cosmic-js/edit-object/app.js\" style=\" background-color: transparent; color: rgb(0, 175, 215);\"></a><a href=\"app.js\">app.js</a> file:</p><pre class=\"prism\">// app.js\r\nvar buildSite = require(&#39;./build-site&#39;)\r\nbuildSite()\r\nvar express = require(&#39;express&#39;)\r\nvar app = express()\r\napp.set(&#39;port&#39;, process.env.PORT || 3000)\r\napp.use(express.static(&#39;build&#39;))\r\napp.get(&#39;/rebuild-site&#39;, (req, res) =&gt; {\r\n  buildSite()\r\n  res.end(&#39;Site rebuilt!&#39;)\r\n})\r\napp.post(&#39;/rebuild-site&#39;, (req, res) =&gt; {\r\n  buildSite()\r\n  res.end(&#39;Site rebuilt!&#39;)\r\n})\r\napp.get(&#39;*&#39;, (req, res) =&gt; {\r\n  res.redirect(&#39;/404&#39;)\r\n})\r\napp.listen(app.get(&#39;port&#39;) || 3000, () =&gt; {\r\n  console.info(&#39;==&gt; 🌎  Go to http://localhost:%s&#39;, app.get(&#39;port&#39;))\r\n})</pre><p>First we start with a <a href=\"http://localhost:3000/cosmic-js/edit-object/Node.js\" style=\" background-color: transparent; color: rgb(0, 175, 215);\"></a><a href=\"Node.js\">Node.js</a> application that includes a few routes:</p><p><code style=' font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 12.6px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);'>/rebuild-site</code> (both a GET and POST for convenience)<br><code style=' font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 12.6px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);'>/404</code><br><code style=' font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 12.6px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);'>/build</code> (to keep all of our static website build files)</p><p>Next let&#39;s take a look at how the site is built.</p><pre class=\"prism\">// <a href=\"build-site.js\">build-site.js</a>\r\nvar Metalsmith = require(&#39;metalsmith&#39;)\r\nvar markdown = require(&#39;metalsmith-markdown&#39;)\r\nvar layouts = require(&#39;metalsmith-layouts&#39;)\r\nvar permalinks = require(&#39;metalsmith-permalinks&#39;)\r\nvar sass = require(&#39;metalsmith-sass&#39;)\r\nvar metalsmithPrism = require(&#39;metalsmith-prism&#39;);\r\nvar Cosmic = require(&#39;cosmicjs&#39;)\r\nvar async = require(&#39;async&#39;)\r\nvar mkdirp = require(&#39;mkdirp&#39;)\r\nvar del = require(&#39;del&#39;)\r\nvar mv = require(&#39;mv&#39;)\r\nvar createPage = require(&#39;./create-page&#39;)\r\nvar config = require(&#39;./config&#39;)\r\nmodule.exports = () =&gt; {\r\n  async.series([\r\n    // Create build-new folder\r\n    callback =&gt; {\r\n      mkdirp(__dirname + &#39;/build-new&#39;, err =&gt; {\r\n        callback()\r\n      })\r\n    },\r\n    callback =&gt; {\r\n      Cosmic.getObjects(config.cosmicjs, (err, res) =&gt; {\r\n        var pages = res.objects.type.pages\r\n        var cosmic = res\r\n        // Create dynamic static pages\r\n        async.eachSeries(pages, (page, callbackEach) =&gt; {\r\n          var args = {\r\n            page: page,\r\n            pages: pages,\r\n            cosmic: cosmic\r\n          }\r\n          createPage(args, callbackEach)\r\n        }, () =&gt; {\r\n          // Create markdown static pages\r\n          var year = (new Date()).getFullYear() // make your footer year dynamic ;) \r\n          Metalsmith(__dirname)\r\n            .metadata({\r\n              cosmic: cosmic,\r\n              year: year\r\n            })\r\n            .source(&#39;./src&#39;)\r\n            .destination(&#39;./build-new&#39;)\r\n            .clean(false)\r\n            .use(sass({\r\n              outputDir: &#39;css/&#39;,\r\n              sourceMap: true,\r\n              sourceMapContents: true\r\n            }))\r\n            .use(markdown( { langPrefix: &#39;language-&#39; } ))\r\n            .use(metalsmithPrism())\r\n            .use(permalinks())\r\n            .use(layouts({\r\n              engine: &#39;handlebars&#39;,\r\n              partials: &#39;layouts/partials&#39;\r\n            }))\r\n            .build((err, files) =&gt; {\r\n              if (err) { throw err }\r\n              callback()\r\n            })\r\n        })\r\n      })\r\n    },\r\n    // Delete build folder\r\n    callback =&gt; {\r\n      del([__dirname + &#39;/build&#39;]).then(() =&gt; {\r\n        callback()\r\n      })\r\n    },\r\n    // Move build-new to build folder\r\n    callback =&gt; {\r\n      mv(__dirname + &#39;/build-new&#39;, __dirname + &#39;/build&#39;, { mkdirp: true }, () =&gt; {\r\n        callback()\r\n      })\r\n    },\r\n    // Delete build-new folder\r\n    callback =&gt; {\r\n      del([__dirname + &#39;/build-new&#39;]).then(() =&gt; {\r\n        // done\r\n      })\r\n    }\r\n  ])\r\n}</pre><p>&nbsp;This file holds all the magic, let&#39;s unpack what&#39;s happening here:<br>1. We&#39;re using <a href=\"http://www.metalsmith.io/\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Metalsmith</a> to build our website files. &nbsp;There&#39;s other build tools for this, but this is the best one (IMO) for JavaScript-built static sites.<br>2. The <code style=' font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 12.6px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);'>build-new</code> folder is created as a temporary place for our new build. &nbsp;This is so we don&#39;t get any down-time from users currently on the website.<br>3. Next we will get all Objects in our Cosmic Bucket using the Cosmic NPM Module and method <code style=' font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 12.6px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);'>Cosmic.getObjects</code><br>4. Then we will parse from our response all Pages. &nbsp;Then begin a loop to create a new static page for each Page Object.<br>5. Each Page Object will then be passed to Metalsmith to build our Page.<br>6. After Metalsmith is done Jamming out our Markup to the <code style=' font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 12.6px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);'>build-new</code> folder, the build folder is deleted.<br>7. Without blinking an eye the new <code style=' font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 12.6px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);'>build</code> folder is created with the fresh build.</p><p>And that&#39;s it! &nbsp;Your Cosmic content is now available in static form in JAMstack generated HTML files. &nbsp;PLUS you have access to all of your content via the Cosmic API. &nbsp;Also if you need someone who&#39;s not versed in Markdown to edit content, they can easily edit content via the WYSIWYG editors in the Cosmic Dashboard.<br><br></p><h3>Using Webhooks for Automatic Rebuilds</h3><p>Cosmic offers a great way to automatically rebuild your JAMstack static website on every content edit with Webhooks. &nbsp;Setting up webhooks is easy. &nbsp;Just go to Your Bucket &gt; Dashboard &gt; Webhooks and set the POST to the endpoint and action of your choice. In this example, you can set your Webhook to POST to <code style=' font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 12.6px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);'>[your-app-hostname]/rebuild-site</code>.<br><img data-image=\"https://www.cosmicjs.com/uploads/b59e0b30-0e47-11e7-90ce-318e88698e0e-webhooks.gif\" style=\"width: 100%;\" class=\"lazy-load fr-fic fr-dib\"></p><h3>In Conclusion</h3><p>In this article we talked about a recent rebrand of static websites (Jamming sounds a lot more fun than static website building). &nbsp;We talked about how you can install a JAMstack-enabled website in a few clicks using the <a href=\"https://www.cosmicjs.com/apps/static-website\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">Cosmic Static Website App</a>. And we showed you how to automatically rebuild your website whenever content is changed via Cosmic Webhooks. &nbsp;If you have any questions, <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">join our Slack channel</a> and <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" style=\" background-color: transparent; color: rgb(0, 175, 215);\" target=\"_blank\">reach out on Twitter</a>.</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"NvqlD1sYT2","value":"5768b253163172890e00002c","object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"qBi5gS3nl2","value":"<p><span style='color: rgb(0, 0, 0); font-family: \"Open Sans\", sans-serif; font-size: 14px; text-align: start; background-color: rgb(255, 255, 255);'>In this article, I will show you how you can use Cosmic to deploy your own JAMstack website in just a few clicks. &nbsp;When you JAM with Cosmic, you not only get the benefit of a fast, optimized static website, but your content is also available in the&nbsp;</span><a href=\"https://www.cosmicjs.com/docs\" style=' background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: \"Open Sans\", sans-serif; font-size: 14px; text-align: start;'>Cosmic API</a><span style='color: rgb(0, 0, 0); font-family: \"Open Sans\", sans-serif; font-size: 14px; text-align: start; background-color: rgb(255, 255, 255);'>.</span></p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"ZlG1VKIIez","value":"81abdb40-0e47-11e7-90ce-318e88698e0e-jamstack.jpg","url":"https://cdn.cosmicjs.com/81abdb40-0e47-11e7-90ce-318e88698e0e-jamstack.jpg","imgix_url":"https://imgix.cosmicjs.com/81abdb40-0e47-11e7-90ce-318e88698e0e-jamstack.jpg"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"fPwf0lIVF8","value":""},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"XVscCXAtKv","value":""}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-03-21T15:03:21.312Z","created_by":"5357ef811693be2118000001","created":"2017-03-21T15:03:21.312Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-08-31T18:09:51.615Z","unpublish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p><span style='color: rgb(0, 0, 0); font-family: \"Open Sans\", sans-serif; font-size: 14px; text-align: start; background-color: rgb(255, 255, 255);'>In this article, I will show you how you can use Cosmic to deploy your own JAMstack website in just a few clicks. &nbsp;When you JAM with Cosmic, you not only get the benefit of a fast, optimized static website, but your content is also available in the&nbsp;</span><a href=\"https://www.cosmicjs.com/docs\" style=' background-color: rgb(255, 255, 255); color: rgb(0, 175, 215); font-family: \"Open Sans\", sans-serif; font-size: 14px; text-align: start;'>Cosmic API</a><span style='color: rgb(0, 0, 0); font-family: \"Open Sans\", sans-serif; font-size: 14px; text-align: start; background-color: rgb(255, 255, 255);'>.</span></p>","featured_image":{"url":"https://cdn.cosmicjs.com/81abdb40-0e47-11e7-90ce-318e88698e0e-jamstack.jpg","imgix_url":"https://imgix.cosmicjs.com/81abdb40-0e47-11e7-90ce-318e88698e0e-jamstack.jpg"},"seo_meta_description":"","published_date":""}},{"_id":"58bcad3c0fd3c95135003cce","order":143,"slug":"how-to-build-a-medium-backup-app","title":"How To Build A Medium Backup App","content":"<p>Medium has become the de-facto platform for publishing online content. &nbsp;With its friction-less UI and viral suggestion engine, it&#39;s not hard to understand why it&#39;s one of the most popular blogging services. &nbsp;I personally enjoy using Medium to post content to the <a href=\"https://medium.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic Medium publication</a>. &nbsp;Even though I trust Medium to store all of my content, I wanted a way to save my Medium posts as a backup,\r\nor to use in any other future applications. &nbsp;When I couldn&#39;t find an available backup application, I decided to build one. &nbsp;In this article, I&#39;m going to show you how to build a Medium backup application using Node.js and Cosmic.</p><p><strong>TL;DR</strong><br><a href=\"https://github.com/cosmicjs/medium-backup\" rel=\"noopener noreferrer\" target=\"_blank\">Check out the full source code on GitHub</a>.<br><a href=\"https://www.cosmicjs.com/apps/medium-backup\" rel=\"noopener noreferrer\" target=\"_blank\">Install the app in minutes on Cosmic.</a></p><p><strong>Getting Started</strong><br>First, we&#39;ll need to go over some limitations. &nbsp;Medium makes an RSS feed available to retrieve posts from any personal account, publication or a custom domain but it only allows you to retrieve the last 10 posts. <a href=\"https://help.medium.com/hc/en-us/articles/214874118-RSS-Feeds-of-publications-and-profiles\" rel=\"noopener noreferrer\" target=\"_blank\">Read this help article from Medium</a> to find out which URL structure to use. It can be <code>https://medium.com/feed/@yourusername</code> or if you have a custom domain <code>https://customdomain.com/feed</code>. If you find that you are only getting partial articles, you may need to go into <a href=\"https://medium.com/me/settings\" rel=\"noopener noreferrer\" target=\"_blank\">your Medium account settings</a> and make sure RSS Feed is set to &quot;Full&quot;.</p><p><strong>Planning the App</strong><br>We want to be able to do a couple things with our Medium backup app:</p><p>1. Manually Import posts from any feed url to our Cosmic Bucket.<br>2. Add / Remove Cron Jobs which will automatically look for new posts and import them into our Cosmic Bucket.<br><br><strong>Building the App</strong><br>In your text editor of choice, start by adding a package.json file:</p><pre class=\"prism\">{\r\n  &quot;dependencies&quot;: {\r\n    &quot;async&quot;: &quot;^2.1.4&quot;,\r\n    &quot;body-parser&quot;: &quot;^1.15.2&quot;,\r\n    &quot;cosmicjs&quot;: &quot;^2.35.0&quot;,\r\n    &quot;express&quot;: &quot;^4.14.0&quot;,\r\n    &quot;hogan-express&quot;: &quot;^0.5.2&quot;,\r\n    &quot;nodemon&quot;: &quot;^1.11.0&quot;,\r\n    &quot;request&quot;: &quot;^2.79.0&quot;,\r\n    &quot;slug&quot;: &quot;^0.9.1&quot;,\r\n    &quot;xml2js&quot;: &quot;^0.4.17&quot;\r\n  },\r\n  &quot;scripts&quot;: {\r\n    &quot;start&quot;: &quot;node app.js&quot;,\r\n    &quot;development&quot;: &quot;nodemon app.js -e js, views/html&quot;\r\n  }\r\n}</pre><p>Then run the following command:</p><pre class=\"prism\">npm install</pre><p>Next create a new file titled app.js and add the following:</p><pre class=\"prism\">// app.js\r\nvar express = require(&#39;express&#39;)\r\nvar async = require(&#39;async&#39;)\r\nvar bodyParser = require(&#39;body-parser&#39;)\r\nvar app = express()\r\napp.use(bodyParser.json())\r\nvar hogan = require(&#39;hogan-express&#39;)\r\napp.engine(&#39;html&#39;, hogan)\r\napp.set(&#39;port&#39;, (process.env.PORT || 3000))\r\napp.use(&#39;/&#39;, express.static(__dirname + &#39;/public/&#39;))\r\n// Config\r\nvar bucket_slug = process.env.COSMIC_BUCKET || &#39;medium-backup&#39;\r\nvar config = {\r\n  cron_interval: process.env.CRON_INTERVAL || 3600000,\r\n  bucket: {\r\n    slug: bucket_slug,\r\n    read_key: process.env.COSMIC_READ_KEY || &#39;&#39;,\r\n    write_key: process.env.COSMIC_WRITE_KEY || &#39;&#39;\r\n  },\r\n  url: process.env.URL || &#39;http://localhost:&#39; + app.get(&#39;port&#39;)\r\n}\r\n// Routes\r\nrequire(&#39;./routes/index.js&#39;)(app, config)\r\nrequire(&#39;./routes/import-posts.js&#39;)(app, config, async)\r\nrequire(&#39;./routes/add-crons.js&#39;)(app, config, async)\r\nrequire(&#39;./routes/delete-cron.js&#39;)(app, config)\r\napp.listen(app.get(&#39;port&#39;))</pre><p>Notice we are using Express for our web framework, we have set our configuration to point to our Cosmic Bucket and added a few routes to handle our home page (index.js), our post import route and our routes to handle the cron adding and deleting.</p><p>Our index.js file is pretty simple. &nbsp;Just add the following:</p><pre class=\"prism\">// index.js\r\nmodule.exports = function(app, config) {\r\n  app.get(&#39;/&#39;, function(req, res) {\r\n    var Cosmic = require(&#39;cosmicjs&#39;)\r\n    Cosmic.getObjectType(config, { type_slug: &#39;crons&#39; }, function(err, response) {\r\n      res.locals.crons = response.objects.all\r\n      res.locals.bucket_slug = config.bucket.slug\r\n      res.render(&#39;index.html&#39;)\r\n    })\r\n  })\r\n}</pre><p>Basically we are calling the Cosmic API to see if we have any crons saved, then rendering our index.html file located in the views folder.&nbsp;</p><p><strong>Import Posts Manually</strong><br>Next, let&#39;s build the import posts functionality. &nbsp;Create a file titled import-posts.js and add the following:</p><pre class=\"prism\">// import-posts.js\r\nmodule.exports = function(app, config, async) {\r\n  app.post(&#39;/import-posts&#39;, function(req, res) {\r\n    var Cosmic = require(&#39;cosmicjs&#39;)\r\n    var request = require(&#39;request&#39;)\r\n    var slug = require(&#39;slug&#39;)\r\n    var parseString = require(&#39;xml2js&#39;).parseString\r\n    var feed_url = req.body.feed_url\r\n    var bucket_slug = req.body.bucket_slug\r\n    var cosmic_config = {\r\n      bucket: {\r\n        slug: bucket_slug,\r\n        read_key: process.env.COSMIC_READ_KEY || &#39;&#39;,\r\n        write_key: process.env.COSMIC_WRITE_KEY || &#39;&#39;\r\n      }\r\n    }\r\n    request(feed_url, function (error, response, body) {\r\n      if (!error &amp;&amp; response.statusCode == 200) {\r\n        parseString(body, function (err, result) {\r\n          var posts = result.rss.channel[0].item\r\n          var posts_imported = []\r\n          async.eachSeries(posts, (post, callback) =&gt; {\r\n            var title = &#39;Post&#39;\r\n            if (post.title)\r\n              title = post.title[0]\r\n            var content, published_at, modified_at, categories, created_by, medium_link;\r\n            if (post.description)\r\n              content = post.description[0]\r\n            if (post[&#39;content:encoded&#39;])\r\n              content = post[&#39;content:encoded&#39;][0]\r\n            if (post[&#39;pubDate&#39;])\r\n              published_at = post[&#39;pubDate&#39;][0]\r\n            if (post[&#39;atom:updated&#39;])\r\n              modified_at = post[&#39;atom:updated&#39;][0]\r\n            if (post[&#39;category&#39;])\r\n              categories = post[&#39;category&#39;]\r\n            if (post[&#39;dc:creator&#39;])\r\n              created_by = post[&#39;dc:creator&#39;][0]\r\n            if (post[&#39;link&#39;])\r\n              medium_link = post[&#39;link&#39;][0]\r\n            // Test if object available\r\n            Cosmic.getObject(cosmic_config, { slug: slug(title) }, function(err, response) {\r\n              if (response &amp;&amp; response.object) {\r\n                // already added\r\n                return callback()\r\n              } else {\r\n                var params = {\r\n                  title: title,\r\n                  slug: slug(title),\r\n                  content: content,\r\n                  type_slug: &#39;posts&#39;,\r\n                  write_key: config.bucket.write_key,\r\n                  metafields: [\r\n                    {\r\n                      key: &#39;published_at&#39;,\r\n                      title: &#39;Published At&#39;,\r\n                      value: published_at\r\n                    },\r\n                    {\r\n                      key: &#39;modified_at&#39;,\r\n                      title: &#39;Modified At&#39;,\r\n                      value: modified_at\r\n                    },\r\n                    {\r\n                      key: &#39;created_by&#39;,\r\n                      title: &#39;Created By&#39;,\r\n                      value: created_by\r\n                    },\r\n                    {\r\n                      key: &#39;medium_link&#39;,\r\n                      title: &#39;Medium Link&#39;,\r\n                      value: medium_link\r\n                    }\r\n                  ]\r\n                }\r\n                if (categories) {\r\n                  var tags = &#39;&#39;\r\n                  categories.forEach(category =&gt; {\r\n                    tags += category + &#39;, &#39;\r\n                  })\r\n                  params.metafields.push({\r\n                    key: &#39;tags&#39;,\r\n                    title: &#39;Tags&#39;,\r\n                    value: tags\r\n                  })\r\n                }\r\n                Cosmic.addObject(cosmic_config, params, function(err, response) {\r\n                  if (response)\r\n                    posts_imported.push(post)\r\n                  callback()\r\n                })\r\n              }\r\n            })\r\n          }, () =&gt; {\r\n            if (!posts_imported.length) {\r\n              res.status(500).json({ error: &#39;There was an error with this request.&#39; })\r\n            }\r\n            res.json({\r\n              bucket_slug: config.bucket.slug,\r\n              posts: posts_imported\r\n            })\r\n          })\r\n        })\r\n      } else {\r\n        res.status(500).json({ error: &#39;feed_url&#39; })\r\n      }\r\n    })\r\n  })\r\n}</pre><p>This file does most of the work in our Medium backup app. &nbsp;What&#39;s happening here is:<br>1. First, we post feed_url and bucket_slug.<br>2. The RSS feed is accessed with the request module and the data is parsed and converted to JSON for easy management.<br>3. Then we loop through all of the posts and check if the post already exists in our Cosmic Bucket. &nbsp;If it exists, do nothing. &nbsp;It it doesn&#39;t exist:<br>4. Create the object in our Cosmic Bucket</p><p>This saves the title, content (HTML also!), published date / time, author, Medium link and even tags to your Cosmic Bucket.</p><p><strong>Import Posts Automatically</strong><br>This is great for our manual import, next let&#39;s create the ability to automatically import my latest articles automatically on a timer. &nbsp;Create a couple files titled add-crons.js and delete-cron.jsto add / remove our cron jobs:</p><pre class=\"prism\">// add-cron.js\r\nmodule.exports = function(app, config, async) {\r\n  app.post(&#39;/add-crons&#39;, function(req, res) {\r\n    var Cosmic = require(&#39;cosmicjs&#39;)\r\n    var slug = require(&#39;slug&#39;)\r\n    var crons = req.body\r\n    async.eachSeries(crons, (cron, callback) =&gt; {\r\n      var params = {\r\n        title: cron.title,\r\n        slug: slug(cron.title),\r\n        type_slug: &#39;crons&#39;,\r\n        write_key: config.bucket.write_key,\r\n        metafields: [\r\n          {\r\n            key: &#39;feed_url&#39;,\r\n            title: &#39;Feed URL&#39;,\r\n            value: cron.feed_url\r\n          },\r\n          {\r\n            key: &#39;bucket_slug&#39;,\r\n            title: &#39;Bucket Slug&#39;,\r\n            value: cron.bucket_slug\r\n          }\r\n        ]\r\n      }\r\n      Cosmic.addObject(config, params, function(err, response) {\r\n        callback()\r\n      })\r\n    }, () =&gt; {\r\n      res.json({\r\n        status: &quot;success&quot;\r\n      })\r\n    })\r\n  })\r\n}</pre><pre class=\"prism\">// delete-cron.js\r\nmodule.exports = function(app, config, async) {\r\n  app.post(&#39;/delete-cron&#39;, function(req, res) {\r\n    var Cosmic = require(&#39;cosmicjs&#39;)\r\n    var slug = req.body.slug\r\n    var params = {\r\n      write_key: config.bucket.write_key,\r\n      slug: slug\r\n    }\r\n    Cosmic.deleteObject(config, params, function(err, response) {\r\n      res.json({\r\n        status: &quot;success&quot;\r\n      })\r\n    })\r\n  })\r\n}</pre><p>Next create a file titled crons.js and add the following:</p><pre class=\"prism\">// crons.js\r\nmodule.exports = function(app, config, async) {\r\n  var Cosmic = require(&#39;cosmicjs&#39;)\r\n  var request = require(&#39;request&#39;)\r\n  var locals = {}\r\n  async.series([\r\n    callback =&gt; {\r\n      Cosmic.getObjectType(config, { type_slug: &#39;crons&#39; }, function(err, response) {\r\n        locals.crons = response.objects.all\r\n        callback()\r\n      })\r\n    },\r\n    callback =&gt; {\r\n      if (locals.crons) {\r\n        async.eachSeries(locals.crons, (cron, callbackEach) =&gt; {\r\n          var feed_url = cron.metadata.feed_url\r\n          var bucket_slug = cron.metadata.bucket_slug\r\n          var params = {\r\n            feed_url: feed_url,\r\n            bucket_slug: bucket_slug \r\n          }\r\n          var options = {\r\n            url: config.url + &#39;/import-posts&#39;,\r\n            json: params\r\n          }\r\n          request.post(options, (err, httpResponse, body) =&gt; {\r\n            if (err) {\r\n              return console.error(&#39;upload failed:&#39;, err)\r\n            }\r\n            console.log(&#39;Successful!  Server responded with:&#39;, body)\r\n            callbackEach()\r\n          });\r\n        })\r\n      }\r\n    }\r\n  ])\r\n}</pre><p>What&#39;s happening is we check our Bucket for any Objects in the &quot;Crons&quot; Object Type. &nbsp;If any are found, we loop through all of these and POST to the import-posts endpoint in our app and import the latest posts.</p><p>Next we will want to set this to run on a timer, change our app.js to look like the following (added the cron at the bottom):</p><pre class=\"prism\">// app.js\r\nvar express = require(&#39;express&#39;)\r\nvar async = require(&#39;async&#39;)\r\nvar bodyParser = require(&#39;body-parser&#39;)\r\nvar app = express()\r\napp.use(bodyParser.json())\r\nvar hogan = require(&#39;hogan-express&#39;)\r\napp.engine(&#39;html&#39;, hogan)\r\napp.set(&#39;port&#39;, (process.env.PORT || 3000))\r\napp.use(&#39;/&#39;, express.static(__dirname + &#39;/public/&#39;))\r\n// Config\r\nvar bucket_slug = process.env.COSMIC_BUCKET || &#39;medium-backup&#39;\r\nvar config = {\r\n  cron_interval: process.env.CRON_INTERVAL || 3600000,\r\n  bucket: {\r\n    slug: bucket_slug,\r\n    read_key: process.env.COSMIC_READ_KEY || &#39;&#39;,\r\n    write_key: process.env.COSMIC_WRITE_KEY || &#39;&#39;\r\n  },\r\n  url: process.env.URL || &#39;http://localhost:&#39; + app.get(&#39;port&#39;)\r\n}\r\n// Routes\r\nrequire(&#39;./routes/index.js&#39;)(app, config)\r\nrequire(&#39;./routes/import-posts.js&#39;)(app, config, async)\r\nrequire(&#39;./routes/add-crons.js&#39;)(app, config, async)\r\nrequire(&#39;./routes/delete-cron.js&#39;)(app, config)\r\n// Crons\r\nvar getCrons = require(&#39;./routes/crons.js&#39;)\r\nsetInterval(() =&gt; getCrons(app, config, async), config.cron_interval) // every 60 minutes\r\napp.listen(app.get(&#39;port&#39;))</pre><p>And that&#39;s pretty much it for our processing files. &nbsp;For the display and simple jQuery frontend check out the index.html file.</p><p><strong>Conclusion</strong><br>I hope you enjoyed this article on how to build a Medium backup app. &nbsp;To begin backing up your Medium posts automatically, install this app on Cosmic in minutes. &nbsp;Let me know if you have any questions about this app or Cosmic <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out\r\nto us on Twitter</a> or <a href=\"https://www.cosmicjs.com/community\">join us in the Cosmic Slack channel</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p style=' color: rgb(0, 0, 0); font-family: \"Open Sans\", sans-serif; font-size: 14px; text-align: start; background-color: rgb(255, 255, 255);'>Medium has become the de-facto platform for publishing online content. &nbsp;In this article, I&#39;m going to show you how to build a Medium backup application using Node.js and Cosmic.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"c517c850-02f6-11e7-99fa-cfd1d1962461-medium.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/c517c850-02f6-11e7-99fa-cfd1d1962461-medium.png","imgix_url":"https://imgix.cosmicjs.com/c517c850-02f6-11e7-99fa-cfd1d1962461-medium.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-03-06T00:28:44.785Z","created_by":"5357ef811693be2118000001","created":"2017-03-07T00:28:44.785Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p style=' color: rgb(0, 0, 0); font-family: \"Open Sans\", sans-serif; font-size: 14px; text-align: start; background-color: rgb(255, 255, 255);'>Medium has become the de-facto platform for publishing online content. &nbsp;In this article, I&#39;m going to show you how to build a Medium backup application using Node.js and Cosmic.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/c517c850-02f6-11e7-99fa-cfd1d1962461-medium.png","imgix_url":"https://imgix.cosmicjs.com/c517c850-02f6-11e7-99fa-cfd1d1962461-medium.png"}}},{"_id":"58b9afe796e2871b11004e12","order":144,"slug":"developer-spotlight-jon-kalfayan","title":"Developer Spotlight: Jon Kalfayan","content":"<p style=\"color: rgb(0, 0, 0);\"><img src=\"https://cosmicjs.imgix.net/e47dce50-003b-11e7-9a49-6975a5effa38-dev-hero.jpg?w=1500\" class=\"fr-fic fr-dib\"></p><p style=\"color: rgb(0, 0, 0);\">The Developer Hero returns in this latest installment of the <a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic&nbsp;</a>Developer Spotlight Series. We sat down with <a href=\"https://github.com/jonk1993\" rel=\"noopener noreferrer\" target=\"_blank\">Jon Kalfayan</a>, a developer in Palo Alto, California who helps lead the charge on innovative app development for a product-driven company. Check him out on <a href=\"https://github.com/jonk1993\" rel=\"noopener noreferrer\" target=\"_blank\">GitHub</a>,\r\nand enjoy the Q/A.</p><p style=\"color: rgb(0, 0, 0);\"><br><strong>1. How long have you been building software?</strong><br>I&#39;ve loved tinkering with computers my whole life, but it&#39;s only been about 6 years since my first &quot;Hello World&quot;. At first I dabbled in a bit of iOS and frontend development, but since finishing my undergraduate degree in 2015 I&#39;ve\r\nbeen doing a lot of Java backend development.</p><p style=\"color: rgb(0, 0, 0);\"><br></p><p style=\"color: rgb(0, 0, 0);\"><strong>2. What is your preferred development stack?</strong><br>IntelliJ is life, or at least it&#39;s where I live most of the time. It had a bit of a learning curve to start but now I&#39;m not sure how I ever relied on emacs for Java projects in school! In the terminal, I prefer zsh (with oh-my-zsh) due to all\r\nthe cool integrated shortcuts and commands. I mostly use git from the terminal and have a slew of aliases to diff, commit, rebase, and accomplish other things. For my bash/python scripting needs, I usually hop in Vim or Sublime Text. Also I&#39;ve recently\r\nbeen converted from vagrant to docker for my test environment setup. Been loving docker, and am curious to explore docker-compose and docker-swarm for some more complicated environment setups.</p><p style=\"color: rgb(0, 0, 0);\"><br></p><p style=\"color: rgb(0, 0, 0);\"><strong>3. Can you talk a little about why you chose Cosmic as your CMS and how it fits into your development process?</strong><br>Being mostly a java infrastructure developer, it was a bit daunting to step into the world of JS and web development. I&#39;ve had the desire to create my own blog for a fairly long time, but one of my concerns was with how I could reasonably manage content for it. <a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic&nbsp;</a>fit the bill perfectly, and let me focus my time on learning the basics of React and Nodejs. Leveraging the <a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic API</a> was a breeze and I love the out-of-the-box management tools. It made adding and editing my blog posts stress free, allowing me to focus on the content and design of the site itself. I feel like I&#39;ve barely scratched the surface with what <a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> has to offer, but I&#39;m excited to learn and use it more!</p><p style=\"color: rgb(0, 0, 0);\"><br></p><p style=\"color: rgb(0, 0, 0);\"><strong>4. What past projects are you most proud of and why?</strong><br>A project I was really happy to contribute to was the open source Instant Answers portion of DuckDuckGo. It&#39;s a search engine that is ad-free and has a very welcoming open source community. It was surprisingly straightforward to dive into the code\r\nbase and contribute simple PRs. Eventually, my Perl chops improved and I was improving and maintaining more complicated Instant Answers. All in all, it was refreshing to find an open source project with an encouraging community for new contributors.</p><p style=\"color: rgb(0, 0, 0);\">Also, learning React along with <a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic&nbsp;</a>to make a blog has been awesome! Despite Java and React being VERY different tools, many of the good practices of quality Java\r\ncode have strong parallels with good React development. For example, the importance of separating a component&rsquo;s state from its business logic. I definitely feel like understanding multiple development stacks is beneficial for any software developer.</p><p style=\"color: rgb(0, 0, 0);\"><br></p><p style=\"color: rgb(0, 0, 0);\"><strong>5. &nbsp;What are some technologies you are excited about that you are using today, or want to learn more about?</strong><br>Recently, integrating much of the new Java 8 APIs into existing code has been fun. The streams API lets you more declaratively code solutions to problems, rather than the classic imperative Java style. I&#39;m impressed the work done by the Java community\r\nto add new features, all while still maintaining backwards compatibility. Also very excited to learn more about web development in general, especially in regard to my web design skills which can definitely use some work :) As a side interest, I&#39;ve\r\nrecently begun tinkering with a raspberry pi. The end goal is to set it up to programmatically play video games, maybe with some fancy AI logic? Cause come on that&#39;d be pretty cool!</p><p style=\"color: rgb(0, 0, 0);\"><a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> is an API-first cloud-based <a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">content management platform</a> that makes it easy to manage applications and content. If you have questions about the <a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic API</a>, <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">please reach out to us on Twitter</a> or <a href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">join the community on Slack</a>.</p><p><br></p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p><span style=\"color: rgb(0, 0, 0); font-size: 14px; background-color: rgb(255, 255, 255);\">The Developer Hero returns in this latest installment of the&nbsp;</span><a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" style=\" font-size: 14px;\" target=\"_blank\">Cosmic&nbsp;</a><span style=\"color: rgb(0, 0, 0); font-size: 14px; background-color: rgb(255, 255, 255);\">Developer Spotlight Series.</span></p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"860f0050-003b-11e7-9a49-6975a5effa38-dev-hero.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/860f0050-003b-11e7-9a49-6975a5effa38-dev-hero.jpg","imgix_url":"https://imgix.cosmicjs.com/860f0050-003b-11e7-9a49-6975a5effa38-dev-hero.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-03-03T18:03:19.814Z","created_by":"5716b504e9c686d006000073","created":"2017-03-03T18:03:19.814Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p><span style=\"color: rgb(0, 0, 0); font-size: 14px; background-color: rgb(255, 255, 255);\">The Developer Hero returns in this latest installment of the&nbsp;</span><a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" style=\" font-size: 14px;\" target=\"_blank\">Cosmic&nbsp;</a><span style=\"color: rgb(0, 0, 0); font-size: 14px; background-color: rgb(255, 255, 255);\">Developer Spotlight Series.</span></p>","featured_image":{"url":"https://cdn.cosmicjs.com/860f0050-003b-11e7-9a49-6975a5effa38-dev-hero.jpg","imgix_url":"https://imgix.cosmicjs.com/860f0050-003b-11e7-9a49-6975a5effa38-dev-hero.jpg"}}},{"_id":"58ade7a5d441604b56000037","order":145,"slug":"cosmic-js-referral-program","title":"Cosmic Referral Program","content":"<p>Today we&#39;re announcing our referral program which rewards you for spreading the word about Cosmic. &nbsp;It&#39;s our way of showing our appreciation for you when you tell friends and colleagues about us.</p><p><strong>How to participate</strong><br>1. Go to <a href=\"https://www.cosmicjs.com/account/referrals\">your account settings page</a> to get your referral link (screenshot below).<br>2. Use the share buttons to tell friends and followers on your social channels.<br>3. Add your referral link to your website or blog (hopefully it&#39;s powered by Cosmic <span class=\"fr-emoticon fr-deletable\">😉</span> ).</p><p><strong>How it works</strong><br>For every referral that signs up and upgrades a Bucket plan, you receive <strong>$10</strong> towards any purchase on Cosmic.</p><p>We&#39;re very grateful to you for choosing Cosmic as your CMS API. &nbsp;We know that not everyone is as forward-thinking with their application stack... yet. &nbsp;With your help, we can help more people build apps faster, manage content easier and work together more enjoyably using Cosmic.</p><p><a href=\"https://www.cosmicjs.com/account/referrals\">Click here to get your referral link</a>.<br><br></p><p style=\"text-align: center;\"><a href=\"https://www.cosmicjs.com/account/referrals\"><img src=\"https://www.cosmicjs.com/uploads/6aee6f60-f936-11e6-b967-f10a87cd789e-cosmicjs-referrals.png\" style=\"width: 797px; height: 592.483px;\" class=\"fr-fic fr-dib\"></a></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>Today we&#39;re announcing our referral program which rewards you for spreading the word about Cosmic. &nbsp;It&#39;s our way of showing our appreciation for you when you tell friends and colleagues about us.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"1370e010-f93b-11e6-b967-f10a87cd789e-cosmicjs-referral.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/1370e010-f93b-11e6-b967-f10a87cd789e-cosmicjs-referral.jpg","imgix_url":"https://imgix.cosmicjs.com/1370e010-f93b-11e6-b967-f10a87cd789e-cosmicjs-referral.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-02-22T19:33:57.950Z","created_by":"5357ef811693be2118000001","created":"2017-02-22T19:33:57.950Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>Today we&#39;re announcing our referral program which rewards you for spreading the word about Cosmic. &nbsp;It&#39;s our way of showing our appreciation for you when you tell friends and colleagues about us.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/1370e010-f93b-11e6-b967-f10a87cd789e-cosmicjs-referral.jpg","imgix_url":"https://imgix.cosmicjs.com/1370e010-f93b-11e6-b967-f10a87cd789e-cosmicjs-referral.jpg"}}},{"_id":"58ac5b55cab58ae4360006d4","order":146,"slug":"get-more-with-the-updated-free-plan","title":"Get More With the Updated Free Plan","content":"<p style=\"text-align: center;\"><img src=\"https://www.cosmicjs.com/uploads/7f552490-f84f-11e6-9bd1-e3de1d94451e-free.jpg\" style=\"width: 504px; height: 449.561px;\" class=\"fr-fic fr-dib\"></p><p>Cosmic is on a mission to make your job as a development team faster and easier. &nbsp;With that in mind we&#39;re excited to give you more with the <a href=\"https://www.cosmicjs.com/pricing\">Free Bucket Plan</a>. &nbsp;The additional features will help you scale your projects and give you more right out of the box. &nbsp;Now when you signup for Cosmic at the Free Plan level:<br><br>1. You have full access to Business Plan features including <strong>Webhooks</strong> and <strong>Localization</strong>.<br>2. Before you were limited to 2 users to each Free Bucket, now you can have as many as <strong>3 users</strong>.<br>3. You used to be limited to one Free Bucket at a time, now you can have as many as <strong>5 Free Buckets</strong> at a time.<br>4. You have 14 days to upgrade your Free Bucket to any paid plan.<br><br>We are happy to make it easier for you to get started building apps faster using Cosmic. &nbsp;If you have any questions about our new pricing please <a href=\"https://www.cosmicjs.com/community\">join our Slack community</a> and <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>We&#39;re excited to give you more with the Free plan. &nbsp;Our new Free Plan makes it easier to try out additional features and get more right from the start.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"9e842420-f849-11e6-a8b8-d11da76a56e1-free.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/9e842420-f849-11e6-a8b8-d11da76a56e1-free.jpg","imgix_url":"https://imgix.cosmicjs.com/9e842420-f849-11e6-a8b8-d11da76a56e1-free.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-02-21T15:23:01.924Z","created_by":"5357ef811693be2118000001","created":"2017-02-21T15:23:01.924Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We&#39;re excited to give you more with the Free plan. &nbsp;Our new Free Plan makes it easier to try out additional features and get more right from the start.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/9e842420-f849-11e6-a8b8-d11da76a56e1-free.jpg","imgix_url":"https://imgix.cosmicjs.com/9e842420-f849-11e6-a8b8-d11da76a56e1-free.jpg"}}},{"_id":"58ab41df5f2d66b436000033","order":147,"slug":"new-search-feature","title":"New Search Feature","content":"<p>We&#39;ve just added a new feature that makes it easier to find Objects in your Bucket. &nbsp;This is especially useful if you have a lot of Objects and you need to find them fast. &nbsp;Just look for the search icon in your Dashboard header.</p><p><img src=\"https://www.cosmicjs.com/uploads/389a7220-f7a1-11e6-8a84-21fb9e3aac9f-search-feature.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p><br></p><p>If you have any questions for us, <a href=\"https://www.cosmicjs.com/community\">join our Slack community</a>, or <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>Happy Presidents Day (or Not My Presidents Day for some)! &nbsp;We&#39;ve just added a new feature that makes it easier to find Objects in your Bucket.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"3b29da20-f7a2-11e6-be51-9b681e64ce98-gw-search-feature.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/3b29da20-f7a2-11e6-be51-9b681e64ce98-gw-search-feature.jpg","imgix_url":"https://imgix.cosmicjs.com/3b29da20-f7a2-11e6-be51-9b681e64ce98-gw-search-feature.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-02-20T19:22:07.802Z","created_by":"5357ef811693be2118000001","created":"2017-02-20T19:22:07.802Z","status":"published","modified_at":"2020-08-10T14:04:22.001Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>Happy Presidents Day (or Not My Presidents Day for some)! &nbsp;We&#39;ve just added a new feature that makes it easier to find Objects in your Bucket.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/3b29da20-f7a2-11e6-be51-9b681e64ce98-gw-search-feature.jpg","imgix_url":"https://imgix.cosmicjs.com/3b29da20-f7a2-11e6-be51-9b681e64ce98-gw-search-feature.jpg"}}},{"_id":"58a202e29f7b5f2d26001236","order":148,"slug":"introducing-the-graphql-api","title":"Introducing the GraphQL API","content":"<p><img src=\"https://www.cosmicjs.com/uploads/7886dc10-f248-11e6-b422-43c28e5dfa6b-graphql.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>We are excited to announce the addition of our GraphQL API to help you build content-powered apps faster and more efficiently. &nbsp;The Cosmic community has been very supportive of adding GraphQL as an alternative to our REST API and we are happy to now make this available. &nbsp;Check out the new <a href=\"https://docs.cosmicjs.com/api-reference/available-methods#graphql\" rel=\"noopener noreferrer\" target=\"_blank\">documentation</a> to learn more about GraphQL methods to get your content.<br><br><strong>What is GraphQL?</strong><br>If you don&rsquo;t know about <a href=\"http://graphql.org/\" rel=\"noopener noreferrer\" target=\"_blank\">GraphQL</a>, it has been gaining popularity since Facebook open-sourced the project a couple of years ago. &nbsp;It is an API alternative to the traditional REST-ful approach to fetching data from an endpoint.<br><br><strong>Why is <strong>GraphQL</strong> so Special?</strong><br>GraphQL gives you the power to be more efficient with your API calls by allowing clients to query only specific values, limiting the amount of data returned. &nbsp;From the official website: it &ldquo;gives clients the power to ask for exactly what they need and nothing more&rdquo;. &nbsp;For instance here is a response from our (still awesome) REST API:<br><a href=\"https://www.cosmicjs.com/v1/creative-agency/object/about?hide_metafields=true&pretty=true\" target=\"_blank\"></a><a href=\"https://api.cosmicjs.com/v1/creative-agency/object/about?hide_metafields=true&pretty=true\" rel=\"noopener noreferrer\" target=\"_blank\">https://api.cosmicjs.com/v1/creative-agency/object/about?hide_metafields=true&amp;pretty=true</a></p><p><iframe src=\"https://api.cosmicjs.com/v1/creative-agency/object/about?hide_metafields=true&pretty=true\" frameborder=\"0\" style=\"width: 100%; height: 550px;\"></iframe></p><p>And here is the same response specifying which fields to return using GraphQL (if you just need to get title and content):</p><p><iframe src=\"https://cosmic-graphql-playground.netlify.app/?endpoint=https%3A%2F%2Fgraphql.cosmicjs.com%2Fv2&query=%7B%0A%20%20getObject%28%0A%20%20%20%20bucket_slug%3A%20%22creative-agency%22%2C%0A%20%20%20%20input%3A%20%7B%20%0A%20%20%20%20%20%20slug%3A%20%22about%22%0A%20%20%20%20%7D%0A%20%20%29%20%7B%0A%20%20%20%20%20%09title%0A%20%20%20%20%20%20content%0A%20%20%7D%0A%7D\" frameborder=\"0\" style=\"width: 100%; height: 530px;\"></iframe><br></p><p><br>So you can see the difference in returned data. &nbsp;This is more declarative and more empowering for every client accessing the API. &nbsp;The new Cosmic GraphQL API gives you the ability to access just what you need from your Buckets and nothing\r\nyou don&rsquo;t. &nbsp;This is especially great for mobile when every saved network byte counts.</p><p>We hope you enjoy the addition of GraphQL to help you build apps faster, now with less unused data. &nbsp;Learn more about the <a href=\"https://docs.cosmicjs.com/api-reference/available-methods#graphql\">Cosmic GraphQL API in the documentation</a>. &nbsp;Let us know if you have any questions by <a href=\"https://www.cosmicjs.com/community\">joining the community on Slack</a> or <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">reaching out on Twitter</a>.</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"fRi0GSLocl","value":"5768b253163172890e00002c","object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"nlpFl26U4v","value":"<p>We are excited to announce the addition of our GraphQL API to help you get content from your Cosmic Buckets faster and more efficiently. &nbsp;The Cosmic community has been very supportive of adding GraphQL as an alternative to our REST API and we are happy to now make this available.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"WvylSsZTtl","value":"7886dc10-f248-11e6-b422-43c28e5dfa6b-graphql.jpg","url":"https://cdn.cosmicjs.com/7886dc10-f248-11e6-b422-43c28e5dfa6b-graphql.jpg","imgix_url":"https://imgix.cosmicjs.com/7886dc10-f248-11e6-b422-43c28e5dfa6b-graphql.jpg"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"X5ifkCg6xl","value":""},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"Of8YRMON3c","value":""}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-02-14T19:02:58.122Z","created_by":"5357ef811693be2118000001","created":"2017-02-14T19:02:58.122Z","status":"published","modified_at":"2022-10-06T13:42:25.540Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-10-06T13:42:25.540Z","unpublish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We are excited to announce the addition of our GraphQL API to help you get content from your Cosmic Buckets faster and more efficiently. &nbsp;The Cosmic community has been very supportive of adding GraphQL as an alternative to our REST API and we are happy to now make this available.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/7886dc10-f248-11e6-b422-43c28e5dfa6b-graphql.jpg","imgix_url":"https://imgix.cosmicjs.com/7886dc10-f248-11e6-b422-43c28e5dfa6b-graphql.jpg"},"seo_meta_description":"","published_date":""}},{"_id":"589496a10b32dcfd64000302","order":149,"slug":"api-usage-passes-2000000","title":"API Usage Passes 2,000,000","content":"<p><img src=\"https://www.cosmicjs.com/uploads/32ae7a80-ea1f-11e6-a726-bfd644d07af4-cosmic-js-api-usage-2-mili.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>Today is a happy day for us. &nbsp;We have passed 2,000,000 total requests to the Cosmic API. &nbsp;That means that people from all over the world have accessed their content in some way 2,000,000 times using the newest and most efficient way to distribute content, through the cloud.<br><br>We are on a mission to help every digital team be more efficient by providing a simple API to power content for their website or application. &nbsp;And this milestone provides some validation for that goal. &nbsp;We are grateful to all our users who are joining us on this journey.<br><br>If you have not already joined the cloud revolution with us, <a href=\"https://www.cosmicjs.com/signup\">we would love to have you join</a>!<br><br>Thank you!<br>Tony and Carson<br>Founders</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>We have a mission to help every digital team be more efficient by providing a simple API to power content for their website or application. &nbsp;And this milestone provides some validation for that goal. &nbsp;We are grateful to all our users who are joining us on this journey.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"f5b7ca00-ea1e-11e6-a726-bfd644d07af4-cosmic-js-api-usage-2-mili.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f5b7ca00-ea1e-11e6-a726-bfd644d07af4-cosmic-js-api-usage-2-mili.jpg","imgix_url":"https://imgix.cosmicjs.com/f5b7ca00-ea1e-11e6-a726-bfd644d07af4-cosmic-js-api-usage-2-mili.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-02-03T14:41:37.016Z","created_by":"5357ef811693be2118000001","created":"2017-02-03T14:41:37.016Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We have a mission to help every digital team be more efficient by providing a simple API to power content for their website or application. &nbsp;And this milestone provides some validation for that goal. &nbsp;We are grateful to all our users who are joining us on this journey.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/f5b7ca00-ea1e-11e6-a726-bfd644d07af4-cosmic-js-api-usage-2-mili.jpg","imgix_url":"https://imgix.cosmicjs.com/f5b7ca00-ea1e-11e6-a726-bfd644d07af4-cosmic-js-api-usage-2-mili.jpg"}}},{"_id":"589414e1264ff67b61000036","order":150,"slug":"now-add-your-bucket-thumbnail","title":"Now Add Your Bucket Thumbnail","content":"<p>We&#39;re always striving to make the job of the developer and content editor faster and easier. &nbsp;With this in mind, we&#39;ve just released the ability to add thumbnail images to your Bucket.</p><p>To add a thumbnail image to your Bucket simply go to your Bucket media area and select the settings button on your media row, then click Set as Bucket Thumbnail.</p><p style=\"text-align: center;\"><img src=\"https://www.cosmicjs.com/uploads/a886b2f0-e9d3-11e6-9628-83477a068e37-cosmicjs-thumbnail.gif\" style=\"width: 100%;\" class=\"fr-fic fr-dib\"></p><p>For our users with a growing list of Buckets, this small change really makes it easier to spot the Bucket that you want to edit.</p><p>If you have any questions, please reach out to us in <a href=\"https://www.cosmicjs.com/community\">our Slack channel</a>, or on <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>We&#39;re always striving to make the job of the developer and content editor faster and easier. &nbsp;Now you can add thumbnails to your Buckets.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"4e103650-e9d5-11e6-a4a8-0721aa97d7ea-thumb.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/4e103650-e9d5-11e6-a4a8-0721aa97d7ea-thumb.jpg","imgix_url":"https://imgix.cosmicjs.com/4e103650-e9d5-11e6-a4a8-0721aa97d7ea-thumb.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-02-03T05:28:01.863Z","created_by":"5357ef811693be2118000001","created":"2017-02-03T05:28:01.863Z","status":"published","modified_at":"2020-08-10T14:04:22.001Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We&#39;re always striving to make the job of the developer and content editor faster and easier. &nbsp;Now you can add thumbnails to your Buckets.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/4e103650-e9d5-11e6-a4a8-0721aa97d7ea-thumb.jpg","imgix_url":"https://imgix.cosmicjs.com/4e103650-e9d5-11e6-a4a8-0721aa97d7ea-thumb.jpg"}}},{"_id":"588f7df6386a2eb513000ee8","order":151,"slug":"developer-and-editor-toggle-views-now-available","title":"Developer and Editor Toggle Views Now Available","content":"<p>We&#39;ve just rolled out a feature for Admins and Developers to be able to preview the Object editing experience for Editors. To use the new feature, simply navigate to your Cosmic Dashboard and click to edit any existing Object. &nbsp;You will notice that you now have a toggle switch to switch between Developer and Editor views.<br><br>Simply toggle the switch from Developer to Editor to view the Object through the eyes of the Editor Role. You&#39;ll notice items such as the API endpoint and Metafields options disappear, allowing Editors to remain focused on content management.&nbsp;</p><p><img src=\"https://www.cosmicjs.com/uploads/637b2af0-e713-11e6-be97-77f6c79ba651-6eRFLE7CPJ.gif\" class=\"fr-dii fr-draggable\">Toggling between Developer and Editor can help you visualize what your team members will see in the Cosmic Dashboard once they receive access to your bucket. You can easily set up User Roles within the Users Tab, and now you can even see User Roles Previews from the Object Toggle.&nbsp;</p><section><article><p><a data-href=\"https://www.cosmicjs.com/\" href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> is an API-first cloud-based content management platform that makes it easy to manage applications and content. If you have questions about the Cosmic API, please reach out to the founders on <a data-href=\"https://twitter.com/cosmic_js\" href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> or <a data-href=\"https://www.cosmicjs.com/community\" href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Slack</a>.</p><p name=\"a976\"><a data-href=\"https://twitter.com/carsoncgibbons\" href=\"https://twitter.com/carsoncgibbons\" rel=\"noopener noreferrer\" target=\"_blank\">Carson Gibbons</a> is the Co-Founder &amp; CMO of <a data-href=\"https://www.cosmicjs.com/\" href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a>, an API-first Cloud-based <a data-href=\"https://www.cosmicjs.com/\" href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Content Management Platform</a> that decouples content from code, allowing devs to build slick apps and websites in any programming language they want.</p></article></section>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>Introducing the Developer / Editor Toggle View to your Cosmic Dashboard.&nbsp;</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"7c3079e0-e715-11e6-924f-1379d96c2b4d-shutterstock_542223019.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/7c3079e0-e715-11e6-924f-1379d96c2b4d-shutterstock_542223019.jpg","imgix_url":"https://imgix.cosmicjs.com/7c3079e0-e715-11e6-924f-1379d96c2b4d-shutterstock_542223019.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-01-30T17:55:02.727Z","created_by":"5716b504e9c686d006000073","created":"2017-01-30T17:55:02.727Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>Introducing the Developer / Editor Toggle View to your Cosmic Dashboard.&nbsp;</p>","featured_image":{"url":"https://cdn.cosmicjs.com/7c3079e0-e715-11e6-924f-1379d96c2b4d-shutterstock_542223019.jpg","imgix_url":"https://imgix.cosmicjs.com/7c3079e0-e715-11e6-924f-1379d96c2b4d-shutterstock_542223019.jpg"}}},{"_id":"588929f6d837db4c46000a47","order":152,"slug":"introducing-cosmic-js-enterprise-built-for-business","title":"Introducing Cosmic Enterprise: Built for Business","content":"<p>Cosmic, an API-first cloud-based CMS API, is debuting its <a href=\"https://www.cosmicjs.com/pricing\" rel=\"noopener noreferrer\" target=\"_blank\">new pricing and service tiers</a> for Enterprise teams. Built for the speed of business, the new tier combines all of the great <a href=\"https://www.cosmicjs.com/features\" rel=\"noopener noreferrer\" target=\"_blank\">features</a> found on paid tiers within the platform plus enterprise-level features such as Automatic Backups, Dedicated Infrastructure and coverage by our <a href=\"https://www.cosmicjs.com/service-level-agreement\" rel=\"noopener noreferrer\" target=\"_blank\">Enterprise-class SLA</a>.<br><br><img src=\"https://www.cosmicjs.com/uploads/bd2b61f0-e34e-11e6-ab4d-a938dc04426d-cosmicjs-enterprise.png\" class=\"fr-dii fr-draggable\"></p><p><br><a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> is debuting the new product tier at the request of corporations and government agencies looking to transition their content management stacks from legacy installed systems to cloud-based content delivery via <a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">CMS API</a>.&nbsp;</p><p>Enterprise plans remain flexible for a la carte additions to be scoped on an individual basis. Clients will have expanded use of the CMS API and data storage, plus premium support from the Cosmic Enterprise Team. For more information on Enterprise Plans with Cosmic, <a href=\"https://www.cosmicjs.com/contact?subject=Enterprise%20Pricing\" rel=\"noopener noreferrer\" target=\"_blank\">contact us today</a>.&nbsp;</p><p><a data-href=\"https://www.cosmicjs.com/\" href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> is an API-first cloud-based content management platform that makes it easy to manage applications and content. If you have questions about the Cosmic API, please reach out to the founders on <a data-href=\"https://twitter.com/cosmic_js\" href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> or <a data-href=\"https://www.cosmicjs.com/community\" href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>Cosmic debutes its Enterprise Plans for Content Management and Application Development.&nbsp;</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"9eb7b560-e34f-11e6-ab4d-a938dc04426d-08c6d9f0-e34f-11e6-ad4a-7bd78427fea1-cosmicjs-enterprise (1).jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/9eb7b560-e34f-11e6-ab4d-a938dc04426d-08c6d9f0-e34f-11e6-ad4a-7bd78427fea1-cosmicjs-enterprise (1).jpg","imgix_url":"https://imgix.cosmicjs.com/9eb7b560-e34f-11e6-ab4d-a938dc04426d-08c6d9f0-e34f-11e6-ad4a-7bd78427fea1-cosmicjs-enterprise (1).jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-01-25T22:43:02.497Z","created_by":"5716b504e9c686d006000073","created":"2017-01-25T22:43:02.497Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>Cosmic debutes its Enterprise Plans for Content Management and Application Development.&nbsp;</p>","featured_image":{"url":"https://cdn.cosmicjs.com/9eb7b560-e34f-11e6-ab4d-a938dc04426d-08c6d9f0-e34f-11e6-ad4a-7bd78427fea1-cosmicjs-enterprise (1).jpg","imgix_url":"https://imgix.cosmicjs.com/9eb7b560-e34f-11e6-ab4d-a938dc04426d-08c6d9f0-e34f-11e6-ad4a-7bd78427fea1-cosmicjs-enterprise (1).jpg"}}},{"_id":"58766acff3dcb91553001816","order":153,"slug":"managing-users-who-manage-content","title":"Managing Users Who Manage Content","content":"<p><img class=\"fr-dib fr-draggable\" src=\"https://cosmicjs.imgix.net/da1c3f60-d826-11e6-b099-e138cf5cca95-shutterstock_503352379.jpg?w=1200\" style=\"width: 100%;\">This week <a href=\"https://www.cosmicjs.com/apps/email-capture/demo\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> debuted its 4th User Type: Contributor. We wrote about it in <a href=\"https://www.cosmicjs.com/blog/contributor-role-now-available\" rel=\"noopener noreferrer\" target=\"_blank\">yesterday&#39;s blog</a> and are now publishing this blog to detail all four role types within the Cosmic Dashboard: Admin | Developer | Editor | Contributor.&nbsp;</p><p>User types is a crucial feature set for any cloud-based CMS, and we have accrued these role types based on our &quot;Build | Measure | Learn&quot; approach to our iterative feedback loop when talking to users who have signed up for the platform. We originally\r\npresented the platform with three options (Admin, Developer, Editor). We heard many use case scenarios in which an Admin or Editor would want to extend a Contributor role to someone simply for drafting purposes.&nbsp;</p><p><span style=\"font-size: 24px;\">Admin</span><br>You own it, you&#39;re probably paying for it, and you have the ultimate control. Add a Bucket, Delete a Bucket, Add Users, Download Buckets, you get the keys to the kingdom. This role type is generally an Agency Principal, Project Manager Lead, Lead\r\nDeveloper and similar role types that would oversee a web application build.</p><p><strong>Adding an Admin</strong></p><p><img src=\"https://www.cosmicjs.com/uploads/40bce460-d816-11e6-b1e2-9d75e802ed6b-Screen%20Shot%202017-01-11%20at%209.52.31%20AM.png\" class=\"fr-dii fr-draggable\"></p><p><strong>Admin CMS View</strong></p><p><img src=\"https://www.cosmicjs.com/uploads/4372f4f0-d81c-11e6-b078-535e435f4ad7-Screen%20Shot%202017-01-11%20at%2010.37.22%20AM.png\" class=\"fr-dii fr-draggable\"></p><p><span style=\"font-size: 24px;\">Developer</span><br>The keys to the API kingdom are yours. Build applications, upgrade buckets and track usage. The developer has access to everything that an Admin does, with the exception of access to Settings.&nbsp;</p><p><strong>Add a Developer</strong></p><p><img src=\"https://www.cosmicjs.com/uploads/460ff5b0-d816-11e6-b1e2-9d75e802ed6b-Screen%20Shot%202017-01-11%20at%209.52.15%20AM.png\" class=\"fr-dii fr-draggable\"></p><p><strong>Developer CMS View</strong></p><p><img src=\"https://www.cosmicjs.com/uploads/5f1179c0-d821-11e6-a98f-d5b9b9535728-Screen%20Shot%202017-01-11%20at%2011.13.13%20AM.png\" class=\"fr-dii fr-draggable\"></p><p><span style=\"font-size: 24px;\">Editor</span><br>The Editor Role is similar to a Contributor Role in that you can add and draft content, but also have authorization to publish content, delete content and oversee the bucket&#39;s content as a whole. As a frame of reference, I am an Editor for Cosmic\r\nJS and can easily login, draft and publish blog posts without the confusion of Admin and Developer features being present.</p><p><strong>Add an Editor</strong></p><p><img src=\"https://www.cosmicjs.com/uploads/49c77f70-d816-11e6-b1e2-9d75e802ed6b-Screen%20Shot%202017-01-11%20at%209.52.47%20AM.png\" class=\"fr-dii fr-draggable\"></p><p><strong>Editor CMS View</strong></p><p><img src=\"https://www.cosmicjs.com/uploads/07b90a30-d81c-11e6-b078-535e435f4ad7-Screen%20Shot%202017-01-11%20at%2010.35.42%20AM.png\" class=\"fr-dii fr-draggable\"></p><p><span style=\"font-size: 24px;\">Contributor</span><br>Feel free to contribute, but that&#39;s about it. Once you&#39;ve been granted access to a bucket, you can draft content for review by an Editor, Admin or Developer on your Bucket.</p><p><strong>Add a Contributor</strong></p><p><img src=\"https://www.cosmicjs.com/uploads/4e5ff350-d816-11e6-b1e2-9d75e802ed6b-Screen%20Shot%202017-01-11%20at%209.53.04%20AM.png\" class=\"fr-dii fr-draggable\"></p><p><strong>Contributor CMS View</strong></p><p><img src=\"https://www.cosmicjs.com/uploads/39ffdea0-d81d-11e6-a98f-d5b9b9535728-Screen%20Shot%202017-01-11%20at%2010.43.36%20AM.png\" class=\"fr-dii fr-draggable\"></p><p><strong>Bucket Users Overview</strong></p><p><img src=\"https://www.cosmicjs.com/uploads/dafe5870-d81a-11e6-8041-6d95c1ba5322-Screen%20Shot%202017-01-11%20at%2010.27.03%20AM.png\" class=\"fr-dii fr-draggable\"></p><p><strong>Editing a Bucket User&#39;s Contributor Role</strong></p><p><img src=\"https://www.cosmicjs.com/uploads/bb10a420-d81d-11e6-8041-6d95c1ba5322-Screen%20Shot%202017-01-11%20at%2010.47.36%20AM.png\" class=\"fr-dii fr-draggable\"></p><p><a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> makes it easy to clarify even which portions of your bucket are applicable for Contributor access and viewing. If I am a Bucket Admin and have a freelance writer on assignment for a blog, I can extend a Contributor Role to said person for the &quot;Posts&quot; within my Bucket so that he or she can draft blog posts for my review.&nbsp;</p><p name=\"1b0c\"><a data-href=\"https://www.cosmicjs.com/\" href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a> is an API-first cloud-based content management platform that makes it easy to manage applications and content. <span data-creator-ids=\"5707ff88c30\" name=\"77845f0499ec\">If you have questions about the Cosmic API, please reach out to the founders on <a data-href=\"https://twitter.com/cosmic_js\" href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a> or <a data-href=\"https://www.cosmicjs.com/community\" href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Slack</a>.</span>&nbsp;</p><p name=\"1b0c\"><a href=\"https://twitter.com/carsoncgibbons\" rel=\"noopener noreferrer\" target=\"_blank\">Carson Gibbons</a> is the Co-Founder &amp; CMO of <a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a>, an API-first Cloud-based <a href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Content Management Platform</a> that decouples content from code, allowing devs to build slick apps and websites in any programming language they want.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>This blog details all four role types within the Cosmic Dashboard: Admin | Developer | Editor | Contributor.&nbsp;</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"14f5b200-d823-11e6-b078-535e435f4ad7-shutterstock_503352379.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/14f5b200-d823-11e6-b078-535e435f4ad7-shutterstock_503352379.jpg","imgix_url":"https://imgix.cosmicjs.com/14f5b200-d823-11e6-b078-535e435f4ad7-shutterstock_503352379.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-01-11T17:26:38.805Z","created_by":"5716b504e9c686d006000073","created":"2017-01-11T17:26:38.808Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>This blog details all four role types within the Cosmic Dashboard: Admin | Developer | Editor | Contributor.&nbsp;</p>","featured_image":{"url":"https://cdn.cosmicjs.com/14f5b200-d823-11e6-b078-535e435f4ad7-shutterstock_503352379.jpg","imgix_url":"https://imgix.cosmicjs.com/14f5b200-d823-11e6-b078-535e435f4ad7-shutterstock_503352379.jpg"}}},{"_id":"5872bb6e587f351040000351","order":154,"slug":"contributor-role-now-available","title":"Contributor Role Now Available","content":"<p><img class=\"fr-dib fr-draggable\" src=\"https://www.cosmicjs.com/uploads/e3ea31b0-d73a-11e6-b1e2-9d75e802ed6b-collaborators.jpg\" style=\"width: 100%;\"></p><p>Today we are announcing a new role, Contributor, which gives you the power to collaborate on content in an entirely new way.</p><p>An admin can invite contributors to do the following:</p><ol><li>Add content to a specific Object Type.</li><li>Add and edit their own content within a&nbsp;specific Object Type.</li><li>Save own content as Draft.</li></ol><p>This allows admins the ability to create publications with featured authors and control what content gets published. &nbsp;We&rsquo;re really excited to announce this new feature and hope you enjoy the added collaboration power it offers.</p><h3>Try it Out</h3><p>1. <a href=\"https://www.cosmicjs.com/login\">Login to your Cosmic account</a><br>2. Select Your Bucket and go to Your Bucket &gt; Users<br>3. Add a user with the Contributor role (You must have at least one Object Type added to your Bucket)</p><p style=\"text-align: center;\"><img class=\"fr-dib fr-draggable\" src=\"https://www.cosmicjs.com/uploads/adb90530-d5f0-11e6-a387-116b3bc64660-Screen Shot 2017-01-08 at 4.11.52 PM.png\" style=\"width: 600px;\"></p><p><br></p><p>What the new contributor sees:</p><p><img class=\"fr-dib fr-draggable\" src=\"https://www.cosmicjs.com/uploads/0e5f71b0-d607-11e6-a571-1b2cfa88b795-contributor-view.png\" style=\"width: 100%;\"></p><p>If you have any questions, please reach out to us on<span>&nbsp;</span><a data-href=\"https://www.cosmicjs.com/community\" href=\"https://www.cosmicjs.com/community\" target=\"_blank\">our Slack Channel</a><span>&nbsp;</span>or <a data-href=\"https://twitter.com/cosmic_js\" href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">on Twitter</a><span>.</span></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>Today we are announcing a new role, Contributor, which gives you the power to collaborate on content in an entirely new way.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"eb629400-d73a-11e6-b1e2-9d75e802ed6b-collaborators.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/eb629400-d73a-11e6-b1e2-9d75e802ed6b-collaborators.jpg","imgix_url":"https://imgix.cosmicjs.com/eb629400-d73a-11e6-b1e2-9d75e802ed6b-collaborators.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-01-10T22:21:34.011Z","created_by":"5357ef811693be2118000001","created":"2017-01-10T22:21:34.011Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>Today we are announcing a new role, Contributor, which gives you the power to collaborate on content in an entirely new way.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/eb629400-d73a-11e6-b1e2-9d75e802ed6b-collaborators.jpg","imgix_url":"https://imgix.cosmicjs.com/eb629400-d73a-11e6-b1e2-9d75e802ed6b-collaborators.jpg"}}},{"_id":"5870a10cde496d581e0e9bf6","order":155,"slug":"three-reasons-why-agencies-should-be-using-a-cms-api","title":"Three Reasons Why Agencies Should be Using a CMS API","content":"<h3 name=\"2e47\"><img class=\"fr-dib fr-draggable\" src=\"https://cosmicjs.imgix.net/a8c94f80-d672-11e6-aaa6-adf5ed44fea0-api-cms-agencies.jpeg\" style=\"width: 100%;\"></h3><h3 name=\"2e47\">Age Old Issue: Speed | Quality | Cost</h3><p name=\"cefe\">The golden triangle of project success or failure rests on the three angles of A) Speed B) Quality C) Cost. When it comes to interactive agencies, they may be promising (at best) two of the three triangle points, but how likely are they to fulfill that promise? Speed + Cost naturally rules out Quality, right? And Quality naturally rules out cost if speed is at all involved. In my former life of scoping projects for an interactive agency, clients who had hard deadlines for app launches would be charged more. Clients whose websites served as their brick and mortar needed extremely high-quality work, which affected speed and cost. This is true in at least the old working model of installed content management systems, but the Golden Triangle doesn&rsquo;t take into account agencies that are managing websites and applications using a <a data-href=\"https://www.cosmicjs.com/\" href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">CMS API</a>.</p><p name=\"3548\">We wrote a blog awhile back titled<span>&nbsp;</span><a data-href=\"https://www.cosmicjs.com/blog/the-cosmic-stack\" href=\"https://www.cosmicjs.com/blog/the-cosmic-stack\" rel=\"noopener noreferrer\" target=\"_blank\">The Cosmic Stack</a>. The article details how developers bypass the installed Content Management System + Web Hosting process for the apps and websites they are building. When you use <a data-href=\"https://www.cosmicjs.com/\" href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a><span>&nbsp;</span>as your CMS API, your application stack is simplified down to the <a data-href=\"https://www.cosmicjs.com/\" href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic CMS API</a><span>&nbsp;</span>and a code repository.</p><figure name=\"8cd0\"><img data-src=\"https://cdn-images-1.medium.com/max/1600/0*wr81QlzrxTio4ud_.jpg\" src=\"https://cdn-images-1.medium.com/max/1600/0*wr81QlzrxTio4ud_.jpg\" class=\"fr-dii fr-draggable\"></figure><h3 name=\"5d58\">Speed</h3><p name=\"1056\">By removing the client-side server from the application stack, speed is &lsquo;sped up&rsquo; immensely simply from the dynamics of your new content management stack. Depending on how you decide to build your new application, speed has been seen to almost double in certain cases (according to <a data-href=\"https://developers.google.com/speed/pagespeed/insights/\" href=\"https://developers.google.com/speed/pagespeed/insights/\" rel=\"noopener noreferrer\" target=\"_blank\">PageSpeed Insights</a><span>&nbsp;</span>from\r\nGoogle Dev). Recently we measured a legacy WordPress website on its installed content management system. It ranked at a 50 on a scale of 100 when summoned from its content box and myriad of servers. That same website built on Cosmic ended up being\r\nranked at a 94.</p><h3 name=\"ec27\">Quality</h3><p name=\"9668\">Quality isn&rsquo;t compromised! Because Cosmic works by decoupling content from code, you don&rsquo;t sacrifice on either side. A CMS API simply saves time and bandwidth by delivering content seamlessly through the powerful Cosmic CMS API, which\r\ndelivers JSON particles to any web-connected device, regardless of your application&rsquo;s programming language. Your pages are rendered with the original code and the updated content, but never compromises the quality of the interactive application\r\nyou have built.</p><h3 name=\"5aeb\">Cost</h3><p name=\"6f81\">Agencies typically bill out on either a project basis (total # of estimated hours X billable rate) or retainer basis (total # of agreed monthly hours X discounted billable rate). Because developers no longer have to build out a backend Content Management System on top of an antiquated installed legacy system, many devs report a time savings of up to 75% of their original project timeline estimates. That saves the client money, which saves the agency money. As far as the cost of using a CMS API, billing is largely a la carte. Cosmic costs on a usage basis, as well as a la carte add-on items that devs can use if needed. For a full view of Cosmic pricing, visit our <a data-href=\"https://www.cosmicjs.com/pricing\" href=\"https://www.cosmicjs.com/pricing\" rel=\"noopener noreferrer\" target=\"_blank\">Pricing Page</a>.</p><h3 name=\"c414\">Helpful Resources</h3><p name=\"9311\"><a data-href=\"https://www.cosmicjs.com/\" href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer\" target=\"_blank\">Cosmic</a><span>&nbsp;</span>is an API-first cloud-based content management platform that makes it easy to manage applications and content. If you have questions about the Cosmic API, please reach out to the founders on <a data-href=\"https://twitter.com/cosmic_js\" href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a><span>&nbsp;</span>or <a data-href=\"https://www.cosmicjs.com/community\" href=\"https://www.cosmicjs.com/community\" rel=\"noopener noreferrer\" target=\"_blank\">Slack</a>.</p><p name=\"3e8a\">To read more about how developers are using the Cosmic CMS API to build slicks apps and websites, read our Developer Spotlight Series with 1)<span>&nbsp;</span><a data-href=\"https://www.cosmicjs.com/blog/developer-spotlight-jon-bloomer\" href=\"https://www.cosmicjs.com/blog/developer-spotlight-jon-bloomer\" rel=\"noopener noreferrer\" target=\"_blank\">Jon Bloomer</a> 2)<span>&nbsp;</span><a data-href=\"https://www.cosmicjs.com/blog/developer-spotlight-simple-media\" href=\"https://www.cosmicjs.com/blog/developer-spotlight-simple-media\" rel=\"noopener noreferrer\" target=\"_blank\">Simple Media</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>The golden triangle of project success or failure rests on the three angles of A) Speed B) Quality C) Cost. When it comes to interactive agencies, they may be promising (at best) two of the three triangle points, but how likely are they to fulfill that promise?</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"e8d1fce0-d4af-11e6-8565-b915a510b0dd-api-cms-agencies.jpeg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e8d1fce0-d4af-11e6-8565-b915a510b0dd-api-cms-agencies.jpeg","imgix_url":"https://imgix.cosmicjs.com/e8d1fce0-d4af-11e6-8565-b915a510b0dd-api-cms-agencies.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-01-07T08:04:28.704Z","created_by":"5357ef811693be2118000001","created":"2017-01-07T08:04:28.704Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>The golden triangle of project success or failure rests on the three angles of A) Speed B) Quality C) Cost. When it comes to interactive agencies, they may be promising (at best) two of the three triangle points, but how likely are they to fulfill that promise?</p>","featured_image":{"url":"https://cdn.cosmicjs.com/e8d1fce0-d4af-11e6-8565-b915a510b0dd-api-cms-agencies.jpeg","imgix_url":"https://imgix.cosmicjs.com/e8d1fce0-d4af-11e6-8565-b915a510b0dd-api-cms-agencies.jpeg"}}},{"_id":"5870a095de496d581e0e9be9","order":156,"slug":"developer-spotlight-coding-dojo","title":"Developer Spotlight: Coding Dojo","content":"<p name=\"78cd\"><img class=\"fr-dib fr-draggable\" src=\"https://cosmicjs.imgix.net/60773620-d672-11e6-ac82-ab09b95743ae-coding-dojo.jpg\" style=\"width: 100%;\"></p><p name=\"78cd\">We&rsquo;ve recently been publishing articles in our Cosmic <a data-href=\"https://www.cosmicjs.com/blog/developer-spotlight-joe-tuson\" href=\"https://www.cosmicjs.com/blog/developer-spotlight-joe-tuson\" rel=\"noopener noreferrer nofollow\" target=\"_blank\">Developer Spotlight Series</a>, the series that documents how developers are using the<span>&nbsp;</span><a data-href=\"https://www.cosmicjs.com/\" href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer nofollow\" target=\"_blank\">Cosmic CMS API</a> all around the world.<span>&nbsp;</span><a data-href=\"https://www.cosmicjs.com/\" href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer nofollow\" target=\"_blank\">Cosmic</a> has one main goal through the use of its JSON API: to make the developer Hero. In that effort, Cosmic is announcing its partnership with the Dallas branch of the developer bootcamp<span>&nbsp;</span><a data-href=\"http://www.codingdojo.com/\" href=\"http://www.codingdojo.com/\" rel=\"noopener noreferrer nofollow\" target=\"_blank\">Coding Dojo</a>, a 14-week program that educates a class of Dallas-based developers in three development stacks.</p><p name=\"78cd\"><br></p><figure name=\"5bed\"><img data-src=\"https://cdn-images-1.medium.com/max/1600/0*bpBkLJQNTiHP4Jnk.png\" src=\"https://cdn-images-1.medium.com/max/1600/0*bpBkLJQNTiHP4Jnk.png\" class=\"fr-dii fr-draggable\"></figure><figure name=\"5bed\"><br></figure><figure name=\"5bed\">Coding Dojo provides curriculum, software, hardware, instructors, class sessions, conference rooms, thought-leadership and networking events as part of its added-value to its students and community. They also partner with organizations that would hire\r\nits students upon graduation. Coding Dojo boasts a 94% placement of its trained developers within 6 months of graduation, and feeds talent into programs like Amazon, Chase, Disney, Microsoft, Google and Expedia through its alumni partnerships.</figure><p><br></p><figure data-scroll=\"native\" name=\"8e9d\"><img data-src=\"https://cdn-images-1.medium.com/max/2000/0*qpoC0u1kdTqJkhDr.png\" src=\"https://cdn-images-1.medium.com/max/2000/0*qpoC0u1kdTqJkhDr.png\" class=\"fr-dii fr-draggable\"></figure><p><br></p><p name=\"b66c\">Coding Dojo and Cosmic are partnering initially to present Cosmic co-founder &amp; CEO <a data-href=\"https://twitter.com/tonyspiro\" href=\"https://twitter.com/tonyspiro\" rel=\"noopener noreferrer nofollow\" target=\"_blank\">Tony Spiro</a><span>&nbsp;</span>as a thought leader host at an upcoming <a data-href=\"https://www.meetup.com/codingdojo-dallas/events/236267338/?fromJoin=236267338\" href=\"https://www.meetup.com/codingdojo-dallas/events/236267338/?fromJoin=236267338\" rel=\"noopener noreferrer nofollow\" target=\"_blank\">Javascript in the Wild Meetup</a>.\r\nCoding Dojo participants will get to network with Cosmic as well as other local thought leaders, and will then be invited to use a promo code to unlock Cosmic Credits as they start developing test buckets. Students will be encouraged to utilize\r\nthe<span>&nbsp;</span><a data-href=\"https://www.cosmicjs.com/\" href=\"https://www.cosmicjs.com/\" rel=\"noopener noreferrer nofollow\" target=\"_blank\">Cosmic CMS API&nbsp;</a>to satisfy coursework, as well as for personal use and exploration as individual and\r\ngroup projects take shape throughout the 14-week program. A month after the initial networking session, the Cosmic team will return to Coding Dojo to follow up on all students that have taken advantage of the promo code to further explore the Cosmic\r\nJS CMS API, provide an in-depth demo and facilitate a Q/A session. The event, promo code and subsequent demo is delivered to Coding Dojo students in the MEAN Stack section of their course.</p><p name=\"b94d\">We will continue to document this partnership in our<span>&nbsp;</span><a data-href=\"https://www.cosmicjs.com/blog\" href=\"https://www.cosmicjs.com/blog\" rel=\"noopener noreferrer nofollow\" target=\"_blank\">Developer Spotlight Series</a>, and are looking forward\r\nto providing real-world use-case scenarios faced by junior developers today.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>Coding Dojo provides curriculum, software, hardware, instructors, class sessions, conference rooms, thought-leadership and networking events as part of its added-value to its students and community. They also partner with organizations that would hire its students upon graduation.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"9dc6b6f0-d4af-11e6-8565-b915a510b0dd-coding-dojo.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/9dc6b6f0-d4af-11e6-8565-b915a510b0dd-coding-dojo.png","imgix_url":"https://imgix.cosmicjs.com/9dc6b6f0-d4af-11e6-8565-b915a510b0dd-coding-dojo.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-01-05T08:02:29.593Z","created_by":"5357ef811693be2118000001","created":"2017-01-05T08:02:29.593Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>Coding Dojo provides curriculum, software, hardware, instructors, class sessions, conference rooms, thought-leadership and networking events as part of its added-value to its students and community. They also partner with organizations that would hire its students upon graduation.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/9dc6b6f0-d4af-11e6-8565-b915a510b0dd-coding-dojo.png","imgix_url":"https://imgix.cosmicjs.com/9dc6b6f0-d4af-11e6-8565-b915a510b0dd-coding-dojo.png"}}},{"_id":"5870a04dde496d581e0e9bdb","order":157,"slug":"developer-spotlight-joe-tuson","title":"Developer Spotlight: Joe Tuson","content":"<p name=\"07ed\"><img class=\"fr-dib fr-draggable\" src=\"https://cosmicjs.imgix.net/e7b97b80-d671-11e6-ac82-ab09b95743ae-joe-tuson.jpg\" style=\"width: 100%;\"></p><p name=\"07ed\">Developers are the star of the show when it comes to building great apps using <a data-href=\"https://www.cosmicjs.com\" href=\"https://www.cosmicjs.com/\" rel=\"nofollow\" target=\"_blank\">Cosmic</a>. Like every great musician, each developer is different in their approach and style. In our Developer Spotlight Series we shine a light on the creative process of a developer using\r\nCosmic to create content-powered apps. This spotlight features<span>&nbsp;</span><a data-href=\"http://www.tuson.co/#/\" href=\"http://www.tuson.co/#/\" rel=\"nofollow\" target=\"_blank\">Joe Tuson</a>, a front-end web developer out of the UK.</p><p name=\"a976\"><strong>Cosmic: How long have you been building software?</strong><br><strong>Joe:</strong> Around 5 and a half years. I took a leap of faith and transitioned into web-dev/software from Architecture/Design Engineering in 2011. I learned to code on the job pulling my weight as a graphic designer until I could take on client projects with a LAMP stack.</p><p name=\"101d\"><strong>What is your preferred development stack?</strong><br>Nooo! Don&rsquo;t make me pick one&hellip;!&nbsp;:P I love different stacks for different reasons, and I just get a deep visceral satisfaction when matching projects with the most appropriate stack. Fundamentally, I do tend to gravitate towards Ruby on\r\nRails for the heavier, more complex projects, and Node.js for the punchier, lightweight ones. However, common threads will always be:</p><ul><li name=\"a69e\">Trello (Project &amp; task management)</li><li name=\"82f2\">Sublime Text (IDE)</li><li name=\"2c1a\">SASS</li><li name=\"8d35\">ES6</li><li name=\"5a2a\">Git</li></ul><p name=\"dfae\">If I were ninja enough I would probably add React/Redux to this list, as I love how it works and what it can do, but as yet I have not cut my teeth using them on any real projects to include it among my core skills.</p><p name=\"8f65\"><strong>Tony&rsquo;s noticed that a lot of software developers are musicians (like him). You are musician as well, correct? What do you think the correlation is between music and software?</strong><br>How do you know?? Have you been following me? It&rsquo;s an interesting one, because having asked other musician/devs I get a different answer every time. Both pursuits are fundamentally creative, therefore I think for me it&rsquo;s having the power to\r\ncreate something from nothing, and<span>&nbsp;</span><em>always</em> having something to work towards. If there is one thing I&rsquo;m sure about, with development I will never be satisfied, and will always be inspired to learn something new. The feeling of overcoming a problem or mastering a riff &mdash; that moment of realisation when it clicks is addictive as heck.</p><p name=\"3bf1\"><strong>Can you talk a little about why you chose Cosmic as your CMS and how it fits into your development process?</strong><br>Cosmic really is a breath of fresh air &mdash; both for me and my clients. One thing I hate most is opinionated tools; ones that refuse to let you work how you want. Developers themselves are inherently opinionated creatures anyway, so I don&rsquo;t want\r\nto have to butt-heads with a CMS that promises the world&hellip; but only if you know *this* funky language, and conform to *that* framework, and oh, your app is failing because the CMS can&rsquo;t find some illegible config file in some deep dark directory &mdash; &mdash;\r\noh but guess what &mdash; not the one you&rsquo;re thinking, that would be way too easy. By the way, you just broke something else because you updated your DB software&hellip; *sigh. Ok &mdash; but surely it will be worth it in the end because although\r\nthe learning curve is steep, there will be performance gains..?? Erm&hellip; not always.</p><p name=\"1f7c\">I found Cosmic removes those, and many other headaches by *just working*, right out the box. Plus, it is blazingly fast. The sheer relief I felt when I realised I could just get on with coding my clients&rsquo; app the way I wanted to, without making\r\ncompromises, with a bespoke stack tailored to the use case &mdash; &mdash; pure catharsis. I was like a kid in a sweet shop (or a guitarist in a guitar shop&nbsp;;) )</p><p name=\"13e0\">How could it not fit into my development process? &mdash; it&rsquo;s a simple API-driven content delivery service that is as powerful and flexible as you need it to be. Sure &mdash; when you begin a project you&rsquo;re probably not going to end up using\r\nit exactly the way you initially intended, but what project *ever* doesn&rsquo;t evolve and grow to fit the clients&rsquo; changing needs? I found that every time the goal posts changed, Cosmic was able to respond gracefully in a way that didn&rsquo;t\r\ncompromise best-practice, while still having satisfied my client.</p><p name=\"a1df\"><strong>Can you talk a little about how you think Cosmic helps your team and your clients?</strong><br>As a freelancer, my team is just me. However, using Cosmic helps me by providing the muscle power of a full-stack team covering all bases; databasing, hosting, content/asset delivery, as well as the CMS. This allows me to focus on front-end, spending\r\nmore time polishing my speciality and less time scratching my head while chewing up budget with config, backend, and working out how the heck I&rsquo;m going to reliably deliver complex asset resources for todays multi-platform web.</p><p name=\"6eb7\">From a client&rsquo;s point of view it has a very intuitive UI with all the familiarity of most common CMS tools, but without the huge learning curve or set up cost. When there was confusion, I found I never had to explain anything twice. Plus &mdash; Tony\r\nand the Cosmic team provide absolutely *sterling* technical help. Furthermore, it&rsquo;s incredibly priced, so it&rsquo;s a no-brainer and an easy sell when pitching to the client.</p><p name=\"4f9b\"><strong>What are some technologies you are excited about that you are using today, or want to learn more about?</strong><br>Gosh &mdash; I suppose I ought to say WebGL, virtual reality, machine learning, and some sort of big data web-universe. But to be honest I&rsquo;m not, as clever as they are. I still get most excited about clever tools that solve simple problems well.\r\nI believe React.js and its peripheral technologies have some serious legs and I&rsquo;m looking forward to mastering them. I&rsquo;ve also heard whispers about terms like &ldquo;Universal Apps&rdquo; where a single code base, probably HTML5, serves all\r\nplatforms and can take advantage of native services &amp; hardware acceleration; build something once and watch it flourish on any &amp; every device. Unfortunately I don&rsquo;t see this gaining real traction for a while yet. I also get excited about\r\nthe Internet of Things and would love to spend some real time getting to grips with the crossover between mechatronics, UI and real-time. More simply &mdash; I am excited to see what the advent of HTTP/2 brings, and how that will further catalyse the\r\nsingle-page app movement.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>In our Developer Spotlight Series we shine a light on the creative process of a developer using Cosmic to create content-powered apps. This spotlight features Joe Tuson, a front-end web developer out of the UK.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"75ceef00-d4af-11e6-8565-b915a510b0dd-joe-tuson.jpeg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/75ceef00-d4af-11e6-8565-b915a510b0dd-joe-tuson.jpeg","imgix_url":"https://imgix.cosmicjs.com/75ceef00-d4af-11e6-8565-b915a510b0dd-joe-tuson.jpeg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2017-01-04T08:01:17.424Z","created_by":"5357ef811693be2118000001","created":"2017-01-04T08:01:17.424Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In our Developer Spotlight Series we shine a light on the creative process of a developer using Cosmic to create content-powered apps. This spotlight features Joe Tuson, a front-end web developer out of the UK.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/75ceef00-d4af-11e6-8565-b915a510b0dd-joe-tuson.jpeg","imgix_url":"https://imgix.cosmicjs.com/75ceef00-d4af-11e6-8565-b915a510b0dd-joe-tuson.jpeg"}}},{"_id":"5857fe1eb431084c0a0000aa","order":158,"slug":"introducing-metadata","title":"Introducing Metadata","content":"<p><img class=\"fr-dib fr-draggable\" src=\"https://www.cosmicjs.com/uploads/88f2bdb0-c603-11e6-90d5-47a447a38682-meta-laptop.jpg\" style=\"width: 100%;\"></p><p>Extendible Objects is one of the most powerful features of Cosmic. &nbsp;And this powerful feature just became more intuitive with a new property added to all endpoint responses: Metadata.</p><p>The new Metadata property provides you with the quickest way to get the value from your Metafields. &nbsp;It gives you the key / value pair for the extended data on your Object. &nbsp;For example, before you had to go into Metafields to get values, and this required you to sort through the array of Metafields. Now you would simply go into Metadata to get the value.</p><h3>Metafields = Form Building, Metadata = Value Fetching</h3><p>Metafields is the way the form is rendered in the Cosmic Dashboard and includes <code>title</code>, <code>key</code> and <code>type</code>. &nbsp;Metadata extracts only the value of the data that you need. &nbsp;Metafields are still available on every endpoint, but now you can hide them by adding <code>hide_metafields=true</code> to the end of your endpoint URL. &nbsp;This will be the default behavior for future major API releases.</p><p><img class=\"fr-dib fr-draggable\" src=\"https://cosmicjs.imgix.net/51c9e1e0-c605-11e6-90d5-47a447a38682-meta-display.jpg?w=2000\" style=\"width: 100%;\"></p><p style=\"text-align: center;\"><img class=\"fr-dib fr-draggable\" src=\"https://cosmicjs.imgix.net/ac70ab60-c605-11e6-90d5-47a447a38682-metadata.jpg?w=1200\" style=\"width: 600px;\"></p><h3>Benefits</h3><p>With Metadata available on all Cosmic API endpoints, building and extending your content is faster and easier than ever before. Plus each endpoint has a much smaller data payload with Metafields hidden. If you have any questions, please reach out to us on <a data-href=\"https://www.cosmicjs.com/community\" href=\"https://www.cosmicjs.com/community\" target=\"_blank\">our Slack Channel</a> or <a data-href=\"https://twitter.com/cosmic_js\" href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">on Twitter</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>Extendible Objects is one of the most powerful features of Cosmic. &nbsp;And this powerful feature just became more intuitive with a new property added to all endpoint responses: Metadata.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"80680100-c603-11e6-90d5-47a447a38682-meta-laptop.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/80680100-c603-11e6-90d5-47a447a38682-meta-laptop.jpg","imgix_url":"https://imgix.cosmicjs.com/80680100-c603-11e6-90d5-47a447a38682-meta-laptop.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-12-19T15:34:54.308Z","created_by":"5357ef811693be2118000001","created":"2016-12-19T15:34:54.308Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>Extendible Objects is one of the most powerful features of Cosmic. &nbsp;And this powerful feature just became more intuitive with a new property added to all endpoint responses: Metadata.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/80680100-c603-11e6-90d5-47a447a38682-meta-laptop.jpg","imgix_url":"https://imgix.cosmicjs.com/80680100-c603-11e6-90d5-47a447a38682-meta-laptop.jpg"}}},{"_id":"584f68e1161a4a6a2500001b","order":159,"slug":"introducing-the-new-content-editor","title":"Introducing the New Content Editor","content":"<p><img class=\"fr-dib fr-draggable\" src=\"https://www.cosmicjs.com/uploads/7a02a770-c144-11e6-bbef-4d03d1f79d49-new-content-editor.jpg\" style=\"width: 100%;\"></p><p>We are excited to introduce the all-new Cosmic content editor. &nbsp;We think you&#39;ll agree it&#39;s a huge improvement over our old editor and makes adding API-powered content to your websites and apps easier and more enjoyable. &nbsp;Some of the new functionality includes:</p><h3>1. Sticky Toolbar</h3><p><img class=\"fr-dib fr-draggable\" src=\"https://www.cosmicjs.com/uploads/c6863620-c0ef-11e6-9320-41baf6aa0eca-pEs8iNY3nZ.gif\" style=\"width: 100%;\"></p><p>The new Cosmic editor comes with a sticky toolbar that travels with you as you build your content. &nbsp;No longer do you have to scroll back up to the top of the page to add enhancements like rich text, links, images, video and more.</p><h3>2. Better Code Editing</h3><p><img class=\"fr-dib fr-draggable\" src=\"https://www.cosmicjs.com/uploads/e72076c0-c0ef-11e6-9320-41baf6aa0eca-fzS2Mwf4Ha.gif\" style=\"width: 100%;\"></p><p>Most WYSIWYG (What You See is What You Get) editors leave much to be desired with their HTML editor. &nbsp;But our new editor makes adding HTML more developer-friendly. &nbsp;Code mode features including multi-cursor select and easy-to-read\r\nhighlighting make editing code a breeze.</p><h3>3. Emojis <span class=\"fr-emoticon fr-deletable\">😀</span> !</h3><p><img class=\"fr-dib fr-draggable\" src=\"https://www.cosmicjs.com/uploads/e73b9fe0-c0ef-11e6-9320-41baf6aa0eca-k3Kh9AWhB2.gif\" style=\"width: 100%;\"></p><p>The new Cosmic content editor comes with emoji support for when you just can&#39;t express yourself through words alone.<br><br>These are just the highlights of the new Cosmic content editor. &nbsp;It&#39;s overall a much better editor making for a delightful content editing experience. &nbsp;<a href=\"https://www.cosmicjs.com/signup\">Sign up</a> or <a href=\"https://www.cosmicjs.com/login\">log in</a> to your Cosmic account to experience all of the features of the new editor. &nbsp;And if you have any questions, feel free to reach out to us in <a href=\"https://www.cosmicjs.com/community\">our Slack community</a> or on <a href=\"https://twitter.com/cosmic_js\" rel=\"noopener noreferrer\" target=\"_blank\">Twitter</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>We are excited to introduce the all-new Cosmic content editor which is a huge improvement over our old editor. &nbsp;We think you&#39;ll agree it makes adding API-powered content to your websites and apps easier and more enjoyable. &nbsp;Here&rsquo;s a list of some of the new functionality...</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"7a02a770-c144-11e6-bbef-4d03d1f79d49-new-content-editor.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/7a02a770-c144-11e6-bbef-4d03d1f79d49-new-content-editor.jpg","imgix_url":"https://imgix.cosmicjs.com/7a02a770-c144-11e6-bbef-4d03d1f79d49-new-content-editor.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-12-13T03:20:01.495Z","created_by":"5357ef811693be2118000001","created":"2016-12-13T03:20:01.495Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We are excited to introduce the all-new Cosmic content editor which is a huge improvement over our old editor. &nbsp;We think you&#39;ll agree it makes adding API-powered content to your websites and apps easier and more enjoyable. &nbsp;Here&rsquo;s a list of some of the new functionality...</p>","featured_image":{"url":"https://cdn.cosmicjs.com/7a02a770-c144-11e6-bbef-4d03d1f79d49-new-content-editor.jpg","imgix_url":"https://imgix.cosmicjs.com/7a02a770-c144-11e6-bbef-4d03d1f79d49-new-content-editor.jpg"}}},{"_id":"5849af9b499c64a05a000e9f","order":160,"slug":"developer-spotlight-simple-media","title":"Developer Spotlight: Simple Media ","content":"<p><img src=\"https://cosmicjs.imgix.net/f499fc00-bd7e-11e6-95d9-69995ea5288b-Screen Shot 2016-12-08 at 1.13.36 PM.png?w=1000\" style=\"width: 100%;\"><br></p><p>An API without a developer ecosystem is just an acronym. The developers in the <a href=\"https://www.cosmicjs.com/community\">Cosmic Community</a> bring life to the platform, powering content through the <a href=\"https://www.cosmicjs.com\" target=\"_blank\">Cosmic API</a> to build and manage websites and applications. In keeping with the mantra, Cosmic introduces its second installment of its Developer Spotlight Blog series, sitting down with Nick Bonanno, Founder & CEO of <a href=\"http://www.simplemedia.co\" target=\"_blank\">Simple Media</a>, a boutique digital micro-services agency focused on bringing the future of application development to businesses that wouldn't otherwise have access to these resources through typical agency relationships.<br><br><b>Cosmic: When did Simple Media start?<br></b>Nick: Founded in 2007.<br><br><b>Are you still doing what you started doing? What does the agency currently offer / do?<br></b>Amy (my business partner and wife) and I were freelancing web design (WordPress), Search Engine Optimization and Pay Per Click when we first started Simple Media in 2007.  We currently offer brand strategy, creative, UI/UX design, results-oriented marketing and advertising.<br><br><b>Can you talk a little about your creative and development process as it relates to your digital projects?<br></b>What sets us apart is the simplicity in our approach, which results in nimble, cost-effective and on-time project execution.  We always lead with strategy, and follow with execution.  Clients find it very easy to work with us, as we walk them through each phase of the project, and help them connect the dots in their digital strategy.<br><br><b>How did Cosmic (as your API CMS) fit into that development process?<br></b>Cosmic doesn’t just fit into our dev process, but our overall philosophy.  It’s simple to deploy, it’s completely customizable, it allows our clients to have a custom CMS for a small monthly hosting fee, plus it’s secure and blazing fast.<br><br><b>Does Cosmic help your team and your clients? Does it help one of those parties more than the other?<br></b>I would say it’s equally beneficial.  It allows us as the agency to have a seamless process between the design phase and the back end development phase, and it allows our clients to choose what portions of their website they want to make dynamic vs. static, based on their content update requirements.</p><p><br><b>What do you like about managing content in the Cosmic dashboard? Part II: Vs. other legacy installed systems?<br></b>Cosmic provides the essentials for clients to easily manage their content, without the clutter that’s typically found in most installed Content Management Systems.  The User Interface is very clean and easily navigable.<br><br><b>There’s been a lot of push back on installed content management systems recently in favor of API-based approaches to building digital products.  How do you think the way agencies are developing software is changing and how does it affect you as an agency owner?<br></b>We have experienced this firsthand.  The biggest challenge with deploying web applications is the time of execution, which translates into higher development costs.  Having a solution like Cosmic allows us – the agency -  to be much more versatile and nimble.</p><p style=\"text-align: center; \"><iframe frameborder=\"0\" src=\"//www.youtube.com/embed/C4kSwh1N1t0\" width=\"640\" height=\"360\" class=\"note-video-clip\"></iframe><br></p><p>Check Simple Media out through its <a href=\"http://www.simplemedia.co\" target=\"_blank\">website</a> to see how Nick and his team are building micro-service digital applications at scale through the Cosmic API.  <a href=\"https://www.cosmicjs.com\" target=\"_blank\">Cosmic</a> is an API-first cloud-based content management platform that makes it easy to manage applications and content. If you have questions about the Cosmic API, please reach out to the founders on <a href=\"https://twitter.com/cosmic_js\" target=\"_blank\">Twitter</a> or <a href=\"https://www.cosmicjs.com/community\" target=\"_blank\">Slack</a>.<br></p><p><a href=\"https://twitter.com/carsoncgibbons\" target=\"_blank\">Carson Gibbons</a> is the Co-Founder & CMO of Cosmic, an API-first Cloud-based Content Management Platform that decouples content from code, allowing devs to build slick apps and websites in any programming language they want.<br></p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p><span style=\"-webkit-text-stroke-color: rgb(0, 0, 0);\">Nick Bonanno, Founder &amp; CEO of&nbsp;</span><a href=\"http://www.simplemedia.co/\" style=\"-webkit-text-stroke-color: rgb(0, 0, 0);\"><span style=\"-webkit-text-stroke-color: rgb(0, 175, 215);\">Simple Media</span></a><span style=\"-webkit-text-stroke-color: rgb(0, 0, 0);\">, a boutique digital micro-services agency, sits down with Carson from Cosmic.&nbsp;</span><br></p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"7e939600-bd7a-11e6-95d9-69995ea5288b-Screen Shot 2016-12-08 at 1.13.36 PM.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/7e939600-bd7a-11e6-95d9-69995ea5288b-Screen Shot 2016-12-08 at 1.13.36 PM.png","imgix_url":"https://imgix.cosmicjs.com/7e939600-bd7a-11e6-95d9-69995ea5288b-Screen Shot 2016-12-08 at 1.13.36 PM.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-12-08T19:08:11.803Z","created_by":"5357ef811693be2118000001","created":"2016-12-08T19:08:11.803Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p><span style=\"-webkit-text-stroke-color: rgb(0, 0, 0);\">Nick Bonanno, Founder &amp; CEO of&nbsp;</span><a href=\"http://www.simplemedia.co/\" style=\"-webkit-text-stroke-color: rgb(0, 0, 0);\"><span style=\"-webkit-text-stroke-color: rgb(0, 175, 215);\">Simple Media</span></a><span style=\"-webkit-text-stroke-color: rgb(0, 0, 0);\">, a boutique digital micro-services agency, sits down with Carson from Cosmic.&nbsp;</span><br></p>","featured_image":{"url":"https://cdn.cosmicjs.com/7e939600-bd7a-11e6-95d9-69995ea5288b-Screen Shot 2016-12-08 at 1.13.36 PM.png","imgix_url":"https://imgix.cosmicjs.com/7e939600-bd7a-11e6-95d9-69995ea5288b-Screen Shot 2016-12-08 at 1.13.36 PM.png"}}},{"_id":"58462942b3d3a42929000da5","order":161,"slug":"how-to-build-a-nextjs-react-universal-app","title":"How to Build a Next.js React Universal App","content":"<p><img src=\"https://www.cosmicjs.com/uploads/c9bb94a0-bb6a-11e6-a321-e16ddb4fbbcc-cosmicjs-react-nextjs.jpeg\" data-filename=\"https://www.cosmicjs.com/uploads/c9bb94a0-bb6a-11e6-a321-e16ddb4fbbcc-cosmicjs-react-nextjs.jpeg\" style=\"width: 903px;\"><br></p><p><a href=\"https://github.com/zeit/next.js/\" target=\"_blank\">Next.js</a> is an amazing new addition to the React open-source ecosystem.  It is “a minimalistic framework for universal server-rendered React applications” that makes the process of building these types of applications much faster and easier.  Recently I demoed a new app on the <a href=\"https://www.cosmicjs.com/apps\">Cosmic Apps page</a> that is built using the Next.js framework.  I’ve built a few <a href=\"https://github.com/tonyspiro/react-universal-blog\" target=\"_blank\">React Universal apps</a> from scratch before and I found taking the Next.js route to speed things along quite a bit.  And adding content management capability from Cosmic to the Next.js structure was very intuitive.</p><p>In this tutorial I’m going to show you how I built the Next.js application and integrated content powered by Cosmic.  This full app is available on <a href=\"https://www.cosmicjs.com/apps/nextjs-website\" target=\"_blank\">the Cosmic Apps page</a> for you to download, hack, install and deploy live.</p><h3>Getting Started</h3><p>Let’s get started by creating our app and installing next:</p><pre>mkdir next.js-website<br>cd next.js-website<br>yarn add next</pre><h3>Creating Pages</h3><p>Now lets create a new folder to hold our pages.</p><pre>mkdir pages</pre><p>With Next.js, any page that we add to our pages folder will be available at its corresponding url.  So index.js will be available at / and about.js will be found at /about and so on.  Let’s first create our index.js file.  Add the following to index.js:</p><pre>import React from 'react'\r\nexport default class Home extends React.Component {\r\n  render () {\r\n    return &lt;div&gt;Hello World&lt;/div&gt;\r\n  }\r\n}</pre><p>Now let’s start our next server to see our page:</p><pre>next</pre><p>Navigate to http://localhost:3000 to see our Hello World example.  Next let’s add another page to show our about page content.  In a file titled about.js add:</p><pre>import React from 'react'\r\nexport default class Home extends React.Component {\r\n  render () {\r\n    return &lt;div&gt;About me&lt;/div&gt;\r\n  }\r\n}<br></pre><p>Then run next again.  Now go to <a href=\"http://localhost:3000/about\">http://localhost:3000/about</a> to see this page.</p><p>We could hard code the content for all of our pages, but for our purposes, let’s hook up the Cosmic API so we can let our team add and edit content using the Cosmic CMS API.  For each page we want to be able to pull that specific page from the Cosmic API and serve the content to our Next.js application.<br></p><h3>Adding Cosmic-Powered Content</h3><p>First install the Cosmic NPM module:</p><pre>yarn add cosmicjs</pre><p>Then create a new folder titled models and add the following to a file titled cosmic.js:</p><pre>const config = {<br>  bucket: {<br>    slug: 'nextjs-website' // add your bucket slug here<br>  }<br>}<br>import Cosmic from 'cosmicjs'<br>export default {<br>  getPage(slug) {<br>    const data = new Promise(resolve => {<br>      Cosmic.getObject(config, { slug }, (err, res) => {<br>        resolve(res)<br>      })<br>    })<br>    return data<br>  }<br>}</pre><p>So the purpose of this piece of code is to take whatever slug is supplied to the \"getPage\" function and render the Cosmic Object.<br></p><h3>Dynamic Pages</h3><p>Let’s create a basic page structure for all of our pages.  Create a folder titled \"templates\" and addd the following file titled basic-page.js:</p><pre>import React from 'react'\r\nexport default class BasicPage extends React.Component {\r\n  render() {\r\n    const page = this.props.page\r\n    return (\r\n      &lt;div&gt;\r\n        &lt;main&gt;\r\n          &lt;h1&gt;{page.title}&lt;/h1&gt;\r\n          &lt;div dangerouslySetInnerHTML={{__html: page.content}}/&gt;\r\n        &lt;/main&gt;\r\n      &lt;/div&gt;\r\n    )\r\n  }\r\n}\r\n\r\n</pre><p>Next let’s edit our index.js file to include the following:</p><pre>import React from 'react'\r\nimport BasicPage from '../templates/basic-page'\r\nimport Cosmic from '../models/cosmic'\r\nexport default class Home extends React.Component {\r\n  static async getInitialProps () {\r\n    return await Cosmic.getPage('home')\r\n  }\r\n  render () {\r\n    const page = this.props.object\r\n    return &lt;BasicPage page={page}/&gt;\r\n  }\r\n}<br></pre><p><basicpage page=\"{page}\"></basicpage></p><p><br></p><p>Now we have created a basic page template that will render the page title and content.  And in our index.js file, before rendering, the getInitialProps function will fetch the page content from the Cosmic API.  Now for our about page, all we need to do is change the slug.  about.js now looks like this:</p><pre>import React from 'react'<br>import BasicPage from '../templates/basic-page'<br>import Cosmic from '../models/cosmic'<br>export default class Home extends React.Component {<br>  static async getInitialProps () {<br>    return await Cosmic.getPage('about')<br>  }<br>  render () {<br>    const page = this.props.object<br>    return &lt;BasicPage page={page}/&gt;<br>  }<br>}</pre><p>Now run the application:</p><pre>next</pre><p>Navigate to / and /about and notice that the Cosmic content comes through not only when you view source (server side) but it also renders on the client as a React Universal Application.  </p><h3>In Conclusion</h3><p>So when creating a React universal application using the Next.js framework there was a lot of stuff I didn’t have to do:  I didn’t have to set up react-router.  I didn’t have to set up Flux or Redux to manage state.  I didn’t have to do any server-side node.js coding.  I didn't have to do a lot (or any!) webpack configuration for hot-reloading and bundle routing.  So yea, I saved a TON of time on boilerplate setup and config using the Next.js framework to accomplish my universal React needs.  It really is a remarkable piece of tech and I’m looking forward to see where it will go next (no pun intended).</p><p>I hope you enjoyed this tutorial.  If you have any questions about setting up your Cosmic-powered Next.js Universal App reach our to us in<a href=\"https://www.cosmicjs.com/community\"> our Slack community</a> or <a href=\"https://twitter.com/cosmic_js\">on Twitter</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>Next.js is an amazing new addition to the React open-source ecosystem. &nbsp;It is “a minimalistic framework for universal server-rendered React applications” that makes the process of building these types of applications much faster and easier. &nbsp;Recently I demoed a new app on the Cosmic app page that is built using the Next.js framework. &nbsp;I’ve built a few React Universal apps from scratch before and I found taking the Next.js route to speed things along quite a bit. &nbsp;And adding content management capability from Cosmic was very intuitive.<br></p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"c15305f0-bb6a-11e6-a321-e16ddb4fbbcc-cosmicjs-react-nextjs.jpeg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/c15305f0-bb6a-11e6-a321-e16ddb4fbbcc-cosmicjs-react-nextjs.jpeg","imgix_url":"https://imgix.cosmicjs.com/c15305f0-bb6a-11e6-a321-e16ddb4fbbcc-cosmicjs-react-nextjs.jpeg"},{"value":"import React from 'react'\nexport default class Home extends React.Component {\n  render () {\n    return &lt;div&gt;Hello World&lt;/div&gt;\n  }\n}","key":"home","title":"home","type":"textarea","children":null},{"value":"import React from 'react'\nexport default class Home extends React.Component {\n  render () {\n    return &lt;div&gt;About me&lt;/div&gt;\n  }\n}","key":"about","title":"about","type":"textarea","children":null},{"value":"import React from 'react'\nexport default class BasicPage extends React.Component {\n  render() {\n    const page = this.props.page\n    return (\n      &lt;div&gt;\n        &lt;main&gt;\n          &lt;h1&gt;{page.title}&lt;/h1&gt;\n          &lt;div dangerouslySetInnerHTML={{__html: page.content}}/&gt;\n        &lt;/main&gt;\n      &lt;/div&gt;\n    )\n  }\n}\n","key":"pages","title":"pages","type":"textarea","children":null},{"value":"import React from 'react'\nimport BasicPage from '../templates/basic-page'\nimport Cosmic from '../models/cosmic'\nexport default class Home extends React.Component {\n  static async getInitialProps () {\n    return await Cosmic.getPage('home')\n  }\n  render () {\n    const page = this.props.object\n    return &lt;BasicPage page={page}/&gt;\n  }\n}","key":"basic_page","title":"basic page","type":"textarea","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-12-06T02:58:10.878Z","created_by":"5357ef811693be2118000001","created":"2016-12-06T02:58:10.878Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>Next.js is an amazing new addition to the React open-source ecosystem. &nbsp;It is “a minimalistic framework for universal server-rendered React applications” that makes the process of building these types of applications much faster and easier. &nbsp;Recently I demoed a new app on the Cosmic app page that is built using the Next.js framework. &nbsp;I’ve built a few React Universal apps from scratch before and I found taking the Next.js route to speed things along quite a bit. &nbsp;And adding content management capability from Cosmic was very intuitive.<br></p>","featured_image":{"url":"https://cdn.cosmicjs.com/c15305f0-bb6a-11e6-a321-e16ddb4fbbcc-cosmicjs-react-nextjs.jpeg","imgix_url":"https://imgix.cosmicjs.com/c15305f0-bb6a-11e6-a321-e16ddb4fbbcc-cosmicjs-react-nextjs.jpeg"},"home":"import React from 'react'\nexport default class Home extends React.Component {\n  render () {\n    return &lt;div&gt;Hello World&lt;/div&gt;\n  }\n}","about":"import React from 'react'\nexport default class Home extends React.Component {\n  render () {\n    return &lt;div&gt;About me&lt;/div&gt;\n  }\n}","pages":"import React from 'react'\nexport default class BasicPage extends React.Component {\n  render() {\n    const page = this.props.page\n    return (\n      &lt;div&gt;\n        &lt;main&gt;\n          &lt;h1&gt;{page.title}&lt;/h1&gt;\n          &lt;div dangerouslySetInnerHTML={{__html: page.content}}/&gt;\n        &lt;/main&gt;\n      &lt;/div&gt;\n    )\n  }\n}\n","basic_page":"import React from 'react'\nimport BasicPage from '../templates/basic-page'\nimport Cosmic from '../models/cosmic'\nexport default class Home extends React.Component {\n  static async getInitialProps () {\n    return await Cosmic.getPage('home')\n  }\n  render () {\n    const page = this.props.object\n    return &lt;BasicPage page={page}/&gt;\n  }\n}"}},{"_id":"58424704250da4e17b001c8b","order":162,"slug":"how-to-upload-media-to-your-bucket-using-the-cosmic-js-api","title":"How to Upload Media to Your Bucket Using the Cosmic API","content":"<p><img src=\"https://www.cosmicjs.com/uploads/e27456c0-ba3f-11e6-9cad-31c6a87e340f-upload-devices.jpg\" data-filename=\"https://www.cosmicjs.com/uploads/e27456c0-ba3f-11e6-9cad-31c6a87e340f-upload-devices.jpg\" style=\"width: 100%;\"><br></p><p>In this short tutorial I’m going to show you how to:</p><p>1. Upload an image to your Cosmic Bucket via the Cosmic API.<br>2. Alter your image using the powerful <a href=\"https://www.imgix.com/\" target=\"_blank\">Imgix</a> processing service (free with every Cosmic Bucket)<br>3. Add the uploaded image as a Metafield to an Object in your Bucket</p><h3>Getting Started</h3><p><a href=\"https://www.cosmicjs.com/signup\" target=\"_blank\">Sign up for Cosmic</a> to create your own Bucket or just follow along with the examples. &nbsp;</p><p>To start, let's create a simple HTML form to upload our media.</p><pre class=\"  language-html\" style=\"word-spacing: 0px;\"><code class=\"  language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>html</span><span class=\"token punctuation\">&gt;</span></span>\r\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>body</span><span class=\"token punctuation\">&gt;</span></span>\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>form</span> <span class=\"token attr-name\">action</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>https://api.cosmicjs.com/v1/bucket-slug/media<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">method</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>post<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">enctype</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>multipart/form-data<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\r\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>file<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>media<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/&gt;</span></span>\r\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>submit<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">value</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>Upload!<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/&gt;</span></span>\r\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>form</span><span class=\"token punctuation\">&gt;</span></span>   \r\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>body</span><span class=\"token punctuation\">&gt;</span></span>\r\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>html</span><span class=\"token punctuation\">&gt;</span></span></code></pre><div>Next let's add a file and let it rip. &nbsp;Notice we now have data to use for data fetching / storing:</div><div><pre class=\"  language-html\" style=\"\"><code class=\"  language-html\">{\r\n  \"media\": {\r\n    \"name\": \"57319310-b914-11e6-acef-b1b7e94fa195-earth.png\",\r\n    \"original_name\": \"earth.png\",\r\n    \"size\": 1024912,\r\n    \"type\": \"image/png\",\r\n    \"bucket\": \"5839c67f0d3201c114000004\",\r\n    \"created\": \"2016-12-03T04:52:49.516Z\",\r\n    \"location\": \"https://www.cosmicjs.com/uploads\",\r\n    \"url\": \"https://www.cosmicjs.com/uploads/57319310-b914-11e6-acef-b1b7e94fa195-earth.png\",\r\n    \"imgix_url\": \"https://cosmicjs.imgix.net/57319310-b914-11e6-acef-b1b7e94fa195-earth.png\",\r\n  }\r\n}</code></pre><h3>The Power of Imgix</h3><p>After we POST our media to our Cosmic Bucket, one of the pieces of data returned is an Imgix URL. &nbsp;Imgix gives us powerful image processing capability on the fly. &nbsp;By simply adding query parameters to the end of the Imgix url, we have the power to resize, crop, add filters and more to our uploaded images. &nbsp;For example, to resize this image to 2X mobile size just add \"?w=640\" at the end of the url:</p><pre class=\"  language-html\" style=\"word-spacing: 0px;\">https://cosmicjs.imgix.net/57319310-b914-11e6-acef-b1b7e94fa195-earth.png?w=640</pre><p style=\"word-spacing: 0px;\">This makes creating light-weight responsive websites much easier because now we don't have to upload multiple images for different devices. &nbsp;All we do now is program the url to serve the size we want. &nbsp;Browse the <a href=\"https://docs.imgix.com/?_ga=1.63747439.195266109.1474515080\" target=\"_blank\">Imgix docs</a> to see all the capabilities at your fingertips. &nbsp;Imgix is included free with every Cosmic account.</p><h3 style=\"word-spacing: 0px;\">Adding the Uploaded Image to an Object</h3><p style=\"word-spacing: 0px;\">After adding our image to our Cosmic Bucket we may want to add it to an Object. &nbsp;To do this we'll simply take the \"name\" value returned after we POST our media and add it as a file Metafield value and POST this to our Add Object API endpoint:</p><pre class=\"  language-html\" style=\"word-spacing: 0px;\">POST /v1/:your-bucket-slug/add-object</pre><pre class=\"  language-html\" style=\"word-spacing: 0px;\">{\r\n  \"title\": \"New Object\",\r\n&nbsp;&nbsp;\"slug\": \"new-object\",\r\n  \"type_slug\": \"tests\",\r\n  \"content\": \"\",\r\n  \"metafields\": [{\r\n&nbsp;&nbsp;&nbsp;&nbsp;\"type\": \"file\",\r\n    \"title\": \"Image\",\r\n    \"key\": \"image\",\r\n    \"value\": \"57319310-b914-11e6-acef-b1b7e94fa195-earth.png\"\r\n  }]\r\n}</pre><p style=\"word-spacing: 0px;\">Now when we go into our Cosmic Bucket we'll notice that the \"Tests\" Object Type has a new Object titled \"New Object\" with our newly uploaded file as a file Metafield.</p><h3 style=\"word-spacing: 0px;\">Conclusion</h3><p style=\"word-spacing: 0px;\">Cosmic makes it really easy to add dynamic content to any website or application. &nbsp;In this tutorial I showed you how you can use the Cosmic API to add media, process images using the available Imgix processing URL then save that image to an Object in our Bucket for easy editing later. &nbsp;To learn more about how Cosmic makes it easy to store media and power content for your websites and apps, check out the <a href=\"https://www.cosmicjs.com/docs\" target=\"_blank\">Documentation page</a>.</p><p style=\"word-spacing: 0px;\">I hope you enjoyed this tutorial. &nbsp;If you have any questions or would like to learn more about how Cosmic can help you build content-powered apps faster and easier <a href=\"https://www.cosmicjs.com/community\">join Cosmic on Slack</a> and <a href=\"https://twitter.com/cosmic_js\" target=\"_blank\">reach out to us on Twitter</a>.</p></div>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>In this short tutorial I’m going to show you how to:</p><p>1. Upload an image to your Cosmic Bucket via the Cosmic API.<br>2. Alter your image using the powerful&nbsp;<a href=\"https://www.imgix.com/\" target=\"_blank\">Imgix</a>&nbsp;processing service (free with every Cosmic Bucket)<br>3. Add the uploaded image as a Metafield to an Object in your Bucket</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"ca1a5c50-ba3f-11e6-9cad-31c6a87e340f-upload-devices.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/ca1a5c50-ba3f-11e6-9cad-31c6a87e340f-upload-devices.jpg","imgix_url":"https://imgix.cosmicjs.com/ca1a5c50-ba3f-11e6-9cad-31c6a87e340f-upload-devices.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-12-03T04:16:04.901Z","created_by":"5357ef811693be2118000001","created":"2016-12-03T04:16:04.901Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>In this short tutorial I’m going to show you how to:</p><p>1. Upload an image to your Cosmic Bucket via the Cosmic API.<br>2. Alter your image using the powerful&nbsp;<a href=\"https://www.imgix.com/\" target=\"_blank\">Imgix</a>&nbsp;processing service (free with every Cosmic Bucket)<br>3. Add the uploaded image as a Metafield to an Object in your Bucket</p>","featured_image":{"url":"https://cdn.cosmicjs.com/ca1a5c50-ba3f-11e6-9cad-31c6a87e340f-upload-devices.jpg","imgix_url":"https://imgix.cosmicjs.com/ca1a5c50-ba3f-11e6-9cad-31c6a87e340f-upload-devices.jpg"}}},{"_id":"5833b0cfd5c3216a39002b6b","order":163,"slug":"how-to-build-a-nodejs-user-management-app","title":"How to Build a Node.js User Management App","content":"<p><img src=\"https://www.cosmicjs.com/uploads/f2a66940-b060-11e6-95e2-27fd9e24a1eb-users.jpg\" data-filename=\"https://www.cosmicjs.com/uploads/f2a66940-b060-11e6-95e2-27fd9e24a1eb-users.jpg\" style=\"width: 100%;\" class=\"fr-fic fr-dii\" alt=\"Managing your users in a Node.js app is easiest when you use a Headless CMS like Cosmic\"><br></p><p>In this tutorial I&rsquo;m going to show you how to build a user management app using <a href=\"https://nodejs.org/en/\">Node.js</a> and Cosmic as a <a href=\"https://www.cosmicjs.com/knowledge-base/nodejs-cms\">Node.js CMS</a>.</p><h3 open=\"\" style=\"font-family: ;\">TL;DR</h3><p><a href=\"https://github.com/cosmicjs/user-management\" target=\"_blank\">View the full source code on GitHub</a><br><a href=\"https://www.cosmicjs.com/apps/user-management/demo\" target=\"_blank\">View the Demo</a><br><a href=\"https://www.cosmicjs.com/knowledge-base/nodejs-cms\">Why Use Cosmic as Your Node.js CMS?</a></p><p>The app will include the following pages:</p><ul><li>Login</li><li>Signup</li><li>Users list (logged in user access only)</li></ul><h3 open=\"\" style=\"font-family: ;\">Getting Started</h3><p>Create a file titled app-server.js file and add the following:</p><div class=\"fr-embedly            \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/09c96eb3a1fa7328a6994623c50880d1' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/09c96eb3a1fa7328a6994623c50880d1\" class=\"embedly-card\"></a></div><p>This is the entry point of our app and serves to initialize everything we need for our user management app. &nbsp;We&rsquo;re using <a href=\"https://expressjs.com/\">Express</a> for the Node.js framework, Hogan Express for view rendering from Mustache templates. &nbsp;Express Session is used to initialize and save sessions.</p><p>We are going to have a couple partials available in our templates, header and footer as all of our pages will share these.</p><h3 open=\"\" style=\"font-family: ;\">Know Your Routes</h3><p>Next let&rsquo;s take a look at index.js in our routes folder.</p><div class=\"fr-embedly            \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/a37533e4341bc7f6e6bdec2f81ee66cc' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/a37533e4341bc7f6e6bdec2f81ee66cc\" class=\"embedly-card\"></a></div><p style=\"font-family: ;\">Here we have all of our routes.</p><h3 open=\"\" style=\"font-family: ;\">Logging In</h3><p>Let&rsquo;s take a look at home.js which is the login page for our app:</p><div class=\"fr-embedly            \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/36d4a91f4e835f1817dea0509513e519' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/36d4a91f4e835f1817dea0509513e519\" class=\"embedly-card\"></a></div><p>There is not much going on here, just loading our dynamic content from Cosmic, as well as the HTML login form.</p><p>Looking at the auth.js file, you&rsquo;ll see this is where the login form will send the data to log the user in.</p><div class=\"fr-embedly            \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/6452d0201d498f26a57760564f4e529b' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/6452d0201d498f26a57760564f4e529b\" class=\"embedly-card\"></a></div><p>When the data is sent to /auth the Cosmic NPM module searches for the email first then, if found tries to match the submitted password to the password saved in the Cosmic API (using <a href=\"https://www.npmjs.com/package/bcrypt\" target=\"_blank\">bcrypt</a>).\r\nIf both email and password are matched with a user, the session is created and the user is redirected from the login page to the users page. &nbsp;Let&rsquo;s take a look at the users list page.</p><h3 open=\"\" style=\"font-family: ;\">Access Exclusive Content</h3><p>After the user has logged in successfully, they are redirected to the users list page. &nbsp;This is how it looks:</p><div class=\"fr-embedly            \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/d2760fbde9250977663eed55ba1e90f6' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/d2760fbde9250977663eed55ba1e90f6\" class=\"embedly-card\"></a></div><p>If the user session is not set, they are immediately redirected to the login page with an unauthorized message. If they have a user session, they will be able to see a list of all registered users (from the Users Object Type). This gives you the idea\r\nof how to limit user access in our app. By checking for req.session.user on any page, you can restrict access to logged in users only.</p><h3 open=\"\" style=\"font-family: ;\">Signing Up</h3><p>Let&rsquo;s take a look at what happens for new users when they post their info to /users:</p><div class=\"fr-embedly            \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/5a102e418f371c2d771430b0c90acee0' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/5a102e418f371c2d771430b0c90acee0\" class=\"embedly-card\"></a></div><p>There&rsquo;s a few things happening here. First, the email is checked against the current list of users. &nbsp;If a match is not found, the user object is created with each data point of the user: First Name, Last Name, Email and Password stored as metafields\r\nin the Cosmic API.</p><p>Taking this a step further, after you log into your Cosmic bucket and go to your Users Object Type you will be able to add more Metafields to the users in your system. &nbsp;This makes adding dynamic, extended data very easy. &nbsp;For example, let&rsquo;s\r\nsay you needed to add a profile image, address, GitHub username, etc. &nbsp;All of these can be added as Metafields to the User Object. &nbsp;See screenshot below:</p><p><img src=\"https://www.cosmicjs.com/uploads/7f8be320-b05d-11e6-95e2-27fd9e24a1eb-Screen Shot 2016-11-21 at 8.40.33 PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/7f8be320-b05d-11e6-95e2-27fd9e24a1eb-Screen Shot 2016-11-21 at 8.40.33 PM.png\" style=\"width: 758px;\" class=\"fr-fic fr-dii\"><br></p><h3 open=\"\" style=\"font-family: ;\">See Ya Next Time</h3><p>Now let&rsquo;s see what happens when a user accesses the /logout route:</p><div class=\"fr-embedly           \" data-original-embed=\"<a href='https://gist.github.com/tonyspiro/226bb2543fb5ad57901c4bf1a9480b0a' class='embedly-card'></a>\"><a href=\"https://gist.github.com/tonyspiro/226bb2543fb5ad57901c4bf1a9480b0a\" class=\"embedly-card\"></a></div><p>The session is simply destroyed and the user is redirected back to the login page.</p><h3 open=\"\" style=\"font-family: ;\">Where&#39;s the HTML?</h3><p>I&#39;m not going to go into too much detail on the HTML, but basically both login and signup forms have JQuery validation and submit AJAX requests to the route endpoints. &nbsp;<a href=\"https://github.com/cosmicjs/user-management/blob/master/public/js/2-main.js\" target=\"_blank\">Check out the main.js file on GitHub</a> to see how JQuery is used for this and other UI and UX things.</p><h3 open=\"\" style=\"font-family: ;\">Conclusion</h3><p>And that&rsquo;s it. &nbsp;Cosmic is a powerful platform for content creation and app data management. &nbsp;With your Cosmic-powered User Management App you can now extend your user data using the Cosmic API or from your Cosmic Bucket Dashboard.</p><p>&nbsp;I hope you found this tutorial helpful. &nbsp; If you have any questions or feedback you can <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a> or <a href=\"https://www.cosmicjs.com/community\">chat with us in the Slack community</a>.</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"6FQO4yBsJH","value":"5768b253163172890e00002c","object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"7h7u7j11sO","value":"<p>In this tutorial I&rsquo;m going to show you how to build a user management app using Node.js and the <a href=\"https://www.cosmicjs.com/\">Cosmic JS CMS API</a>.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"ljA9LcN2WO","value":"e9d968e0-b05f-11e6-95e2-27fd9e24a1eb-users.jpg","url":"https://cdn.cosmicjs.com/e9d968e0-b05f-11e6-95e2-27fd9e24a1eb-users.jpg","imgix_url":"https://imgix.cosmicjs.com/e9d968e0-b05f-11e6-95e2-27fd9e24a1eb-users.jpg"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"HshRGz6Jax","value":"We're going to learn how to quickly and easily manage using Node.js and the Cosmic CMS API. Ready? "},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"ic2OAGtQ3o","value":""}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-11-22T02:43:27.624Z","created_by":"55767c3ffbcf5cbb13000001","created":"2016-11-22T02:43:27.624Z","status":"published","modified_at":"2020-08-10T14:04:22.001Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-08-08T22:07:07.641Z","unpublish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>In this tutorial I&rsquo;m going to show you how to build a user management app using Node.js and the <a href=\"https://www.cosmicjs.com/\">Cosmic JS CMS API</a>.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/e9d968e0-b05f-11e6-95e2-27fd9e24a1eb-users.jpg","imgix_url":"https://imgix.cosmicjs.com/e9d968e0-b05f-11e6-95e2-27fd9e24a1eb-users.jpg"},"seo_meta_description":"We're going to learn how to quickly and easily manage using Node.js and the Cosmic CMS API. Ready? ","published_date":""}},{"_id":"582a1c5c9d2f74bf430008c3","order":164,"slug":"new-responsive-app-demo-experience","title":"New Responsive App Demo Experience","content":"<p><img src=\"https://www.cosmicjs.com/uploads/b071d2a0-aab9-11e6-b60f-ff2536816c1a-responsive.jpg\" style=\"width: 100%;\"><br></p><p>Cosmic is on a mission to bring API-first content management to the world. &nbsp;Along with providing an intuitive API and content editing experience, our goal is to provide excellent examples of how you can quickly get started building the future of the web using Cosmic.</p><p>Today we’re rolling out a new app demo experience that allows you to demo any of <a href=\"https://www.cosmicjs.com/apps\" data-cke-saved-href=\"https://www.cosmicjs.com/apps\" target=\"_blank\">our&nbsp;web apps</a> across different device screen resolutions. &nbsp;Easily switch between Desktop, Tablet and Mobile viewing experiences.<br></p><p><a href=\"https://www.cosmicjs.com/apps/static-website/demo\" style=\"background-color: rgb(255, 255, 255);\">Click here to check out the new responsive demo page.</a></p><p><img src=\"https://cosmicjs.imgix.net/37691a60-aabb-11e6-b60f-ff2536816c1a-Screen%20Shot%202016-11-14%20at%204.37.45%20PM.png?w=900\" style=\"width: 50%;\"><img src=\"https://www.cosmicjs.com/uploads/153b24f0-aabc-11e6-b60f-ff2536816c1a-Screen Shot 2016-11-14 at 4.44.46 PM.png\" data-filename=\"https://cosmicjs.imgix.net/153b24f0-aabc-11e6-b60f-ff2536816c1a-Screen Shot 2016-11-14 at 4.44.46 PM.png?w=600\" style=\"width: 25%;\"><img src=\"https://www.cosmicjs.com/uploads/4c335e60-aabb-11e6-b60f-ff2536816c1a-Screen Shot 2016-11-14 at 4.38.54 PM.png\" data-filename=\"https://cosmicjs.imgix.net/4c335e60-aabb-11e6-b60f-ff2536816c1a-Screen Shot 2016-11-14 at 4.38.54 PM.png?w=600\" style=\"width: 25%;\"><br></p><p>Browsing our apps&nbsp;is a great way to give you ideas of how to build your next website. &nbsp;Click through any of our apps and click \"View Demo\" to enter the responsive demo experience. &nbsp;Click \"View Code\" to see how our apps use Cosmic to power content using different programming languages including Node.js, React, PHP and Angular. &nbsp;While in the responsive demo experience, click on the gallery icon in the top left corner to quickly navigate to another app.</p><p><a href=\"https://www.cosmicjs.com/signup\">Sign up for Cosmic</a> to install any one of our apps for easy customization. &nbsp;If you have any questions about the benefits of going API-first, <a href=\"https://twitter.com/cosmic_js\" target=\"_blank\">reach out to us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\">join us the community on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>Cosmic is on a mission to bring API-first content management to the world. &nbsp;Along with providing an intuitive API and content editing experience, our goal is to provide excellent examples of how you can quickly get started building the future of the web using Cosmic.<br></p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"b071d2a0-aab9-11e6-b60f-ff2536816c1a-responsive.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/b071d2a0-aab9-11e6-b60f-ff2536816c1a-responsive.jpg","imgix_url":"https://imgix.cosmicjs.com/b071d2a0-aab9-11e6-b60f-ff2536816c1a-responsive.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-11-15T20:19:40.385Z","created_by":"5357ef811693be2118000001","created":"2016-11-15T20:19:40.385Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"55767c3ffbcf5cbb13000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>Cosmic is on a mission to bring API-first content management to the world. &nbsp;Along with providing an intuitive API and content editing experience, our goal is to provide excellent examples of how you can quickly get started building the future of the web using Cosmic.<br></p>","featured_image":{"url":"https://cdn.cosmicjs.com/b071d2a0-aab9-11e6-b60f-ff2536816c1a-responsive.jpg","imgix_url":"https://imgix.cosmicjs.com/b071d2a0-aab9-11e6-b60f-ff2536816c1a-responsive.jpg"}}},{"_id":"5820b8d29f0b5b995a00143b","order":165,"slug":"creating-extendable-content-objects-served-via-api","title":"Creating Extendable Content Objects Served via API ","content":"<p>In this blog I will show you how to create an extendable content object in 4 Steps using the <a href=\"https://www.cosmicjs.com/\" target=\"_blank\">Cosmic</a> Content Management Platform. Once my object is created, it is available via API endpoint. The following 4 steps are an easy way to create new extendable objects for your web-connected application, so I would encourage you to <a href=\"https://www.cosmicjs.com/signup\" target=\"_blank\">Sign Up</a> for <a href=\"https://www.cosmicjs.com/\" target=\"_blank\">Cosmic</a> and begin the demo. If you're just starting out with Cosmic, I'd recommend reviewing the <a href=\"https://www.cosmicjs.com/getting-started\" target=\"_blank\">Getting Started </a>and <a href=\"https://www.cosmicjs.com/docs\" target=\"_blank\">Documentation</a> Pages. I'll be using the <a href=\"https://www.cosmicjs.com/\" target=\"_blank\">Cosmic CMS Web Application</a> as I walk through the 4 steps. </p><p>Once you've signed up, you will be prompted to Create a New Bucket, which you can think of as your project: your new website, your new iOS application or your new Android application. I created my bucket and created an Object Type called \"Page\". Below you can see how I created a page of content that can be delivered via API to any web-connected device. </p><h3 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">1.1 Adding an Object - Object Title</h3><p><img src=\"https://www.cosmicjs.com/uploads/61cfed00-a459-11e6-9a23-c1e7e75636c2-Screen%20Shot%202016-11-06%20at%201.42.03%20PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/61cfed00-a459-11e6-9a23-c1e7e75636c2-Screen Shot 2016-11-06 at 1.42.03 PM.png\" style=\"width: 763px;\"></p><h3 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">1.2 Adding an Object - Auto-Generated Slug</h3><p><img src=\"https://www.cosmicjs.com/uploads/655172a0-a459-11e6-9a23-c1e7e75636c2-Screen%20Shot%202016-11-06%20at%201.42.17%20PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/655172a0-a459-11e6-9a23-c1e7e75636c2-Screen Shot 2016-11-06 at 1.42.17 PM.png\" style=\"width: 771px;\"></p><h3 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">2. Adding an Object's Content</h3><p><img src=\"https://www.cosmicjs.com/uploads/69c91810-a459-11e6-9a23-c1e7e75636c2-Screen%20Shot%202016-11-06%20at%201.42.33%20PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/69c91810-a459-11e6-9a23-c1e7e75636c2-Screen Shot 2016-11-06 at 1.42.33 PM.png\" style=\"width: 793px;\"></p><h3 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">3. Adding Metafields To Your Object</h3><p><img src=\"https://www.cosmicjs.com/uploads/6dead550-a459-11e6-9a23-c1e7e75636c2-Screen%20Shot%202016-11-06%20at%201.43.02%20PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/6dead550-a459-11e6-9a23-c1e7e75636c2-Screen Shot 2016-11-06 at 1.43.02 PM.png\" style=\"width: 595px;\"></p><h3 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">4. Saving Object Draft | Publishing Object</h3><p><img src=\"https://www.cosmicjs.com/uploads/753bb270-a459-11e6-9a23-c1e7e75636c2-Screen%20Shot%202016-11-06%20at%201.43.17%20PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/753bb270-a459-11e6-9a23-c1e7e75636c2-Screen Shot 2016-11-06 at 1.43.17 PM.png\" style=\"width: 882px;\"></p><p><a href=\"https://www.cosmicjs.com/\" target=\"_blank\">Cosmic </a>is an <a href=\"https://www.cosmicjs.com/\" target=\"_blank\">API-first cloud-based content management platform</a> that makes it easy to manage applications and content. If you have questions about the Cosmic API, please reach out to the founders on <a href=\"https://twitter.com/cosmic_js\" target=\"_blank\">Twitter</a> or <a href=\"https://www.cosmicjs.com/community\" target=\"_blank\">Slack</a>. </p><h2 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">Read More</h2><ul><li><a href=\"https://carsongibbons.com/build-a-static-website-in-4-steps\" target=\"_blank\">Build a Static Website in 4 Steps</a> </li><li><a href=\"https://www.cosmicjs.com/blog/how-to-build-an-api-powered-static-website-the-best-of-both-worlds\" target=\"_blank\">How to Build an API-Powered, Static Website</a></li><li><a href=\"https://www.cosmicjs.com/blog/version-iteration-portable-json-buckets\" target=\"_blank\">Version Iteration - Portable JSON Buckets</a></li><li><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-jon-bloomer\" target=\"_blank\">Developer Spotlight: Jon Bloomer</a></li><li><a href=\"https://www.cosmicjs.com/blog/sharing-resources-with-a-content-management-api\" target=\"_blank\">Sharing Resources With a Content Management API</a></li><li><a href=\"https://www.cosmicjs.com/blog/how-to-build-a-cross-platform-blog-using-react-native-and-nodejs\">How to Build a Cross-Platform Blog Using React Native and Node.js</a></li><li><a href=\"https://www.cosmicjs.com/blog/how-to-create-an-intuitive-website-navigation-menu\" target=\"_blank\">How to Create an Intuitive Website Navigation Menu</a></li></ul>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>In this blog I'll show you how to create extendable content objects in 4 steps.&nbsp;<br></p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"af5942e0-a578-11e6-9bc4-ef863055e768-drawers.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/af5942e0-a578-11e6-9bc4-ef863055e768-drawers.jpg","imgix_url":"https://imgix.cosmicjs.com/af5942e0-a578-11e6-9bc4-ef863055e768-drawers.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-11-07T17:24:34.641Z","created_by":"5716b504e9c686d006000073","created":"2016-11-07T17:24:34.641Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"55767c3ffbcf5cbb13000001","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In this blog I'll show you how to create extendable content objects in 4 steps.&nbsp;<br></p>","featured_image":{"url":"https://cdn.cosmicjs.com/af5942e0-a578-11e6-9bc4-ef863055e768-drawers.jpg","imgix_url":"https://imgix.cosmicjs.com/af5942e0-a578-11e6-9bc4-ef863055e768-drawers.jpg"}}},{"_id":"581902a0de1cc19576003984","order":166,"slug":"app-deployment-monitoring-now-available","title":"App Deployment Monitoring Now Available","content":"<p><img src=\"https://www.cosmicjs.com/uploads/ab768870-a0ac-11e6-9e57-19df6f62c66a-deploy-logs.gif\" data-filename=\"https://www.cosmicjs.com/uploads/ab768870-a0ac-11e6-9e57-19df6f62c66a-deploy-logs.gif\" style=\"width: 1009px;\"><br></p><p>Cosmic makes it easy to deploy your application from GitHub to your own instance on the Cosmic App Server. &nbsp;And starting today, you can now view the status of every deployment attempt in an easy-to-use table. &nbsp;</p><p>This means that if there is an error on your deploy, you will be able to see exactly the error output to address any issues with your application. &nbsp;When the deploy is a success, you will see the entire build process indicated clearly. &nbsp; This gives you the ability to keep track of all of your deployments in a running history.<br></p><p>Simply go to Your Bucket &gt; Web Hosting after <a href=\"https://www.cosmicjs.com/login\" target=\"_blank\">logging into your Cosmic account</a>. &nbsp;When you click the \"View Log\" button, you will see the detail of the log. &nbsp;</p><p>Application deployment monitoring is another way that Cosmic is making it easier for you to build (and deploy!) your apps faster and easier.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p><span style=\"font-size: 14px;\">Now you can view the status of your deployment attempts.</span><br></p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"55996480-a076-11e6-b933-0f0f2f10a696-deploy-logs.gif","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/55996480-a076-11e6-b933-0f0f2f10a696-deploy-logs.gif","imgix_url":"https://imgix.cosmicjs.com/55996480-a076-11e6-b933-0f0f2f10a696-deploy-logs.gif"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-11-02T21:01:20.355Z","created_by":"5357ef811693be2118000001","created":"2016-11-02T21:01:20.355Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p><span style=\"font-size: 14px;\">Now you can view the status of your deployment attempts.</span><br></p>","featured_image":{"url":"https://cdn.cosmicjs.com/55996480-a076-11e6-b933-0f0f2f10a696-deploy-logs.gif","imgix_url":"https://imgix.cosmicjs.com/55996480-a076-11e6-b933-0f0f2f10a696-deploy-logs.gif"}}},{"_id":"58111654dae70f540e00672f","order":167,"slug":"one-million-requests-one-million-thanks","title":"One Million Requests - One Million Thanks","content":"<p>Cosmic is on a mission to help teams build content-powered websites and apps faster and easier.  Today, we’re happy to announce an exciting milestone: users have passed one million total requests to the Cosmic API. This means that more than one million times someone has used Cosmic to <a href=\"https://www.cosmicjs.com/apps/photography-website\" target=\"_blank\">view a website page</a>, <a href=\"https://www.cosmicjs.com/apps/static-website\" target=\"_blank\">create a static website build</a>, <a href=\"https://www.cosmicjs.com/apps/react-chat-app\" target=\"_blank\">send a chat message</a>, <a href=\"https://www.cosmicjs.com/apps/voting-app\" target=\"_blank\">vote for their preferred presidential candidate</a> or <a href=\"https://www.cosmicjs.com/apps/cross-platform-blog\" target=\"_blank\">view a blog post using an iOS or Android device</a>. This increase in requests comes shortly after <a href=\"https://www.cosmicjs.com/blog/cosmic-js-users-hit-500000-api-requests\" target=\"_blank\" style=\"background-color: rgb(255, 255, 255);\">announcing our 500,000th API request last month</a>.<br><br>While this milestone is an indication of continued traction, it's just the start.  Cosmic is dedicated to enabling faster and easier product development for teams all over the world.  So far users in 67 countries are using Cosmic to develop a variety of content-powered applications.<br><br>We're seeing widespread adoption in industries including politics, telecom, retail goods, career placement, digital services and more. This reaffirms the painpoints that we aimed to solve with Cosmic.  And shows the need for an intuitive content and application development solution are truly universal.<br><br>Special thanks to you, the <a href=\"https://en.wikipedia.org/wiki/Earlyvangelist\" target=\"_blank\" style=\"background-color: rgb(255, 255, 255);\">earlyvangelists</a>, the supporters and the partners who have joined us on this exciting journey.  Here's to the next 99 million requests!<br><br>Cheers,<br>Tony Spiro<br>Co-founder, CEO</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>At Cosmic our mission is to help teams build websites and apps faster and easier. &nbsp;Today, we’re happy to announce an exciting milestone: we have passed 1,000,000 API requests. &nbsp;This comes shortly after announcing our 500,000th API request last month. &nbsp;This means that over 1 Million times someone has used Cosmic to view a web page, create a static website build, send a chat message, vote for their preferred presidential candidate or view a blog post using an iOS or Android device.<br></p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-10-27T20:47:16.982Z","created_by":"5357ef811693be2118000001","created":"2016-10-27T20:47:16.982Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>At Cosmic our mission is to help teams build websites and apps faster and easier. &nbsp;Today, we’re happy to announce an exciting milestone: we have passed 1,000,000 API requests. &nbsp;This comes shortly after announcing our 500,000th API request last month. &nbsp;This means that over 1 Million times someone has used Cosmic to view a web page, create a static website build, send a chat message, vote for their preferred presidential candidate or view a blog post using an iOS or Android device.<br></p>"}},{"_id":"580a2d560250d77943005011","order":168,"slug":"how-to-build-an-api-powered-static-website-the-best-of-both-worlds","title":"How to Build an API-Powered, Static Website: The Best of Both Worlds","content":"<p style=\"text-align: center;\"><img src=\"https://www.cosmicjs.com/uploads/d510d080-98cf-11e6-8afd-2319bb61fbf1-html.jpg\" data-filename=\"https://www.cosmicjs.com/uploads/d510d080-98cf-11e6-8afd-2319bb61fbf1-html.jpg\" style=\"width: 758px;\" class=\"fr-fic fr-dii\"><br></p><h2><strong>Update</strong></h2><p>Check out the <a href=\"https://www.cosmicjs.com/knowledge-base/jamstack-cms\">Jamstack CMS knowledge base</a> page to learn how you can use Cosmic to build a static websites site using <a href=\"https://www.cosmicjs.com/articles?q=gatsbyjs\" rel=\"noopener noreferrer\" target=\"_blank\">Gatsby</a>, <a href=\"https://www.cosmicjs.com/articles?q=Nuxt.js\">Nuxt.js</a>, <a href=\"https://www.cosmicjs.com/articles?q=gridsome\">Gridsome</a>, and more.</p><p style=\"text-align: center;\"><a href=\"https://www.cosmicjs.com/articles?q=gatsbyjs\"><img src=\"https://imgix.cosmicjs.com/1931bf40-8479-11e8-9cb3-a15ae07f1c62-Xuq8DypK_400x400.jpg\" style=\"width: 100px; margin-right: 20px;\" class=\"fr-fic fr-dii\"></a>\r\n<a href=\"https://www.cosmicjs.com/articles?q=gridsome\"></a>\r\n<a href=\"https://www.cosmicjs.com/articles?q=Nuxt.js\"><img src=\"https://imgix.cosmicjs.com/2d15d4f0-9300-11ea-838a-0523b52a08cb-nuxt-square.svg\" data-name=\"nuxt-square.svg\" style=\"width: 100px;margin-right: 20px;\" class=\"fr-fic fr-dii\"></a>\r\n<a href=\"https://www.cosmicjs.com/articles?q=Gridsome\"><img src=\"https://cdn.cosmicjs.com/02c54f60-b24e-11ea-a522-15a7eafcdedf-gridsome-cms-icon.jpg\" style=\"width: 100px;\" class=\"fr-fic fr-dii\"></a></p><p>Continue reading for an example using <a href=\"https://www.npmjs.com/package/metalsmith\" rel=\"noopener noreferrer\" target=\"_blank\">Metalsmith</a>.</p><p><br></p><div style=\"text-align: left;\">Static websites have been around for awhile, like since the beginning of the internet (the web used to be all static websites). Now we&rsquo;re seeing a trend that is bringing these HTML-centric websites back, why? &nbsp;Because HTML renders really fast\r\nwhen you don&rsquo;t have a database or a server-side language slowing things down. &nbsp;That&rsquo;s not to say that programming languages should be done away with, because pretty much every major website you visit has some sort of server-side language\r\nand database attached to it. &nbsp;But for smaller websites that don&rsquo;t involve things like user session management or time-sensitive dynamic data, a static site will do, and actually may be more ideal.</div><p><br></p><p>In this article I&rsquo;m going to show you how to build a static website that gives you the best of both worlds: &nbsp;A website that is both dynamically powered by the Cosmic API and also a static website that can be edited using Markdown files. &nbsp;As a bonus, you can also setup automatic builds using Webhooks.<br><span style=\"color: inherit; font-family: inherit;\"><br><span style=\"font-size: 24px;\">TL;DR</span></span></p><p><a href=\"http://static-website.cosmicapp.co/\" target=\"_blank\">View the Static Website demo here</a>. <a href=\"https://github.com/cosmicjs/static-website\" target=\"_blank\"></a><br><a href=\"https://github.com/cosmicjs/static-website\" target=\"_blank\">View the Static Website codebase on GitHub here</a>. <a href=\"https://www.cosmicjs.com/apps/static-website\"></a><br><a href=\"https://www.cosmicjs.com/apps/static-website\">View the Static Website App page on Cosmic</a>.<br><span style=\"color: inherit; font-family: inherit;\"><br><span style=\"font-size: 24px;\">The Problem With Markdown</span></span></p><p>A lot of static website processes involve translating Markdown to HTML. &nbsp;And developers love Markdown, for good reason: &nbsp;Markdown allows developers to save time by using a shorthand language that translates into HTML.</p><p>But most non-technical people would rather not have to learn Markdown to edit content. &nbsp;Most content editors would rather use an <a href=\"https://www.cosmicjs.com/\" style=\"background-color: rgb(255, 255, 255);\">intuitive content management system</a>.\r\nThat&rsquo;s where Cosmic comes in.</p><p><span style=\"color: inherit; font-family: inherit;\"><br><span style=\"font-size: 24px;\">API-Powered, Static Website</span></span></p><p>In building our Cosmic-powered static website, our goal is to make it easy for developers to build the website and easy for non-developers to edit and deploy content. &nbsp;For editors, adding new content will be as easy as going into the Cosmic Dashboard, adding a new Page, editing the different content areas and clicking Save. &nbsp;For developers, they will still have the benefit of using Markdown. &nbsp;By building our website this way, we can get the whole team involved. &nbsp;Our static website will have the best of both worlds: A fast, static website that is easily managed by a developer using Markdown files, or content editor using the Cosmic <a href=\"https://www.cosmicjs.com/\">CMS API</a>.<br><span style=\"color: inherit; font-family: inherit; font-size: 24px;\"><br>Getting Started</span></p><p>To build our API-powered static website, we will need a few things:</p><p>1. A build process that converts the API response into static pages.</p><p>2. A rebuild process that makes it easy to rebuild our app after content edits.</p><p>3. The ability to create pages using Markdown.</p><p>To follow along with the steps <a href=\"https://github.com/cosmicjs/static-website\" target=\"_blank\">download the Static Website on GitHub</a>.</p><p><span style=\"color: inherit; font-family: inherit;\"><br><span style=\"font-size: 24px;\">The Build Process</span></span></p><p>To handle our static website&#39;s files and rebuild process we&rsquo;ll use Node.js, specifically the Express framework for our light-weight server. &nbsp;In our <code>app.js</code> file we have the following:</p><pre class=\"prism\">var buildSite = require(&#39;./build-site&#39;)\r\nbuildSite()\r\nvar express = require(&#39;express&#39;)\r\nvar app = express()\r\napp.set(&#39;port&#39;, process.env.PORT || 3000)\r\napp.use(express.static(&#39;build&#39;))\r\napp.get(&#39;/rebuild-site&#39;, (req, res) =&gt; {\r\n  buildSite()\r\n  res.end(&#39;Site rebuilt!&#39;)\r\n})\r\napp.post(&#39;/rebuild-site&#39;, (req, res) =&gt; {\r\n  buildSite()\r\n  res.end(&#39;Site rebuilt!&#39;)\r\n})\r\napp.get(&#39;*&#39;, (req, res) =&gt; {\r\n  res.redirect(&#39;/404&#39;)\r\n})\r\napp.listen(app.get(&#39;port&#39;) || 3000, () =&gt; {\r\n  console.info(&#39;==&gt; 🌎  Go to http://localhost:%s&#39;, app.get(&#39;port&#39;))\r\n})</pre><p>There&rsquo;s a few things happening. &nbsp;First we&rsquo;re initiating the build process right on app startup. &nbsp;Our static files will be served from the /build folder which will also be the root of our application.</p><p><br><span style=\"font-size: 24px;\">Other Routes</span></p><p>GET /rebuild-site will rebuild the website.</p><p>POST /rebuild-site is used for our <a href=\"https://www.cosmicjs.com/blog/adding-webhooks-in-4-steps\" target=\"_blank\">Cosmic Webhooks</a>.</p><p>GET /* When a route is not found and &quot;falls through&quot; our designated routes, it will redirect to the 404 page located at /404.</p><h3 open=\"\" style=\"font-family: ;\"><br>Building HTML Pages from the API</h3><p>Next let&rsquo;s look at the build process. &nbsp;Here&#39;s what&#39;s in the <code>build-site.js</code> file:</p><pre class=\"prism\">var Metalsmith = require(&#39;metalsmith&#39;)\r\nvar markdown = require(&#39;metalsmith-markdown&#39;)\r\nvar layouts = require(&#39;metalsmith-layouts&#39;)\r\nvar permalinks = require(&#39;metalsmith-permalinks&#39;)\r\nvar sass = require(&#39;metalsmith-sass&#39;)\r\nvar metalsmithPrism = require(&#39;metalsmith-prism&#39;);\r\nvar Cosmic = require(&#39;cosmicjs&#39;)\r\nvar async = require(&#39;async&#39;)\r\nvar mkdirp = require(&#39;mkdirp&#39;)\r\nvar del = require(&#39;del&#39;)\r\nvar mv = require(&#39;mv&#39;)\r\nvar createPage = require(&#39;./create-page&#39;)\r\nvar config = require(&#39;./config&#39;)\r\nmodule.exports = () =&gt; {\r\n  async.series([\r\n    // Create build-new folder\r\n    callback =&gt; {\r\n      mkdirp(__dirname + &#39;/build-new&#39;, err =&gt; {\r\n        callback()\r\n      })\r\n    },\r\n    callback =&gt; {\r\n      Cosmic.getObjects(config.cosmicjs, (err, res) =&gt; {\r\n        var pages = res.objects.type.pages\r\n        var cosmic = res\r\n        // Create dynamic static pages\r\n        async.eachSeries(pages, (page, callbackEach) =&gt; {\r\n          var args = {\r\n            page: page,\r\n            pages: pages,\r\n            cosmic: cosmic\r\n          }\r\n          createPage(args, callbackEach)\r\n        }, () =&gt; {\r\n          // Create markdown static pages\r\n          var year = (new Date()).getFullYear() // make your footer year dynamic ;) \r\n          Metalsmith(__dirname)\r\n            .metadata({\r\n              cosmic: cosmic,\r\n              year: year\r\n            })\r\n            .source(&#39;./src&#39;)\r\n            .destination(&#39;./build-new&#39;)\r\n            .clean(false)\r\n            .use(sass({\r\n              outputDir: &#39;css/&#39;,\r\n              sourceMap: true,\r\n              sourceMapContents: true\r\n            }))\r\n            .use(markdown( { langPrefix: &#39;language-&#39; } ))\r\n            .use(metalsmithPrism())\r\n            .use(permalinks())\r\n            .use(layouts({\r\n              engine: &#39;handlebars&#39;,\r\n              partials: &#39;layouts/partials&#39;\r\n            }))\r\n            .build((err, files) =&gt; {\r\n              if (err) { throw err }\r\n              callback()\r\n            })\r\n        })\r\n      })\r\n    },\r\n    // Delete build folder\r\n    callback =&gt; {\r\n      del([__dirname + &#39;/build&#39;]).then(() =&gt; {\r\n        callback()\r\n      })\r\n    },\r\n    // Move build-new to build folder\r\n    callback =&gt; {\r\n      mv(__dirname + &#39;/build-new&#39;, __dirname + &#39;/build&#39;, { mkdirp: true }, () =&gt; {\r\n        callback()\r\n      })\r\n    },\r\n    // Delete build-new folder\r\n    callback =&gt; {\r\n      del([__dirname + &#39;/build-new&#39;]).then(() =&gt; {\r\n        // done\r\n      })\r\n    }\r\n  ])\r\n}</pre><p><br></p><p>We&#39;re using the async module to make sure everything is happening in the correct order. &nbsp;Here&#39;s what&#39;s happening:</p><p>1. The new build folder is created.<br>2. The Cosmic API is called to get the Pages from our Cosmic bucket.<br>3. The createPage function is called next (we&rsquo;ll get to this in a moment).<br>4. Finally Metalsmith takes care of our frontend: preprocessing SASS files into CSS or concatenating and minifying JavaScript, etc. &nbsp;Along with these frontend processes, Metalsmith will also convert any Markdown files that we have in our src folder\r\ninto HTML pages in our build folder.</p><p>After all static HTML files from the API and from Markdown are added to the build-new folder our build-new folder is renamed to build for a <span style=\"font-weight: 700;\">zero-downtime</span> update to our static website.</p><p>With Cosmic serving content from the CMS API and Metalsmith powering the frontend and Markdown files, you have the ability to let a non-dev manage content in the static site as well as giving the developer the freedom to still use Markdown.</p><p>Next let&rsquo;s look at how the pages are rendered from the API to HTML pages. &nbsp;In <code>create-page.js</code> we have the following:</p><pre class=\"prism\">var fs = require(&#39;fs&#39;)\r\nvar async = require(&#39;async&#39;)\r\nvar mkdirp = require(&#39;mkdirp&#39;)\r\nvar Handlebars = require(&#39;handlebars&#39;)\r\nmodule.exports = (args, done) =&gt; {\r\n  var page = args.page\r\n  var pages = args.pages\r\n  var cosmic = args.cosmic\r\n  var locals = {}\r\n  async.series([\r\n    // Register partials\r\n    callback =&gt; {\r\n      fs.readFile(__dirname + &#39;/layouts/partials/header.html&#39;, &#39;utf8&#39;, (err, data) =&gt; {\r\n        if (err) {\r\n          return console.log(err)\r\n        }\r\n        Handlebars.registerPartial(&#39;header&#39;, data)\r\n        callback()\r\n      })\r\n    },\r\n    callback =&gt; {\r\n      fs.readFile(__dirname + &#39;/layouts/partials/footer.html&#39;, &#39;utf8&#39;, (err, data) =&gt; {\r\n        if (err) {\r\n          return console.log(err)\r\n        }\r\n        Handlebars.registerPartial(&#39;footer&#39;, data)\r\n        callback()\r\n      })\r\n    },\r\n    callback =&gt; {\r\n      fs.readFile(__dirname + &#39;/layouts/page.html&#39;, &#39;utf8&#39;, (err, data) =&gt; {\r\n        if (err) {\r\n          return console.log(err)\r\n        }\r\n        var template = Handlebars.compile(data)\r\n        locals.template = template\r\n        callback()\r\n      })\r\n    },\r\n    () =&gt; {\r\n      // Set variables\r\n      var year = (new Date()).getFullYear() // make your footer year dynamic ;) \r\n      var title = page.title\r\n      var markup = locals.template({ page, pages, cosmic, year, title })\r\n      // If Home page found\r\n      if (page.slug === &#39;home&#39;) {\r\n        fs.writeFile(__dirname + &#39;/build-new/index.html&#39;, markup, err =&gt; {\r\n          if(err) {\r\n            return console.log(err)\r\n          }\r\n          done()\r\n        })\r\n      } else {\r\n        mkdirp(__dirname + &#39;/build-new/&#39; + page.slug, err =&gt; {\r\n          fs.writeFile(__dirname + &#39;/build-new/&#39; + page.slug + &#39;/index.html&#39;, markup, err =&gt; {\r\n            if(err) {\r\n              return console.log(err)\r\n            }\r\n            done()\r\n          })\r\n        })\r\n      }\r\n    }\r\n  ])\r\n}</pre><p><br></p><p>Notice we are reading the contents of page.html from our layouts folder and creating a template using <a href=\"http://handlebarsjs.com/\" target=\"_blank\">Handlebars</a>. &nbsp;You can use other template languages, but I prefer Mustache, or Handlebars for\r\nits logic-less simplicity. &nbsp;Next we are passing in our variables from the API to translate the template variables into rendered output. &nbsp;Next a file write happens to /build/:page.slug:/index.html for all pages in our Cosmic bucket. &nbsp;And\r\na special page is built for our home page at /build/index.html.</p><p>As you can see this is a pretty simple process of taking the output of our Cosmic bucket and translating it into HTML using Handlebars and the Node.js fs.writeFile function.<br><br></p><h3 open=\"\" style=\"font-family: ;\">Building Pages from Markdown</h3><p>In our src folder there is a file docs/index.md that will be rendered to HTML to /build/docs/index.html at the route /docs. &nbsp;Here&#39;s the markdown in src/docs/index.md:</p><pre class=\"language-markdown\" style=\"line-height: 1.42857;\">---\r\ntitle: Documentation\r\nlayout: markdown.html\r\n---\r\nThis documentation page is powered by Markdown.\r\nHere&#39;s a block of code:\r\n```bash\r\n$ cd awesome\r\n$ yarn\r\n```\r\nHere&#39;s another block of code:\r\n```javascript\r\nvar fs = require(&#39;fs&#39;)\r\nvar async = require(&#39;async&#39;)\r\nvar mkdirp = require(&#39;mkdirp&#39;)\r\nvar Handlebars = require(&#39;handlebars&#39;)\r\nmodule.exports = (args, done) =&gt; {\r\n  var page = args.page\r\n  var pages = args.pages\r\n  var cosmic = args.cosmic\r\n  var locals = {}\r\n  async.series([\r\n    callback =&gt; {\r\n      fs.readFile(__dirname + &#39;/layouts/page.html&#39;, &#39;utf8&#39;, (err, data) =&gt; {\r\n        if (err) {\r\n          return console.log(err)\r\n        }\r\n        var template = Handlebars.compile(data)\r\n        locals.template = template\r\n        callback()\r\n      })\r\n    },\r\n    () =&gt; {\r\n      // Set variables\r\n      var year = (new Date()).getFullYear() // make your footer year dynamic ;) \r\n      var markup = locals.template({ page, pages, cosmic, year })\r\n      // If Home page found\r\n      if (page.slug === &#39;home&#39;) {\r\n        fs.writeFile(__dirname + &#39;/build-new/index.html&#39;, markup, err =&gt; {\r\n          if(err) {\r\n            return console.log(err)\r\n          }\r\n          done()\r\n        })\r\n      } else {\r\n        mkdirp(__dirname + &#39;/build-new/&#39; + page.slug, err =&gt; {\r\n          fs.writeFile(__dirname + &#39;/build-new/&#39; + page.slug + &#39;/index.html&#39;, markup, err =&gt; {\r\n            if(err) {\r\n              return console.log(err)\r\n            }\r\n            done()\r\n          })\r\n        })\r\n      }\r\n    }\r\n  ])\r\n}\r\n```</pre><p>Any new folder that you add to src with an index.md Markdown file will create a new route at /your-new-folder.<br><span style=\"font-size: 24px; color: inherit; font-family: inherit;\"><br>Starting Our Static Website</span></p><p>If you haven&#39;t already, download the GitHub repository for the Static Website by running the following commands:</p><pre style=\"line-height: 1.42857;\">git clone <a href=\"https://github.com/cosmicjs/static-website\" target=\"_blank\">https://github.com/cosmicjs/static-website</a>\r\ncd static-website\r\nyarn install\r\nyarn start</pre><p>Now go to <a href=\"http://localhost:3000/\" target=\"_blank\">http://localhost:3000</a> to see your freshly built website. &nbsp;Go to <a href=\"http://localhost:3000/rebuild-site\" target=\"_blank\">http://localhost:3000</a><a href=\"http://localhost:3000/rebuild-site\">/rebuild-site</a>whenever you would like to rebuild your website.<br><span style=\"color: inherit; font-family: inherit;\"><br><span style=\"font-size: 24px;\">Automatic Builds Using Webhooks</span></span></p><p>Next, to make things even easier for your content editor you can add Webhooks to your Cosmic bucket to trigger a rebuild every time content is published in your bucket.</p><p><a href=\"https://www.cosmicjs.com/blog/adding-webhooks-in-4-steps\" target=\"_blank\">Check out the tutorial to learn how to add Webhooks</a>.<br><span style=\"color: inherit; font-family: inherit;\"><br><span style=\"font-size: 24px;\">Conclusion</span></span></p><p>By using Cosmic as your CMS API you can have a static website with the best of both worlds: A dynamic website that can be managed using an intuitive content editing experience as well as the ability to add developer-friendly&nbsp;Markdown&nbsp;pages.</p><p>I hope you&#39;ve enjoyed this tutorial on creating an API-powered static website. &nbsp;If you want to deploy the static website in just a few clicks, <a href=\"https://app.cosmicjs.com/signup\">sign up for Cosmic</a>, create a bucket and look for the Static Website App in the Apps tab of your bucket. &nbsp;For any questions or help getting started, reach out to us in the <a href=\"https://www.cosmicjs.com/community\" target=\"_blank\">Cosmic Slack channel</a>, or <a href=\"https://twitter.com/cosmicjs\" rel=\"noopener noreferrer\" target=\"_blank\">reach out to us on Twitter</a>.</p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"DkGd6HxDyg","value":"5768b253163172890e00002c","object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"Y6iCgHegMS","value":"<p>In this article I&rsquo;m going to show you how to get the best of both worlds: &nbsp;A website that is both dynamic, has content powered by the Cosmic API that is also a static website. &nbsp;Our static website will be easily managed by a content editor using the Cosmic CMS and the developer will also be able to use Markdown files.</p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"bFeRNBJb87","value":"d510d080-98cf-11e6-8afd-2319bb61fbf1-html.jpg","url":"https://cdn.cosmicjs.com/d510d080-98cf-11e6-8afd-2319bb61fbf1-html.jpg","imgix_url":"https://imgix.cosmicjs.com/d510d080-98cf-11e6-8afd-2319bb61fbf1-html.jpg"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"fPwf0lIVF8","value":""},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"XVscCXAtKv","value":""}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-10-25T14:59:34.405Z","created_by":"5357ef811693be2118000001","created":"2016-10-25T14:59:34.405Z","status":"published","modified_at":"2020-10-02T14:06:42.595Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-10-02T14:06:42.595Z","thumbnail":"https://imgix.cosmicjs.com/d510d080-98cf-11e6-8afd-2319bb61fbf1-html.jpg","unpublish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>In this article I&rsquo;m going to show you how to get the best of both worlds: &nbsp;A website that is both dynamic, has content powered by the Cosmic API that is also a static website. &nbsp;Our static website will be easily managed by a content editor using the Cosmic CMS and the developer will also be able to use Markdown files.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/d510d080-98cf-11e6-8afd-2319bb61fbf1-html.jpg","imgix_url":"https://imgix.cosmicjs.com/d510d080-98cf-11e6-8afd-2319bb61fbf1-html.jpg"},"seo_meta_description":"","published_date":""}},{"_id":"580e1492dae70f540e0000f7","order":169,"slug":"version-iteration-portable-json-buckets","title":"Version Iteration - Portable JSON Buckets","content":"<p>One of the principal benefits of using a&nbsp;<a href=\"https://www.cosmicjs.com/\" target=\"_blank\">CMS API</a>&nbsp;over an installed content management system is the&nbsp;<a href=\"https://www.cosmicjs.com/features\" target=\"_blank\">portability and scalability</a>&nbsp;of the buckets of content you create. I hear this question at least several times a week: \"How can I back up my bucket of content or duplicate that bucket's content to another web application?\"&nbsp;</p><p>Using a&nbsp;<a href=\"https://www.cosmicjs.com/\" target=\"_blank\">CMS API</a>&nbsp;like the&nbsp;<a href=\"https://www.cosmicjs.com/\" target=\"_blank\">Cosmic API</a>&nbsp;allows developers to build web applications in any programming language they want. Version iterations, backups and duplicating buckets for the next stage in development is intuitive and easy. In this blog I will show you how simple the process is.&nbsp;</p><p>I'm using<a href=\"https://www.cosmicjs.com/\" target=\"_blank\">&nbsp;Cosmic</a>&nbsp;as the example&nbsp;<a href=\"https://www.cosmicjs.com/\" target=\"_blank\">Content Management API</a>&nbsp;for this blog.&nbsp;<a href=\"https://www.cosmicjs.com/signup\" target=\"_blank\">Sign Up</a>&nbsp;with Cosmic to get started.</p><ul><li><a href=\"https://www.cosmicjs.com/getting-started\" target=\"_blank\">Cosmic - Getting Started</a></li><li><a href=\"https://www.cosmicjs.com/docs\" target=\"_blank\">Cosmic - Documentation</a></li><li><a href=\"https://www.youtube.com/channel/UCDzCWWJLVWLpoHB5oGH0H-A\" target=\"_blank\">Cosmic - Tutorials</a></li></ul><h2 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">Export bucket.json file&nbsp;</h2><p><img src=\"https://www.cosmicjs.com/uploads/d03e3c50-99ec-11e6-8356-67a307c4f589-Screen%20Shot%202016-10-24%20at%208.14.35%20AM.png\" data-filename=\"https://www.cosmicjs.com/uploads/d03e3c50-99ec-11e6-8356-67a307c4f589-Screen Shot 2016-10-24 at 8.14.35 AM.png\" style=\"width: 912px;\"></p><p>I've navigated to the Import / Export tab of my Cosmic Dashboard and can see the option to Export my data and files into a bucket.json file. By clicking Export, the bucket is immediately downloaded onto my computer for use.&nbsp;</p><h2 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\"><span style=\"color: inherit; font-family: inherit; font-size: 24px;\">Downloaded bucket.json File</span><img src=\"https://www.cosmicjs.com/uploads/d02e0fb1-99ec-11e6-8356-67a307c4f589-Screen%20Shot%202016-10-24%20at%208.15.07%20AM.png\" data-filename=\"https://www.cosmicjs.com/uploads/d02e0fb1-99ec-11e6-8356-67a307c4f589-Screen Shot 2016-10-24 at 8.15.07 AM.png\" style=\"font-size: 14px; width: 618px;\"></h2><h2 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">Add New Bucket</h2><p><img src=\"https://www.cosmicjs.com/uploads/3272b2f0-99ef-11e6-8356-67a307c4f589-Screen%20Shot%202016-10-24%20at%208.15.45%20AM.png\" data-filename=\"https://www.cosmicjs.com/uploads/3272b2f0-99ef-11e6-8356-67a307c4f589-Screen Shot 2016-10-24 at 8.15.45 AM.png\" style=\"width: 177px;\"><br></p><h2 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">Create New Bucket - Version II</h2><p><img src=\"https://www.cosmicjs.com/uploads/d02dc191-99ec-11e6-8356-67a307c4f589-Screen%20Shot%202016-10-24%20at%208.16.00%20AM.png\" data-filename=\"https://www.cosmicjs.com/uploads/d02dc191-99ec-11e6-8356-67a307c4f589-Screen Shot 2016-10-24 at 8.16.00 AM.png\" style=\"width: 900.75px; height: 306.17598684210526px;\"></p><p>Because I'd like to keep Version I as a comparison of my web application, I'll Create a New Bucket to import my downloaded bucket.json file to deploy and make changes to.&nbsp;</p><h2 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\"><span style=\"color: inherit; font-family: inherit; font-size: 24px;\">App Installation Prompt</span></h2><p><img src=\"https://www.cosmicjs.com/uploads/d02dc190-99ec-11e6-8356-67a307c4f589-Screen%20Shot%202016-10-24%20at%208.16.12%20AM.png\" data-filename=\"https://www.cosmicjs.com/uploads/d02dc190-99ec-11e6-8356-67a307c4f589-Screen Shot 2016-10-24 at 8.16.12 AM.png\" style=\"width: 592px;\"></p><p>Once I've created my new bucket, the standard App Installation Prompt will pop up to see if I'd like to see any&nbsp;<a href=\"https://www.cosmicjs.com/apps\" target=\"_blank\">content-ready applications</a>. Since I've already got an application in my bucket.json file, I'll click \"No Thanks\".</p><h2 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">Import Bucket.json file&nbsp;</h2><p><img src=\"https://www.cosmicjs.com/uploads/d02d2550-99ec-11e6-8356-67a307c4f589-Screen%20Shot%202016-10-24%20at%208.16.35%20AM.png\" data-filename=\"https://www.cosmicjs.com/uploads/d02d2550-99ec-11e6-8356-67a307c4f589-Screen Shot 2016-10-24 at 8.16.35 AM.png\" style=\"width: 912px;\"></p><p>Now that I'm in my bucket's dashboard, I'll simply click Import / Export again to import my bucket.json file from Version I.&nbsp;</p><h2 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\"><span style=\"font-size: 24px;\">Importing bucket.json file</span></h2><p><img src=\"https://www.cosmicjs.com/uploads/d02cb020-99ec-11e6-8356-67a307c4f589-Screen%20Shot%202016-10-24%20at%208.17.20%20AM.png\" data-filename=\"https://www.cosmicjs.com/uploads/d02cb020-99ec-11e6-8356-67a307c4f589-Screen Shot 2016-10-24 at 8.17.20 AM.png\" style=\"width: 592px;\"></p><p>Click \"Yes, Import\" - don't worry about deleting current data and files as this is a brand new bucket in which we hadn't yet added any Objects or Object Types.&nbsp;</p><h2 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">Use Case</h2><p><img src=\"https://www.cosmicjs.com/uploads/970692d0-99f0-11e6-8103-8117827beac1-Screen%20Shot%202016-10-24%20at%208.47.45%20AM.png\" data-filename=\"https://www.cosmicjs.com/uploads/970692d0-99f0-11e6-8103-8117827beac1-Screen Shot 2016-10-24 at 8.47.45 AM.png\" style=\"width: 912px;\"><img src=\"https://www.cosmicjs.com/uploads/b1948440-99f0-11e6-8103-8117827beac1-Screen%20Shot%202016-10-24%20at%208.47.56%20AM.png\" data-filename=\"https://www.cosmicjs.com/uploads/b1948440-99f0-11e6-8103-8117827beac1-Screen Shot 2016-10-24 at 8.47.56 AM.png\" style=\"width: 912px;\"></p><p>I can easily manage all Versions of my bucket from the Cosmic Dashboard. I've just duplicated buckets of content, as well as provided myself a bucket.json backup of my web application. Developers and content editors can easily create new buckets of content while using best practices surrounding Version Control and Version Iteration.</p><p><a href=\"https://www.cosmicjs.com/\" target=\"_blank\">Cosmic&nbsp;</a>is an&nbsp;<a href=\"https://www.cosmicjs.com/\" target=\"_blank\">API-first cloud-based content management platform</a>&nbsp;that makes it easy to manage applications and content. If you have questions about the Cosmic API, please reach out to us on&nbsp;<a href=\"https://twitter.com/cosmic_js\" target=\"_blank\">Twitter</a>&nbsp;or&nbsp;<a href=\"https://www.cosmicjs.com/community\" target=\"_blank\">Slack</a>.&nbsp;</p><h2 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">Read More</h2><ul><li><a href=\"https://www.cosmicjs.com/blog/developer-spotlight-jon-bloomer\" target=\"_blank\">Developer Spotlight: Jon Bloomer</a></li><li><a href=\"https://www.cosmicjs.com/blog/sharing-resources-with-a-content-management-api\" target=\"_blank\">Sharing Resources With a Content Management API</a></li><li><a href=\"https://www.cosmicjs.com/blog/team-member-role-management-in-cosmic-js\" target=\"_blank\">Team Member Role Management in Cosmic</a></li><li><a href=\"https://www.cosmicjs.com/blog/how-to-build-a-cross-platform-blog-using-react-native-and-nodejs\">How to Build a Cross-Platform Blog Using React Native and Node.js</a></li><li><a href=\"https://www.cosmicjs.com/blog/cosmic-js-product-tour\">Cosmic Product Tour</a></li><li><a href=\"https://www.cosmicjs.com/blog/how-to-create-an-intuitive-website-navigation-menu\" target=\"_blank\">How to Create an Intuitive Website Navigation Menu</a></li><li><a href=\"https://www.cosmicjs.com/blog/repeater-metafields-now-available\" target=\"_blank\">Repeater Metafields Now Available</a>&nbsp;</li><li><a href=\"https://www.cosmicjs.com/blog/adding-webhooks-in-4-steps\">Adding Webhooks in 4 Easy Steps</a></li></ul><div><br></div>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>Version iterations, backups and duplicating buckets for the next stage in development is intuitive and easy.&nbsp;<br></p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"8901c9f0-99f2-11e6-8103-8117827beac1-Screen Shot 2016-10-24 at 8.46.43 AM.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/8901c9f0-99f2-11e6-8103-8117827beac1-Screen Shot 2016-10-24 at 8.46.43 AM.png","imgix_url":"https://imgix.cosmicjs.com/8901c9f0-99f2-11e6-8103-8117827beac1-Screen Shot 2016-10-24 at 8.46.43 AM.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-10-24T14:02:58.854Z","created_by":"5716b504e9c686d006000073","created":"2016-10-24T14:02:58.855Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>Version iterations, backups and duplicating buckets for the next stage in development is intuitive and easy.&nbsp;<br></p>","featured_image":{"url":"https://cdn.cosmicjs.com/8901c9f0-99f2-11e6-8103-8117827beac1-Screen Shot 2016-10-24 at 8.46.43 AM.png","imgix_url":"https://imgix.cosmicjs.com/8901c9f0-99f2-11e6-8103-8117827beac1-Screen Shot 2016-10-24 at 8.46.43 AM.png"}}},{"_id":"5806e64efc1225e216006331","order":170,"slug":"developer-spotlight-jon-bloomer","title":"Developer Spotlight: Jon Bloomer","content":"<p><img src=\"https://cosmicjs.imgix.net/fe55b380-95fe-11e6-b567-5deeb87c2285-tone-temple.jpg\" data-filename=\"https://www.cosmicjs.com/uploads/199eb0d0-95ad-11e6-b575-65f510fd43cc-Screen Shot 2016-10-18 at 10.35.08 PM.png\" style=\"width: 100%;\"><br></p><p>Our mission at Cosmic is to help teams build great websites and apps, and we love it when developers show us the awesome work they've done using the platform. &nbsp;In this spirit, we're introducing a new Spotlight series where we'll focus on a particular team or developer that is building something cool using Cosmic.<br><br>In this Spotlight we are focusing on Jon Bloomer, who recently launched the Cosmic-powered website for his business <a href=\"http://tonetemple.com.au/\" target=\"_blank\">Tone Temple</a>. &nbsp;Jon took some time to answer a few questions about his business, his development process and some of his favorite non-dev rockstars. &nbsp;And we totally glossed over the irony that his new website that showcases headless guitars is built using a <a href=\"https://www.cosmicjs.com\">headless CMS</a>.<br><br><b>Cosmic: Can you talk a little about ToneTemple the business?<br></b>Jon: Tone Temple is an Australian guitar store with a small selection of boutique brands that we truly believe in. We only stock unique and high end products such as Strandberg Guitars and Evil Angel custom pickups and we will be expanding our range of brands over the coming months. Our business is based on great customer service and a thorough knowledge and understanding of our products.</p><p><br><b>You have a beautiful brand new website which you mentioned is built using React and Redux. &nbsp;Can you talk about your choice to use these technologies?<br></b>I have been using React and Redux to build web applications for the past 10 months for 2 different corporations and enjoy the ability to build components in ES6/7 and have a simple way to save and retrieve the state of the application from a centralised store. I also like how easy it is to test React components using Expect and Enzyme.</p><p class=\"p2\"><br><b>Can you talk about why you decided to use an API to host your content instead of an installed CMS?<br></b>I have built many CMS based websites for clients over the past 6 years using Wordpress as I am proficient with PHP however I couldn't manage to build the solutions my clients wanted without installing additional plugins for custom fields, SEO, caching etc. When I saw Cosmic I realised I could think in terms of exactly what data I wanted to save rather than having to work out which already complex template objects I had to extend with additional fields. Removing the page and assets based architecture that traditional CMS's are built on really lets you focus on how to organise content to make it manageable to content editors&nbsp;and deliver it efficiently for app consumption.<br><br><b>Can you talk a little about your development and content management process and how Cosmic fits in?<br></b>With Tone Temple the data architecture was pretty simple, I decided I only really needed 2 Objects, Globals and Brands. Globals contains elements such as the site logo, footer text, and then some data for the homepage such as the main content and the videos at the bottom of the page which uses <a href=\"https://www.cosmicjs.com/blog/repeater-metafields-now-available\" target=\"_blank\">the new Repeater field</a>. Brands is setup with a set of metafields that allow me to upload 2 different size brand page header images (I may create a 3rd for mobile), optional header images for the homepage carousel which is coupled with a check box to set whether to display on homepage and finally the main content and another Repeater field for Videos. The Videos Repeater has just two fields, one for the video title and another for the YouTube ID. I then launch the YouTube player in an overlay on click using a custom React component that I built. Cosmic makes it very simple for me to add new brands with the ability to save as draft if the final content is not quite ready to show on the live site.&nbsp;</p><p class=\"p2\"><span class=\"s1\">I fetch the global and brand objects asynchronously on load and populate the Redux store which happens very fast. The content is usually rendering in under a second and the large images for the homepage carousel render by the time you hit 1.5s. I use Cosmic's built in <a href=\"https://www.cosmicjs.com/blog/imgix-image-processing-now-available-on-cosmic-js\" target=\"_blank\">Imgix integration</a> to easily create srcsets for images so that I can serve up smaller images depending on media queries which helps with the page load. The Imgix CDN ensures that the images are returned and rendered very quickly.&nbsp;<br></span><br><b>What app development technologies are you excited about using now or in the future?<br></b>I am excited about the possibility of using GraphQL &amp; Relay in the near future and might be something I will start learning soon and update Tone Temple to use.<br><br><b>Who are some of your favorite guitarists? &nbsp;Are you a musician yourself?<br></b>I am indeed a musician, I studied at Birmingham Conservatoire in the UK and have BMus(hons) degree. I also ran <a href=\"http://guitarnoize.com/\" style=\"background-color: rgb(255, 255, 255);\"><span class=\"s2\">GuitarNoize.com</span></a> for 9 years until very recently where I have teamed up with an amazing business partner to launch Tone Temple. I have too many favourite guitar players to mention, I have very varied musical tastes from Blues to Metal. Joe Satriani has always been my absolute favourite guitar player but one of my current favourite guitarists and composers is David Maxim Micic.</p><p class=\"p2\"><br></p><p class=\"p2\">Check out the&nbsp;<a href=\"http://tonetemple.com.au/\" target=\"_blank\" style=\"background-color: rgb(255, 255, 255);\">Tone Temple&nbsp;website</a>,&nbsp;you can <a href=\"https://twitter.com/jonbloomer\" target=\"_blank\" style=\"background-color: rgb(255, 255, 255);\">follow Jon on Twitter</a> and check out more of his development work on <a href=\"https://github.com/freaksauce\" target=\"_blank\" style=\"background-color: rgb(255, 255, 255);\">his GitHub page</a>.</p><p class=\"p1\"><span class=\"s1\"></span></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>In this Spotlight we are focusing on Jon Bloomer, who recently launched the Cosmic-powered website for his business&nbsp;<a href=\"http://tonetemple.com.au/\" target=\"_blank\">Tone Temple</a>. &nbsp;Jon took some time to answer a few questions about his business, his development process and some of his favorite non-dev rockstars.<br></p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"fe55b380-95fe-11e6-b567-5deeb87c2285-tone-temple.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/fe55b380-95fe-11e6-b567-5deeb87c2285-tone-temple.jpg","imgix_url":"https://imgix.cosmicjs.com/fe55b380-95fe-11e6-b567-5deeb87c2285-tone-temple.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-10-19T03:19:42.237Z","created_by":"5357ef811693be2118000001","created":"2016-10-19T03:19:42.237Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>In this Spotlight we are focusing on Jon Bloomer, who recently launched the Cosmic-powered website for his business&nbsp;<a href=\"http://tonetemple.com.au/\" target=\"_blank\">Tone Temple</a>. &nbsp;Jon took some time to answer a few questions about his business, his development process and some of his favorite non-dev rockstars.<br></p>","featured_image":{"url":"https://cdn.cosmicjs.com/fe55b380-95fe-11e6-b567-5deeb87c2285-tone-temple.jpg","imgix_url":"https://imgix.cosmicjs.com/fe55b380-95fe-11e6-b567-5deeb87c2285-tone-temple.jpg"}}},{"_id":"58061ecdfc1225e2160049c9","order":171,"slug":"sharing-resources-with-a-content-management-api","title":"Sharing Resources With a Content Management API","content":"<p style=\"text-align: center; \"><img src=\"https://www.cosmicjs.com/uploads/e06d50b0-9533-11e6-b575-65f510fd43cc-shutterstock_117629761.jpg\" data-filename=\"https://www.cosmicjs.com/uploads/e06d50b0-9533-11e6-b575-65f510fd43cc-shutterstock_117629761.jpg\" style=\"width: 50%;\"><br></p><h3>The Problem</h3><p>I worked at a digital agency for several years with <a href=\"https://www.cosmicjs.com/about\" target=\"_blank\">my co-founder</a> of <a href=\"https://www.cosmicjs.com/\" target=\"_blank\">Cosmic</a>. We built numerous web applications for a range of clients, usually starting with static PSD's that we would hand off to a front end developer for HTML / CSS application as well as responsiveness on desktop, laptop, tablet and mobile. </p><p>At this stage in the process we were typically using stock photography or images pulled from Google or Pinterest, dependent on whether or not we had created mood boards prior to the development phase. At this point, the client would have finished the monumental \"DropBox Website Folder.\" This folder would systematically lay out the format for the website based on sitemap or existing comps, coupled with the media, images and content the client would want to see present on launch day. </p><p>Far too often the digital team was unclear on which media file to place where, either due to client mislabeling, agency miscommunication or a simple lack of updates to the media files within the DropBox account. All too often all content and images would be accounted for, only to realize that the sitemap had grown because someone forgot (insert page title here).</p><h3>The Situation</h3><p>Legacy systems like WordPress make uploading media and images difficult and easy to mess up for a junior content editor. The curation and migration of content from a DropBox to a WordPress usually makes a lengthy stop on the agency and / or client's internal servers for additional review, editing and organization. </p><p>In today's digital age where teams are working on real-time applications that require publishing content at a moment's notice, this system is obviously bloated and flawed. What is stopping agencies from combining DropBox with their CMS? What prevents them from extending a link to a shared media folder within the actual Content Management System itself, rather than employing a third-party storage system to store files until they are ready to be mislabeled, mishandled and stored + published within another system? </p><h3>The Solution </h3><p>The answer is letting the same API that delivers your content to all web-connected devices also store the media you need to publish. <a href=\"https://www.cosmicjs.com\" target=\"_blank\">Cosmic</a> is an <a href=\"https://www.cosmicjs.com\" target=\"_blank\">API-first content management platform</a> that is powered by its <a href=\"https://www.cosmicjs.com\" target=\"_blank\">JSON API,</a> which delivers content globally to any web-connected device. This gives you the freedom to build your application using any programming language and allows for easier scaling within your development team. Read more about how <a href=\"https://www.cosmicjs.com/blog/the-cosmic-stack\" target=\"_blank\">The Cosmic Stack</a> is simplifying the content management process through a <a href=\"https://www.cosmicjs.com\" target=\"_blank\">content management API.</a></p><p><img src=\"https://www.cosmicjs.com/uploads/14d0c390-9535-11e6-b575-65f510fd43cc-Cosmic Stack.jpg\" data-filename=\"https://www.cosmicjs.com/uploads/14d0c390-9535-11e6-b575-65f510fd43cc-Cosmic Stack.jpg\" style=\"width: 912px;\"><br></p><p>To begin storing and categorizing resources and media, set up a new bucket for your new web application and invite users to your bucket for content storage and curation. Here's how...</p><h3 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\"><a href=\"https://www.cosmicjs.com/signup\" target=\"_blank\">Create Your Free Account </a></h3><h3 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\"><img src=\"https://www.cosmicjs.com/uploads/1857efc0-948b-11e6-b575-65f510fd43cc-Screen%20Shot%202016-10-17%20at%2011.59.14%20AM.png\" data-filename=\"https://www.cosmicjs.com/uploads/1857efc0-948b-11e6-b575-65f510fd43cc-Screen Shot 2016-10-17 at 11.59.14 AM.png\" style=\"width: 455.875px;\"></h3><p><span style=\"color: inherit; font-family: inherit; font-size: 24px;\"><a href=\"https://www.cosmicjs.com/login\" target=\"_blank\">Login</a></span><br></p><p><img src=\"https://www.cosmicjs.com/uploads/d44daab0-94b5-11e6-b575-65f510fd43cc-Screen%20Shot%202016-10-17%20at%205.05.17%20PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/d44daab0-94b5-11e6-b575-65f510fd43cc-Screen Shot 2016-10-17 at 5.05.17 PM.png\" style=\"width: 424px;\"><br></p><h3 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\"><a href=\"https://www.cosmicjs.com/add-bucket\" target=\"_blank\">Add a New Bucket</a></h3><p><img src=\"https://www.cosmicjs.com/uploads/c38f3980-948a-11e6-b575-65f510fd43cc-Screen%20Shot%202016-10-17%20at%2011.56.56%20AM.png\" data-filename=\"https://www.cosmicjs.com/uploads/c38f3980-948a-11e6-b575-65f510fd43cc-Screen Shot 2016-10-17 at 11.56.56 AM.png\" style=\"width: 192.46753246753246px; height: 65px;\"></p><h3 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">Add a New User</h3><p><img src=\"https://www.cosmicjs.com/uploads/da770650-948a-11e6-b575-65f510fd43cc-Screen%20Shot%202016-10-17%20at%2011.57.42%20AM.png\" data-filename=\"https://www.cosmicjs.com/uploads/da770650-948a-11e6-b575-65f510fd43cc-Screen Shot 2016-10-17 at 11.57.42 AM.png\" style=\"width: 186.75px; height: 67.16447368421053px;\"></p><h3 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">Adding a New User to Your Bucket</h3><p><img src=\"https://www.cosmicjs.com/uploads/f7e70910-948a-11e6-b575-65f510fd43cc-Screen%20Shot%202016-10-17%20at%2011.52.27%20AM.png\" data-filename=\"https://www.cosmicjs.com/uploads/f7e70910-948a-11e6-b575-65f510fd43cc-Screen Shot 2016-10-17 at 11.52.27 AM.png\" style=\"width: 592px;\"></p><p>Unlocking editor access to the new user (which could be a client or the content team) is sufficient as that user can add and group media and shared resources within media folders for eventual publishing through the <a href=\"https://www.cosmicjs.com/\" target=\"_blank\">Cosmic API</a>.</p><h3 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">Adding Media Folders</h3><p><img src=\"https://www.cosmicjs.com/uploads/14964550-94b6-11e6-b575-65f510fd43cc-Screen%20Shot%202016-10-17%20at%205.06.18%20PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/14964550-94b6-11e6-b575-65f510fd43cc-Screen Shot 2016-10-17 at 5.06.18 PM.png\" style=\"width: 25%;\"></p><p>Click \"Add media folder\"</p><p><br></p><p><img src=\"https://www.cosmicjs.com/uploads/3bf353e0-94b6-11e6-b575-65f510fd43cc-Screen%20Shot%202016-10-17%20at%205.06.48%20PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/3bf353e0-94b6-11e6-b575-65f510fd43cc-Screen Shot 2016-10-17 at 5.06.48 PM.png\" style=\"width: 587px;\"></p><p>Save your new media folder and begin adding files and media to your media folder so that your clients and team can access it later. </p><p><img src=\"https://www.cosmicjs.com/uploads/43ada130-94b6-11e6-b575-65f510fd43cc-Screen%20Shot%202016-10-17%20at%205.07.04%20PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/43ada130-94b6-11e6-b575-65f510fd43cc-Screen Shot 2016-10-17 at 5.07.04 PM.png\" style=\"width: 912px;\"></p><p>I created an example web application so I can demonstrate how I cataloged my example media within the Cosmic Dashboard. In my Global Media view, I can see all of the example images I have uploaded.</p><p><img src=\"https://www.cosmicjs.com/uploads/135df6f0-94b7-11e6-b575-65f510fd43cc-Screen%20Shot%202016-10-17%20at%205.13.08%20PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/135df6f0-94b7-11e6-b575-65f510fd43cc-Screen Shot 2016-10-17 at 5.13.08 PM.png\" style=\"width: 912px;\"></p><p>I have separated my media into three folders: Brand Standards | Marketing Banners | Internal Resources. I can filter between media folders at my leisure, using them as separate client content folders, internal team documents, shared resources, etc. </p><p><img src=\"https://www.cosmicjs.com/uploads/5fbc97e0-94b7-11e6-b575-65f510fd43cc-Screen%20Shot%202016-10-17%20at%205.15.01%20PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/5fbc97e0-94b7-11e6-b575-65f510fd43cc-Screen Shot 2016-10-17 at 5.15.01 PM.png\" style=\"width: 912px;\"></p><p>This is a quick example of a down and dirty trick with an <a href=\"https://www.cosmicjs.com\" target=\"_blank\">API-first cloud-based Content Management Platform</a>. When your team is ready to start development, assets have already been added to your bucket and you can immediately begin prototyping your application with the uploaded resources.</p><p><a href=\"https://www.cosmicjs.com/\" target=\"_blank\">Cosmic </a>is an API-first cloud-based content management platform that makes it easy to manage applications and content. If you have questions about the Cosmic API, please reach out to us on <a href=\"https://twitter.com/cosmic_js\" target=\"_blank\">Twitter</a> or <a href=\"https://www.cosmicjs.com/community\" target=\"_blank\">Slack</a>. </p><h3 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">Read More</h3><p><a href=\"https://www.cosmicjs.com/blog/team-member-role-management-in-cosmic-js\" target=\"_blank\">Team Member Role Management in Cosmic</a></p><p><a href=\"https://www.cosmicjs.com/blog/how-to-build-a-cross-platform-blog-using-react-native-and-nodejs\">How to Build a Cross-Platform Blog Using React Native and Node.js</a></p><p><a href=\"https://www.cosmicjs.com/blog/cosmic-js-product-tour\">Cosmic Product Tour</a></p><p><a href=\"https://www.cosmicjs.com/blog/how-to-create-an-intuitive-website-navigation-menu\" target=\"_blank\">How to Create an Intuitive Website Navigation Menu</a></p><p><a href=\"https://www.cosmicjs.com/blog/repeater-metafields-now-available\" target=\"_blank\">Repeater Metafields Now Available</a> <br></p><p><a href=\"https://www.cosmicjs.com/blog/adding-webhooks-in-4-steps\">Adding Webhooks in 4 Easy Steps</a></p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>The same API that delivers your content to all web-connected devices can also store the media you need to publish.<br></p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"e06d50b0-9533-11e6-b575-65f510fd43cc-shutterstock_117629761.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e06d50b0-9533-11e6-b575-65f510fd43cc-shutterstock_117629761.jpg","imgix_url":"https://imgix.cosmicjs.com/e06d50b0-9533-11e6-b575-65f510fd43cc-shutterstock_117629761.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-10-18T13:08:29.025Z","created_by":"5716b504e9c686d006000073","created":"2016-10-18T13:08:29.025Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>The same API that delivers your content to all web-connected devices can also store the media you need to publish.<br></p>","featured_image":{"url":"https://cdn.cosmicjs.com/e06d50b0-9533-11e6-b575-65f510fd43cc-shutterstock_117629761.jpg","imgix_url":"https://imgix.cosmicjs.com/e06d50b0-9533-11e6-b575-65f510fd43cc-shutterstock_117629761.jpg"}}},{"_id":"5800f0417f9a5a0b69002471","order":172,"slug":"team-member-role-management-in-cosmic-js","title":"Team Member Role Management in Cosmic","content":"<p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\">Building websites and applications with the Cosmic API is simple and intuitive for teams through role permissions. Cosmic makes it easy to add users and clarify their roles in the system. Teams can assign three role types within the Cosmic CMS Dashboard: Admin, Developer, Editor. In this blog we will cover the following User Role items:</span></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\"><br></span></p><ol><li style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\">How to Add a User to Your App </span></li><li style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\">How to Edit a User Role</span></li><li style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\">Invite Users to Your Team's Bucket</span></li><li style=\"margin-bottom: 0px; line-height: normal;\">Getting Access to Your Team's Bucket </li><li style=\"margin-bottom: 0px; line-height: normal;\">Admin User Dashboard</li><li style=\"margin-bottom: 0px; line-height: normal;\">Developer User Dashboard</li><li style=\"margin-bottom: 0px; line-height: normal;\">Editor User Dashboard</li><li style=\"margin-bottom: 0px; line-height: normal;\">Dashboard Analytics - Team</li><li style=\"margin-bottom: 0px; line-height: normal;\">Adding | Editing Objects</li></ol><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\"><br></span></p><h3><span style=\"-webkit-font-kerning: none;\">Add a User  </span></h3><p style=\"margin-bottom: 0px; line-height: normal;\"><img src=\"https://www.cosmicjs.com/uploads/30a2bc60-90c4-11e6-829c-87a057acd859-Screen%20Shot%202016-10-12%20at%204.37.57%20PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/30a2bc60-90c4-11e6-829c-87a057acd859-Screen Shot 2016-10-12 at 4.37.57 PM.png\" style=\"width: 583px;\"><span style=\"-webkit-font-kerning: none;\"><br></span></p><h3>Edit a User's Role </h3><p style=\"margin-bottom: 0px; line-height: normal;\"><img src=\"https://www.cosmicjs.com/uploads/b06e4d20-90c3-11e6-829c-87a057acd859-Screen%20Shot%202016-10-12%20at%204.13.37%20PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/b06e4d20-90c3-11e6-829c-87a057acd859-Screen Shot 2016-10-12 at 4.13.37 PM.png\" style=\"width: 592px;\"><span style=\"-webkit-font-kerning: none;\"><br></span></p><h3><span style=\"-webkit-font-kerning: none;\">Invite Users to Your Team's Bucket </span></h3><p style=\"margin-bottom: 0px; line-height: normal;\"><img src=\"https://www.cosmicjs.com/uploads/830cc220-90c4-11e6-829c-87a057acd859-Screen%20Shot%202016-10-12%20at%204.18.08%20PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/830cc220-90c4-11e6-829c-87a057acd859-Screen Shot 2016-10-12 at 4.18.08 PM.png\" style=\"width: 576px;\"><span style=\"-webkit-font-kerning: none;\"><br></span></p><h3>Getting Access to Your Team's Bucket </h3><h3><img src=\"https://www.cosmicjs.com/uploads/8b2ac860-90c6-11e6-829c-87a057acd859-Screen%20Shot%202016-10-12%20at%204.53.07%20PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/8b2ac860-90c6-11e6-829c-87a057acd859-Screen Shot 2016-10-12 at 4.53.07 PM.png\" style=\"width: 516px;\"></h3><p><br></p><p>Cosmic delivers the tools needed for each user role and nothing more. I manage my own app on Cosmic and went through the process of inviting myself in 3 different role types to my own bucket of content. I've provided screencaptures of the Cosmic Dashboard in each User Role's View. </p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\"><br></span></p><h3><span style=\"-webkit-font-kerning: none;\">Admin User View</span></h3><p style=\"margin-bottom: 0px; line-height: normal;\"><img src=\"https://www.cosmicjs.com/uploads/cbc90f00-90c4-11e6-829c-87a057acd859-Screen%20Shot%202016-10-12%20at%204.41.37%20PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/cbc90f00-90c4-11e6-829c-87a057acd859-Screen Shot 2016-10-12 at 4.41.37 PM.png\" style=\"width: 912px;\"><span style=\"-webkit-font-kerning: none;\"><br></span></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\"><br></span></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\">The admin has access to settings, users and developer features. </span></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\"><br></span></p><h3><span style=\"-webkit-font-kerning: none;\">Developer User View </span></h3><p style=\"margin-bottom: 0px; line-height: normal;\"><img src=\"https://www.cosmicjs.com/uploads/5acc1f70-90c6-11e6-829c-87a057acd859-Screen%20Shot%202016-10-12%20at%204.53.29%20PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/5acc1f70-90c6-11e6-829c-87a057acd859-Screen Shot 2016-10-12 at 4.53.29 PM.png\" style=\"width: 912px;\"><span style=\"-webkit-font-kerning: none;\"><br></span></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\"><br></span></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\">The developer has access to developer features and editor features. </span></p><p style=\"margin-bottom: 0px; line-height: normal; min-height: 17px;\"><span style=\"-webkit-font-kerning: none;\"></span><br></p><h3>Editor User View</h3><p><img src=\"https://www.cosmicjs.com/uploads/21a7de40-90c7-11e6-829c-87a057acd859-Screen%20Shot%202016-10-12%20at%204.58.53%20PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/21a7de40-90c7-11e6-829c-87a057acd859-Screen Shot 2016-10-12 at 4.58.53 PM.png\" style=\"width: 912px;\"></p><p>The editor can add, edit and delete content with developer features hidden.<br></p><p style=\"margin-bottom: 0px; line-height: normal;\"><br></p><h3>Team Dashboard Analytics</h3><p style=\"margin-bottom: 0px; line-height: normal;\"><img src=\"https://www.cosmicjs.com/uploads/ab19ca50-90c5-11e6-829c-87a057acd859-Screen%20Shot%202016-10-12%20at%204.48.06%20PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/ab19ca50-90c5-11e6-829c-87a057acd859-Screen Shot 2016-10-12 at 4.48.06 PM.png\" style=\"width: 912px;\"></p><p style=\"margin-bottom: 0px; line-height: normal;\"><br></p><p style=\"margin-bottom: 0px; line-height: normal;\">Track all of your team's apps with a simple Dashboard that provides information like \"Last Modified\", users, app owners as well as quick links over to each app's Dashboard.</p><p style=\"margin-bottom: 0px; line-height: normal;\"></p><p style=\"margin-bottom: 0px; line-height: normal;\"><br></p><h3>Adding | Editing Object </h3><p style=\"margin-bottom: 0px; line-height: normal;\"><img src=\"https://www.cosmicjs.com/uploads/7c11d060-90c8-11e6-829c-87a057acd859-Screen%20Shot%202016-10-12%20at%205.05.54%20PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/7c11d060-90c8-11e6-829c-87a057acd859-Screen Shot 2016-10-12 at 5.05.54 PM.png\" style=\"width: 286px;\"><br></p><p style=\"margin-bottom: 0px; line-height: normal;\"><br></p><p style=\"margin-bottom: 0px; line-height: normal;\">When drafting a new object or object type, users are provided handy information on last modified, timestamp and draft or published status. </p><p style=\"margin-bottom: 0px; line-height: normal;\"><br></p><p style=\"margin-bottom: 0px; line-height: normal;\">Teams are free to build slick apps and websites while creating content for them simultaneously. Developers can program code that is decoupled from the content that other team members put together, allowing the team to work content-first. </p><p style=\"margin-bottom: 0px; line-height: normal;\"><br></p><p style=\"margin-bottom: 0px; line-height: normal;\">If you have any questions about managing content in <a href=\"https://www.cosmicjs.com/\" target=\"_blank\">Cosmic</a> with your team, feel free to reach out to us on <a href=\"https://twitter.com/cosmic_js\" target=\"_blank\">Twitter</a> or in our <a href=\"https://www.cosmicjs.com/community\">Slack Community</a>.</p><p style=\"margin-bottom: 0px; line-height: normal;\"><br></p><h3>Read More</h3><p><a href=\"https://www.cosmicjs.com/blog/how-to-build-a-cross-platform-blog-using-react-native-and-nodejs\">How to Build a Cross-Platform Blog Using React Native and Node.js</a></p><p><a href=\"https://www.cosmicjs.com/blog/cosmic-js-product-tour\">Cosmic Product Tour</a><br></p><p><a href=\"https://www.cosmicjs.com/blog/repeater-metafields-now-available\" target=\"_blank\">Repeater Metafields Now Available</a> </p><p><a href=\"https://www.cosmicjs.com/blog/adding-webhooks-in-4-steps\">Adding Webhooks in 4 Easy Steps</a></p><p style=\"margin-bottom: 0px; line-height: normal;\"><br></p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>Building websites and applications with the Cosmic API is simple and intuitive for teams through role permissions.<br></p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"c166c2d0-960c-11e6-8afd-2319bb61fbf1-users.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/c166c2d0-960c-11e6-8afd-2319bb61fbf1-users.jpg","imgix_url":"https://imgix.cosmicjs.com/c166c2d0-960c-11e6-8afd-2319bb61fbf1-users.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-10-14T14:48:33.514Z","created_by":"5716b504e9c686d006000073","created":"2016-10-14T14:48:33.514Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>Building websites and applications with the Cosmic API is simple and intuitive for teams through role permissions.<br></p>","featured_image":{"url":"https://cdn.cosmicjs.com/c166c2d0-960c-11e6-8afd-2319bb61fbf1-users.jpg","imgix_url":"https://imgix.cosmicjs.com/c166c2d0-960c-11e6-8afd-2319bb61fbf1-users.jpg"}}},{"_id":"57ff960b59d898cf62000d89","order":173,"slug":"build-industry-tailored-apps-using-nodejs-reactjs-angularjs-bootstrap","title":"Build Industry-Tailored Apps using Node.js, ReactJS, AngularJS & Bootstrap","content":"<p><a href=\"https://www.cosmicjs.com/\" target=\"_blank\">Cosmic</a> makes it easy to build slick apps and websites for any vertical or industry. Cosmic has stored existing codebases on <a href=\"https://github.com/cosmicjs\" target=\"_blank\">GitHub</a> for everything from a standard <a href=\"https://github.com/cosmicjs/nodejs-website-boilerplate\" target=\"_blank\">Node.js boilerplate</a> to <a href=\"https://github.com/cosmicjs/cross-platform-blog\" target=\"_blank\">cross-platform iOS &amp; Android React Native codebases</a>. Below I detail 5 professional app templates that document their programming language, general layout, a demo &amp; the ability to view the code base.&nbsp;</p><h3 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">Real Estate App</h3><p style=\"margin-bottom: 0px; line-height: normal;\"><img src=\"https://www.cosmicjs.com/uploads/c90270c0-90cb-11e6-857a-cfd761bfe867-Real%20Estate.png\" data-filename=\"https://www.cosmicjs.com/uploads/c90270c0-90cb-11e6-857a-cfd761bfe867-Real Estate.png\" style=\"width: 912px;\" class=\"fr-dii fr-draggable\"><span style=\"-webkit-font-kerning: none;\"><br></span></p><h4 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">Bootstrap | Node.js | Multi-page App Template</h4><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\"><br></span></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\">This real estate website satisfies some common website requirements including dynamic pages, listing management, blog articles, author management, SEO ability, contact form and website search.</span></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\"><br></span></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\">View demo <a href=\"http://real-estate.cosmicapp.co/\" target=\"_blank\">here</a>.&nbsp;</span></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\">View codebase on <a href=\"https://github.com/cosmicjs/cosmicapp-real-estate\" target=\"_blank\">GitHub</a>.</span></p><h3 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">Photography App</h3><p style=\"margin-bottom: 0px; line-height: normal;\"><img src=\"https://www.cosmicjs.com/uploads/d3969200-90cb-11e6-857a-cfd761bfe867-Photography.png\" data-filename=\"https://www.cosmicjs.com/uploads/d3969200-90cb-11e6-857a-cfd761bfe867-Photography.png\" style=\"width: 912px;\" class=\"fr-dii fr-draggable\"><span style=\"-webkit-font-kerning: none;\"><br></span></p><h4 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">Bootstrap | Node.js | Multi-Page App Template</h4><p style=\"margin-bottom: 0px; line-height: normal;\"><br></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\">This slick photography website is built using Node.js on the server and Bootstrap on the frontend. &nbsp;It is fully responsive down to mobile, includes a contact form and a gallery section powered by <a href=\"http://photoswipe.com/\"><span style=\"-webkit-font-kerning: none;\">Photoswipe</span></a>.</span></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\"><br></span></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\">View demo <a href=\"http://photography-website.cosmicapp.co/\" target=\"_blank\">here</a>.&nbsp;</span></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\">View codebase on <a href=\"https://github.com/cosmicjs/cosmicapp-photography-website\" target=\"_blank\">GitHub</a>.</span></p><h3 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">Healthcare App</h3><p style=\"margin-bottom: 0px; line-height: normal; min-height: 14px;\"><img src=\"https://www.cosmicjs.com/uploads/dd366830-90cb-11e6-857a-cfd761bfe867-Healthcare.png\" data-filename=\"https://www.cosmicjs.com/uploads/dd366830-90cb-11e6-857a-cfd761bfe867-Healthcare.png\" style=\"width: 912px;\" class=\"fr-dii fr-draggable\"><br></p><h4 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">Node.js | Bootstrap | Multi-Page App Template</h4><p style=\"margin-bottom: 0px; line-height: normal;\"><br></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\">Website built using the <a href=\"https://github.com/cosmicjs/nodejs-website-boilerplate\"><span style=\"-webkit-font-kerning: none;\">Node.js Website Boilerplate</span></a>. &nbsp;Fully responsive down to mobile, SEO ready, includes a contact form and full site search.</span></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\"><br></span></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\">View demo <a href=\"http://medical-professional.cosmicapp.co/\" target=\"_blank\">here</a>.&nbsp;</span></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\">View codebase on <a href=\"https://github.com/cosmicjs/nodejs-website-boilerplate\" target=\"_blank\">GitHub</a>.</span></p><h3 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">Roofing App</h3><p style=\"margin-bottom: 0px; line-height: normal; min-height: 14px;\"><img src=\"https://www.cosmicjs.com/uploads/e65aa5c0-90cb-11e6-857a-cfd761bfe867-Roofing.png\" data-filename=\"https://www.cosmicjs.com/uploads/e65aa5c0-90cb-11e6-857a-cfd761bfe867-Roofing.png\" style=\"width: 912px;\" class=\"fr-dii fr-draggable\"><br></p><h4 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">Node.js | Bootstrap | Multi-page App Template</h4><p style=\"margin-bottom: 0px; line-height: normal;\"><br></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\">Website built using the <a href=\"https://github.com/cosmicjs/nodejs-website-boilerplate\"><span style=\"-webkit-font-kerning: none;\">Node.js Website Boilerplate</span></a>. &nbsp;Fully responsive down to mobile, SEO ready, includes a contact form and full site search.</span></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\"><br></span></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\">View demo <a href=\"http://roofing-site.cosmicapp.co/\" target=\"_blank\">here</a>.&nbsp;</span></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"-webkit-font-kerning: none;\">View codebase on <a href=\"https://github.com/cosmicjs/cosmicapp-roofing-site\" target=\"_blank\">GitHub</a>.</span></p><h3 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">Wedding App</h3><p style=\"margin-bottom: 0px; line-height: normal;\"><img src=\"https://www.cosmicjs.com/uploads/4a534c80-90cc-11e6-857a-cfd761bfe867-Wedding.png\" data-filename=\"https://www.cosmicjs.com/uploads/4a534c80-90cc-11e6-857a-cfd761bfe867-Wedding.png\" style=\"width: 912px;\" class=\"fr-dii fr-draggable\"></p><h4 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">AngularJS | Single-Page App Template</h4><p style=\"margin-bottom: 0px; line-height: normal;\"><br></p><p style=\"margin-bottom: 0px; line-height: normal;\">This Angular JS single page wedding website makes it easy to edit content, update photos and plan for the big day.</p><p style=\"margin-bottom: 0px; line-height: normal;\"><br></p><p style=\"margin-bottom: 0px; line-height: normal;\">View demo <a href=\"http://wedding-site.cosmicapp.co/\" target=\"_blank\">here</a>.&nbsp;</p><p style=\"margin-bottom: 0px; line-height: normal;\">View codebase on <a href=\"https://github.com/cosmicjs/cosmicapp-wedding-site\" target=\"_blank\">GitHub</a>.</p><p style=\"margin-bottom: 0px; line-height: normal;\"><br></p><p style=\"margin-bottom: 0px; line-height: normal;\">If you have any questions about building industry-tailored apps, feel free to reach out to us on <a href=\"https://twitter.com/cosmic_js\" target=\"_blank\">Twitter</a> or in our <a href=\"https://www.cosmicjs.com/community\">Slack Community</a>.</p><p style=\"margin-bottom: 0px; line-height: normal;\"><br></p><h3 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">Read More</h3><p><a href=\"https://www.cosmicjs.com/blog/how-to-build-a-cross-platform-blog-using-react-native-and-nodejs\">How to Build a Cross-Platform Blog Using React Native and Node.js</a></p><p><a href=\"https://www.cosmicjs.com/blog/cosmic-js-product-tour\">Cosmic Product Tour</a></p><p><a href=\"https://www.cosmicjs.com/blog/repeater-metafields-now-available\" target=\"_blank\">Repeater Metafields Now Available</a>&nbsp;</p><p><a href=\"https://www.cosmicjs.com/blog/adding-webhooks-in-4-steps\">Adding Webhooks in 4 Easy Steps</a></p><div><br></div>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p><a href=\"https://www.cosmicjs.com/\" target=\"_blank\">Cosmic</a> makes it easy to build slick apps and websites for any vertical or industry.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"26ef48d0-d5bd-11e6-9871-5f155e0fcae7-1*XpYzOtlHYkuawHTexYFyug.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/26ef48d0-d5bd-11e6-9871-5f155e0fcae7-1*XpYzOtlHYkuawHTexYFyug.png","imgix_url":"https://imgix.cosmicjs.com/26ef48d0-d5bd-11e6-9871-5f155e0fcae7-1*XpYzOtlHYkuawHTexYFyug.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-10-13T14:11:23.207Z","created_by":"5716b504e9c686d006000073","created":"2016-10-13T14:11:23.207Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p><a href=\"https://www.cosmicjs.com/\" target=\"_blank\">Cosmic</a> makes it easy to build slick apps and websites for any vertical or industry.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/26ef48d0-d5bd-11e6-9871-5f155e0fcae7-1*XpYzOtlHYkuawHTexYFyug.png","imgix_url":"https://imgix.cosmicjs.com/26ef48d0-d5bd-11e6-9871-5f155e0fcae7-1*XpYzOtlHYkuawHTexYFyug.png"}}},{"_id":"57fc0e1f94661f8a3b0002a3","order":174,"slug":"repeater-metafields-now-available","title":"Repeater Metafields Now Available","content":"<p>We&#39;re excited to announce a new tool that makes it even easier to build content for your websites and apps using <a data-cke-saved-href=\"https://www.cosmicjs.com\" href=\"https://www.cosmicjs.com\" target=\"_blank\">Cosmic</a>. &nbsp;The Repeater Metafield allows you to create groups of Metafields with the ability to &ldquo;repeat&rdquo; the group. &nbsp;This makes it easy to manage blocks of content in an intuitive and scalable way. &nbsp;Here&#39;s how they work...</p><p>Let&#39;s say for example we would like the ability to add multiple testimonials to a page. &nbsp;This is a pretty common use-case and usually involves a few content pieces: Quote, Cite and maybe an Image. &nbsp;To create our Repeater Metafield follow these steps:</p><p>1. Go to the object where the Repeater will be added and click &quot;Add Metafield&quot;</p><p><img src=\"https://www.cosmicjs.com/uploads/ba0a8be0-8f39-11e6-b735-357b44db1c2d-Screen Shot 2016-10-10 at 5.34.24 PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/ba0a8be0-8f39-11e6-b735-357b44db1c2d-Screen Shot 2016-10-10 at 5.34.24 PM.png\" style=\"width: 1084px;\" class=\"fr-dii fr-draggable\"><br>2. Click the Repeater icon</p><p><img src=\"https://www.cosmicjs.com/uploads/aa837020-8f38-11e6-b735-357b44db1c2d-Screen Shot 2016-10-10 at 5.26.48 PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/aa837020-8f38-11e6-b735-357b44db1c2d-Screen Shot 2016-10-10 at 5.26.48 PM.png\" style=\"width: 280.798px; height: 230px;\" class=\"fr-dii fr-draggable\"><br>3. Add a title and key, then click &quot;Add Repeater Metafield&quot;</p><p><img src=\"https://www.cosmicjs.com/uploads/1feb5060-8f36-11e6-b735-357b44db1c2d-Screen Shot 2016-10-10 at 5.08.21 PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/1feb5060-8f36-11e6-b735-357b44db1c2d-Screen Shot 2016-10-10 at 5.08.21 PM.png\" style=\"width: 499.216px; height: 303px;\" class=\"fr-dii fr-draggable\"><br></p><p>4. Add the Quote Metafield (Text Area), Cite Metafield (Text) and Image Metafield (Image) and click Save.<br><img src=\"https://www.cosmicjs.com/uploads/7a1b3c30-8f36-11e6-b735-357b44db1c2d-Screen Shot 2016-10-10 at 5.10.06 PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/7a1b3c30-8f36-11e6-b735-357b44db1c2d-Screen Shot 2016-10-10 at 5.10.06 PM.png\" style=\"width: 491.096px; height: 1174px;\" class=\"fr-dii fr-draggable\"></p><p>Now add your first Repeater by adding content to the fields:</p><p><img src=\"https://www.cosmicjs.com/uploads/efa77b10-8f38-11e6-b735-357b44db1c2d-Screen Shot 2016-10-10 at 5.28.38 PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/efa77b10-8f38-11e6-b735-357b44db1c2d-Screen Shot 2016-10-10 at 5.28.38 PM.png\" style=\"width: 100%;\" class=\"fr-dii fr-draggable\"><br></p><p>Now you are ready to add repeating Metafields. &nbsp;To add another group of Metafields, just click &quot;Add Repeating Item&quot; and another block of Quote, Cite and Image will be available.</p><p>Repeater Metafields is another way that we are making content creation intuitive and highly scalable for your websites and applications. &nbsp;If you have any questions about Repeater Metafields, feel free to reach out to us on <a href=\"https://twitter.com/cosmic_js\" target=\"_blank\">Twitter</a> or in our <a href=\"https://www.cosmicjs.com/community\">Slack Community</a>.</p><h3>Read More</h3><p><a href=\"https://www.cosmicjs.com/blog/how-to-build-a-cross-platform-blog-using-react-native-and-nodejs\">How to Build a Cross-Platform Blog Using React Native and Node.js</a></p><p><a href=\"https://www.cosmicjs.com/blog/cosmic-js-product-tour\">Cosmic Product Tour</a></p><p><a href=\"https://www.cosmicjs.com/blog/adding-webhooks-in-4-steps\">Adding Webhooks in 4 Easy Steps</a></p><p><a href=\"https://www.cosmicjs.com/blog/cosmic-js-user-roles-and-permissions\">Cosmic User Roles and Permissions</a></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p><span style=\"font-size: 14px;\">The Repeater Metafield allows you to group Metafields into groups with the ability to &ldquo;repeat&rdquo; the group.&nbsp;</span><span style=\"font-size: 14px;\">&nbsp;This makes building blocks of content on a page really intuitive.</span></p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"fda7a850-d5bc-11e6-a761-f9f9f94a6894-repeater-wide.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/fda7a850-d5bc-11e6-a761-f9f9f94a6894-repeater-wide.jpg","imgix_url":"https://imgix.cosmicjs.com/fda7a850-d5bc-11e6-a761-f9f9f94a6894-repeater-wide.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-10-10T21:54:39.021Z","created_by":"5357ef811693be2118000001","created":"2016-10-11T21:54:39.022Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p><span style=\"font-size: 14px;\">The Repeater Metafield allows you to group Metafields into groups with the ability to &ldquo;repeat&rdquo; the group.&nbsp;</span><span style=\"font-size: 14px;\">&nbsp;This makes building blocks of content on a page really intuitive.</span></p>","featured_image":{"url":"https://cdn.cosmicjs.com/fda7a850-d5bc-11e6-a761-f9f9f94a6894-repeater-wide.jpg","imgix_url":"https://imgix.cosmicjs.com/fda7a850-d5bc-11e6-a761-f9f9f94a6894-repeater-wide.jpg"}}},{"_id":"57f2b459baf16e8537006038","order":175,"slug":"how-to-build-a-cross-platform-blog-using-react-native-and-nodejs","title":"How to Build a Cross-Platform Blog Using React Native and Node.js","content":"<h3><img src=\"https://www.cosmicjs.com/uploads/14480e80-89a3-11e6-bed6-65a0e6114816-cross-platform-blog.gif\" data-filename=\"https://www.cosmicjs.com/uploads/14480e80-89a3-11e6-bed6-65a0e6114816-cross-platform-blog.gif\" style=\"width: 100%;\" class=\"fr-dii fr-draggable\"></h3><p>We live in a world of inter-connected devices, each powered by their own software, built with their own circuits and protected by their own casing. &nbsp;The best way to deliver information to these seemingly closed-off systems is with an API. &nbsp;Cosmic is an API-first cloud-based content platform that makes it not only easy to add dynamic content to any existing or new website, but makes it possible to seamlessly deliver content across devices and platforms.</p><p>In this article I&rsquo;m going to show you how to quickly and easily create a cross-platform blog that will connect your content across Web, iOS and Android. &nbsp;With content powered by Cosmic, you will be able to edit your content once and deliver the updates simultaneously across all devices and platforms. &nbsp;Let&rsquo;s get started.<br></p><h3>TL;DR</h3><p><a href=\"https://www.cosmicjs.com/apps/cross-platform-blog\" target=\"_blank\">Check out the demo.</a></p><p><br></p><h3>Website</h3><p><br></p><p>To get started, <a href=\"https://github.com/cosmicjs/cross-platform-blog\" target=\"_blank\">download the Cross-Platform Blog on GitHub</a> which is based on the <a href=\"https://github.com/cosmicjs/nodejs-website-boilerplate\" target=\"_blank\">Node.js Website Boilerplate</a>. &nbsp;This comes with everything you need to get started with a basic website as well as the codebase for the native applications running React Native for iOS and Android.</p><pre>git clone https://github.com/cosmicjs/cross-platform-blog\r\ncd cross-platform-blog/web\r\nnpm install\r\nnpm run development</pre><p>The root of our application runs at app-server.js. &nbsp;Looking at this file, you&#39;ll see how routes are set up and how views are rendered to the routes.</p><p>Now that we have our website running, let&rsquo;s open up another terminal window and get our iOS and Android apps built.</p><h3>React Native Bridges the Gap</h3><p>React Native is a very powerful way to build applications for both iOS and Android. &nbsp;Because most, if not all, of the codebase can be shared between the two platforms, by using React Native you can build your apps in half the time. &nbsp;If you haven&rsquo;t gotten your local environment setup for React Native development, go to the <a href=\"https://facebook.github.io/react-native/\" target=\"_blank\">React Native website</a> and follow the steps. &nbsp;Honestly I found setting up the iOS development environment to be super easy, but setting up the Android, not so much. &nbsp;Mainly because I had to search more to figure it all out. &nbsp;In short, you need to download Android Studio and make sure you have the correct version of the Java SDK installed and make sure you have all of the developer tools installed.</p><h4>iOS</h4><p><span style=\"font-size: 14px;\">To install and run the iOS React Native application run the following commands:</span></p><pre>cd cross-platform-blog/ios\r\nnpm install\r\nreact-native run-ios</pre><p><br></p><h4>Android</h4><p>Run the following commands to run the Android application (make sure you have your Android device emulator open):<span style=\"color: inherit; font-family: inherit; font-size: 18px;\"><br></span></p><pre>cd cross-platform-blog/android\r\nnpm install\r\nreact-native android</pre><p>Looking at index.ios.js and index.android.js you will notice that the root of our application for both iOS and Android runs at App.js. &nbsp; And all other components LandingPage.js, BlogList.js and BlogPost.js are shared between the two platforms as well.</p><p>When we run our react-native commands, our React Native code base is translated to both Objective-C and Java languages. &nbsp;It is not a &ldquo;hybrid app&rdquo; or web-based at all. &nbsp;It basically just translates your JavaScript (React) building blocks together into the native language of each platform.<br></p><h3>Connect to the CMS API</h3><p>If you don&#39;t have an account yet, <a href=\"https://www.cosmicjs.com/\" target=\"_blank\">sign up for Cosmic to set up your bucket</a>. &nbsp;Your bucket is the place to add and edit content for your cross-platform blog. &nbsp;To upload the demo content from the Cross-Platform Blog on GitHub, go to Your Bucket &gt; Import / Export. &nbsp;Then upload the bucket.json file located in the root folder of the Cross-Platform Blog repository. &nbsp;This will upload all of the demo data and files from the Cross-Platform Blog demo application. &nbsp; To configure your local application to point to your bucket, simply edit your config files in both web and native folders to point to &quot;your-bucket-slug&quot;.</p><pre>// config.js\r\nexport default {\r\n&nbsp; COSMIC_BUCKET: &#39;your-bucket-slug&#39;\r\n}</pre><p>Now when you edit content in your Cosmic bucket, you will see that the content automatically updates across Web, iOS and Android applications. &nbsp;By connecting your applications to Cosmic, you are using a powerful tool that breaks down the barriers between devices and programming languages.</p><p>I hope you found this tutorial helpful. &nbsp;If you have any questions about how Cosmic can help your team build websites and applications faster and easier, <a href=\"https://twitter.com/cosmic_js\" target=\"_blank\">reach out to us on Twitter</a> and <a href=\"https://www.cosmicjs.com/community\">join our community on Slack</a>.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p><span style=\"font-size: 14px;\">In this article I&rsquo;m going to show you how to quickly and easily create a cross-platform blog that will connect your content across Web, iOS and Android. &nbsp;With content powered but Cosmic, you will be able to edit your content once and deliver the update simultaneously across all devices and platforms. &nbsp;This is powerful stuff. &nbsp;Let&rsquo;s get started.</span></p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"c64a39e0-d5bc-11e6-bed5-5b88b5b5f7e4-14480e80-89a3-11e6-bed6-65a0e6114816-cross-platform-blog (1).gif","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/c64a39e0-d5bc-11e6-bed5-5b88b5b5f7e4-14480e80-89a3-11e6-bed6-65a0e6114816-cross-platform-blog (1).gif","imgix_url":"https://imgix.cosmicjs.com/c64a39e0-d5bc-11e6-bed5-5b88b5b5f7e4-14480e80-89a3-11e6-bed6-65a0e6114816-cross-platform-blog (1).gif"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-10-04T19:41:13.281Z","created_by":"5357ef811693be2118000001","created":"2016-10-04T19:41:13.281Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p><span style=\"font-size: 14px;\">In this article I&rsquo;m going to show you how to quickly and easily create a cross-platform blog that will connect your content across Web, iOS and Android. &nbsp;With content powered but Cosmic, you will be able to edit your content once and deliver the update simultaneously across all devices and platforms. &nbsp;This is powerful stuff. &nbsp;Let&rsquo;s get started.</span></p>","featured_image":{"url":"https://cdn.cosmicjs.com/c64a39e0-d5bc-11e6-bed5-5b88b5b5f7e4-14480e80-89a3-11e6-bed6-65a0e6114816-cross-platform-blog (1).gif","imgix_url":"https://imgix.cosmicjs.com/c64a39e0-d5bc-11e6-bed5-5b88b5b5f7e4-14480e80-89a3-11e6-bed6-65a0e6114816-cross-platform-blog (1).gif"}}},{"_id":"57ee818533463628310009c3","order":176,"slug":"cosmic-js-partner-profile","title":"Cosmic: Partner Profile","content":"<p><a href=\"https://www.cosmicjs.com\" target=\"_blank\">Cosmic</a> offers <a href=\"https://www.cosmicjs.com/partners\" target=\"_blank\">partnership opportunities</a> to designers, developers &amp; agencies for app contributions, bucket management as well as Affiliate referral programs. Of the agencies taking advantage of the Cosmic Partners Program thus far, <a href=\"http://www.simplemedia.co\" target=\"_blank\">Simple Media</a> is leveraging the tool in the most formidable way. Simple Media is a boutique interactive branding &amp; inbound marketing agency in the Design District neighborhood of Dallas. Hobbled by installed systems, Simple Media was looking for an easier way to launch digital properties on behalf of their clients, as well as integrate a new hosting solution into the mix that knocks out several disparate tech partners in their <a href=\"https://www.cosmicjs.com/blog/the-cosmic-stack\" target=\"_blank\">content management stack</a>.&nbsp;</p><p>Simple Media is actively building new websites and apps on the Cosmic system, leveraging their team of developers for an initial hours scope on time-to-launch for each individual client, optimizing thereafter. Watch Simple Media CEO &amp; Founder <a href=\"https://www.linkedin.com/in/nickbonanno\" target=\"_blank\">Nick Bonanno&nbsp;</a>discuss their integration with Cosmic.&nbsp;</p><p><span class=\"fr-video fr-dvi fr-draggable\" contenteditable=\"false\" style=\"\"><iframe frameborder=\"0\" src=\"https://www.youtube.com/embed/C4kSwh1N1t0\" width=\"640\" height=\"360\" class=\"note-video-clip\"></iframe></span><br></p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>Hobbled by installed systems, Simple Media was looking for an easier way to launch digital properties on behalf of their clients.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"f499fc00-bd7e-11e6-95d9-69995ea5288b-Screen Shot 2016-12-08 at 1.13.36 PM.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/f499fc00-bd7e-11e6-95d9-69995ea5288b-Screen Shot 2016-12-08 at 1.13.36 PM.png","imgix_url":"https://imgix.cosmicjs.com/f499fc00-bd7e-11e6-95d9-69995ea5288b-Screen Shot 2016-12-08 at 1.13.36 PM.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-09-30T15:15:17.722Z","created_by":"5716b504e9c686d006000073","created":"2016-09-30T15:15:17.722Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>Hobbled by installed systems, Simple Media was looking for an easier way to launch digital properties on behalf of their clients.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/f499fc00-bd7e-11e6-95d9-69995ea5288b-Screen Shot 2016-12-08 at 1.13.36 PM.png","imgix_url":"https://imgix.cosmicjs.com/f499fc00-bd7e-11e6-95d9-69995ea5288b-Screen Shot 2016-12-08 at 1.13.36 PM.png"}}},{"_id":"57ed185fd12b1858040066c8","order":177,"slug":"cosmic-js-product-tour","title":"Cosmic Product Tour","content":"<p style=\"text-align: center; \"><span class=\"fr-video fr-dvi fr-draggable\" contenteditable=\"false\" style=\"\"><iframe frameborder=\"0\" src=\"https://www.youtube.com/embed/rMEgLePI6aQ\" width=\"640\" height=\"360\" class=\"note-video-clip\" style=\"max-width: 100%\"></iframe></span></p><p><a href=\"https://www.cosmicjs.com\" target=\"_blank\">Cosmic</a> is an <a href=\"https://www.cosmicjs.com\" target=\"_blank\">API-first cloud-based content management platform</a> that makes it easy for developers and content editors to build websites and apps faster and more efficiently. Building API-first means that content is prioritized first, <a href=\"https://www.cosmicjs.com/blog/the-cosmic-stack\" target=\"_blank\">decoupling code from content</a>, so you&#39;re able to build slick apps and websites in your preferred programming language. Links to guide you through the signup and on boarding process are documented below. </p><p>You can <a href=\"https://www.cosmicjs.com/signup\" target=\"_blank\">Create a Free Account</a> for Cosmic and browse <a href=\"https://www.cosmicjs.com/apps\" style=\"background-color: rgb(255, 255, 255);\" target=\"_blank\">Content-Ready Apps &amp; Websites</a>. Refer to the Cosmic <a href=\"https://www.youtube.com/channel/UCDzCWWJLVWLpoHB5oGH0H-A\" style=\"background-color: rgb(255, 255, 255);\" target=\"_blank\">Tutorials &amp; Guides</a> for help with items such as Localization, Webhooks, one-click SSL, custom domains, web app deployment &amp; more.&nbsp;</p><p>Browse information about the <a href=\"https://www.cosmicjs.com/partners\" target=\"_blank\">Cosmic Partner Program.</a></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"color: inherit; font-family: inherit; font-size: 24px;\">Read More:</span><br></p><ol><li><a href=\"https://www.cosmicjs.com/blog/new-feature-track-your-api-requests\" target=\"_blank\">New: Track Your API Requests</a></li><li><a href=\"https://carsongibbons.com/build-a-blog-in-4-steps\" target=\"_blank\">Build a Blog in 4 Steps</a></li><li><a href=\"https://www.cosmicjs.com/blog/the-cosmic-stack\" target=\"_blank\">The Cosmic Stack</a></li><li><a href=\"https://www.cosmicjs.com/blog/three-ways-to-use-the-cosmic-stack\" target=\"_blank\">Three Ways to use The Cosmic Stack</a></li><li><a href=\"https://www.cosmicjs.com/blog/how-to-create-an-intuitive-website-navigation-menu\" target=\"_blank\">How to Create an Intuitive Website Navigation Menu</a></li></ol>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p><a href=\"https://www.cosmicjs.com\" target=\"_blank\">Cosmic</a> is an <a href=\"https://www.cosmicjs.com\" target=\"_blank\">API-first cloud-based content management platform</a> that makes it easy for teams of developers and content editors to collaborate for projects and clients.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"1e7f2e20-d5bf-11e6-9871-5f155e0fcae7-Screen Shot 2017-01-08 at 10.25.28 AM.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/1e7f2e20-d5bf-11e6-9871-5f155e0fcae7-Screen Shot 2017-01-08 at 10.25.28 AM.png","imgix_url":"https://imgix.cosmicjs.com/1e7f2e20-d5bf-11e6-9871-5f155e0fcae7-Screen Shot 2017-01-08 at 10.25.28 AM.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-09-29T13:34:23.164Z","created_by":"5716b504e9c686d006000073","created":"2016-09-29T13:34:23.164Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p><a href=\"https://www.cosmicjs.com\" target=\"_blank\">Cosmic</a> is an <a href=\"https://www.cosmicjs.com\" target=\"_blank\">API-first cloud-based content management platform</a> that makes it easy for teams of developers and content editors to collaborate for projects and clients.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/1e7f2e20-d5bf-11e6-9871-5f155e0fcae7-Screen Shot 2017-01-08 at 10.25.28 AM.png","imgix_url":"https://imgix.cosmicjs.com/1e7f2e20-d5bf-11e6-9871-5f155e0fcae7-Screen Shot 2017-01-08 at 10.25.28 AM.png"}}},{"_id":"57e932e641fcd13576001c1c","order":178,"slug":"adding-webhooks-in-4-steps","title":"Adding Webhooks in 4 Steps ","content":"<p>At Cosmic, we get questions every day about adding Webhooks to an application for better team &amp; product management. <a href=\"https://www.cosmicjs.com/\" target=\"_blank\">Cosmic</a> is an API-first cloud-based content management platform that allows you to easily integrate a CMS to your deployed or emerging application for content updates. Cosmic works by decoupling content from code, allowing you to build applications in your desired language since Cosmic can be integrated with any application, regardless of its programming language. </p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"color: rgb(51, 51, 51);\">Cosmic makes it easy to add Webhooks that trigger a POST request to the endpoint of your choice when there is activity on your bucket.</span><span style=\"color: rgb(51, 51, 51); font-size: 12px;\">&nbsp;</span></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"color: rgb(51, 51, 51); font-size: 12px;\"><br></span>Let&#39;s insert Webhooks into your web application:</p><p style=\"margin-bottom: 0px; line-height: normal;\"><br></p><h3 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">1. Go to your Bucket Dashboard</h3><p style=\"margin-bottom: 0px; line-height: normal;\"><img src=\"https://www.cosmicjs.com/uploads/ea445cf0-83ef-11e6-aef3-cf64de08ea65-Screen%20Shot%202016-09-26%20at%208.47.49%20AM.png\" data-filename=\"https://www.cosmicjs.com/uploads/ea445cf0-83ef-11e6-aef3-cf64de08ea65-Screen Shot 2016-09-26 at 8.47.49 AM.png\" style=\"width: 100%;\" class=\"fr-dii fr-draggable\"><br></p><p style=\"margin-bottom: 0px; line-height: normal;\"><br></p><h3 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">2. Go to the Webhooks tab</h3><p style=\"margin-bottom: 0px; line-height: normal;\"><img src=\"https://www.cosmicjs.com/uploads/f0df3080-83ef-11e6-aef3-cf64de08ea65-Screen%20Shot%202016-09-26%20at%208.48.06%20AM.png\" data-filename=\"https://www.cosmicjs.com/uploads/f0df3080-83ef-11e6-aef3-cf64de08ea65-Screen Shot 2016-09-26 at 8.48.06 AM.png\" style=\"width: 302.9375px;\" class=\"fr-dii fr-draggable\"><br></p><p style=\"margin-bottom: 0px; line-height: normal;\"><br></p><h3 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">3. Add the Webhooks bucket upgrade - refer to <a href=\"https://www.cosmicjs.com/pricing\" target=\"_blank\">Cosmic Pricing</a> for bucket breakdowns</h3><p style=\"margin-bottom: 0px; font-size: 12px; line-height: normal; font-family: Helvetica;\"><br><img src=\"https://www.cosmicjs.com/uploads/2ffcae10-83ef-11e6-aef3-cf64de08ea65-Screen%20Shot%202016-09-26%20at%208.40.23%20AM.png\" data-filename=\"https://www.cosmicjs.com/uploads/2ffcae10-83ef-11e6-aef3-cf64de08ea65-Screen Shot 2016-09-26 at 8.40.23 AM.png\" style=\"width: 100%;\" class=\"fr-dii fr-draggable\"><br></p><p style=\"margin-bottom: 0px; line-height: normal;\"><br></p><h3 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">4. Use the Webhooks table to select an event and trigger a POST request to the API endpoint</h3><p style=\"margin-bottom: 0px; font-size: 12px; line-height: normal; font-family: Helvetica;\"><img src=\"https://www.cosmicjs.com/uploads/119d9060-83ef-11e6-aef3-cf64de08ea65-Screen%20Shot%202016-09-26%20at%208.41.50%20AM.png\" data-filename=\"https://www.cosmicjs.com/uploads/119d9060-83ef-11e6-aef3-cf64de08ea65-Screen Shot 2016-09-26 at 8.41.50 AM.png\" style=\"width: 100%;\" class=\"fr-dii fr-draggable\"><br></p><p style=\"margin-bottom: 0px; font-size: 12px; line-height: normal; font-family: Helvetica;\"><br></p><p style=\"margin-bottom: 0px; line-height: normal;\">Now this will post to the endpoint of your choice whenever the event signified occurs. This is great for static websites &amp; great for the build process whenever content is changed. You can send a message on Slack to your team whenever you&rsquo;ve added a new piece of content for draft review. Cosmic builds collaboration between developers &amp; content editors in everything we do, because we work content-first.</p><p style=\"margin-bottom: 0px; line-height: normal;\"><br></p><h3 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\">Watch the Webhooks Tutorial:&nbsp;</h3><p style=\"margin-bottom: 0px; line-height: normal;\"><span class=\"fr-video fr-dvi fr-draggable\" contenteditable=\"false\" style=\"\"><iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/jWtGUIgtRfI\" frameborder=\"0\" allowfullscreen=\"\"></iframe></span>&nbsp;</p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"color: inherit; font-family: inherit; font-size: 24px;\"><br></span></p><p style=\"margin-bottom: 0px; line-height: normal;\"><span style=\"color: inherit; font-family: inherit; font-size: 24px;\">Read More:</span></p><ol><li><a href=\"https://www.cosmicjs.com/blog/new-feature-track-your-api-requests\" target=\"_blank\">New: Track Your API Requests</a></li><li><a href=\"https://carsongibbons.com/build-a-blog-in-4-steps\" target=\"_blank\">Build a Blog in 4 Steps</a></li><li><a href=\"https://www.cosmicjs.com/blog/the-cosmic-stack\" target=\"_blank\">The Cosmic Stack</a></li><li><a href=\"https://www.cosmicjs.com/blog/three-ways-to-use-the-cosmic-stack\" target=\"_blank\">Three Ways to use The Cosmic Stack</a></li><li><a href=\"https://www.cosmicjs.com/blog/how-to-create-an-intuitive-website-navigation-menu\" target=\"_blank\">How to Create an Intuitive Website Navigation Menu</a></li></ol><div><br></div><div><br></div>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>The Webhooks add-on allows you to communicate with any third-party endpoint whenever content is edited within your bucket. This is great for static site rebuilds, or communicating with your team through the Slack API whenever content is changed in your Cosmic bucket.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"df2a8cc0-83f6-11e6-aef3-cf64de08ea65-hook.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/df2a8cc0-83f6-11e6-aef3-cf64de08ea65-hook.jpg","imgix_url":"https://imgix.cosmicjs.com/df2a8cc0-83f6-11e6-aef3-cf64de08ea65-hook.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-09-26T14:38:30.850Z","created_by":"5716b504e9c686d006000073","created":"2016-09-26T14:38:30.850Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>The Webhooks add-on allows you to communicate with any third-party endpoint whenever content is edited within your bucket. This is great for static site rebuilds, or communicating with your team through the Slack API whenever content is changed in your Cosmic bucket.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/df2a8cc0-83f6-11e6-aef3-cf64de08ea65-hook.jpg","imgix_url":"https://imgix.cosmicjs.com/df2a8cc0-83f6-11e6-aef3-cf64de08ea65-hook.jpg"}}},{"_id":"57dff26abf12fa171c000121","order":179,"slug":"cosmic-js-user-roles-and-permissions","title":"Cosmic User Roles and Permissions","content":"<p>Cosmic is an API-first cloud-based content management platform that makes it easy for teams of developers and content editors to build, deploy &amp; update web applications, regardless of the application&#39;s programming language. Cosmic implements a natural flow from developer access to content editor access. Since the content management platform was built by a developer / content editor team who&#39;s worked together for years building web applications, the platform is geared for developers and content editors to collaborate more freely. User permissions are intuitive and compliment one another in the project workflow process. I&#39;ll take a brief look at the different access views within the Cosmic Dashboard.&nbsp;</p><p>Cosmic provides three different user roles: Admin, Developer, Editor.</p><table class=\"table table-bordered\" style=\"width: 1211px;\"><tbody><tr><td><strong>Admin</strong></td><td><strong><span style=\"background-color: rgb(255, 255, 255);\">access to settings, users &amp; developer features</span><br></strong></td></tr><tr><td><strong>Developer</strong></td><td><strong><span style=\"background-color: rgb(255, 255, 255);\">access to developer &amp; editor features</span><br></strong></td></tr><tr><td><strong>Editor</strong></td><td><strong><span style=\"background-color: rgb(255, 255, 255);\">can add, edit &amp; delete content with developer features hidden</span><br></strong></td></tr></tbody></table><h3><span style=\"color: inherit; font-family: inherit;\">My Global Dashboard View</span></h3><p><img src=\"https://www.cosmicjs.com/uploads/813e2480-7e6c-11e6-b161-3f08913cc13e-Screen%20Shot%202016-09-19%20at%208.24.43%20AM.png\" data-filename=\"https://www.cosmicjs.com/uploads/813e2480-7e6c-11e6-b161-3f08913cc13e-Screen Shot 2016-09-19 at 8.24.43 AM.png\" style=\"width: 1212px;\" class=\"fr-dii fr-draggable\"></p><p>In the screen capture above, you can see all of the buckets of content that I have been added to as a User.&nbsp;</p><p>The simple breakdown to review account access &amp; usage is as follows:<br></p><table class=\"table table-bordered\" style=\"width: 1211px;\"><tbody><tr><td><strong>Bucket Name</strong></td><td><strong>Plan Tier</strong></td><td><strong>Media Usage</strong></td><td><strong>Last Modified History</strong></td><td><strong># of Bucket Users</strong></td><td><strong>Bucket Owner</strong></td><td><strong>Jump to Dashboard</strong></td></tr></tbody></table><p>We&#39;ll use Carson Gibbons &amp; Cosmic as the two sample buckets to dive into to display user management &amp; user permissions.&nbsp;</p><h3>Carson Gibbons Bucket</h3><p><img src=\"https://www.cosmicjs.com/uploads/7d1e4690-7e6d-11e6-97ac-019ebaf20b79-Screen%20Shot%202016-09-19%20at%208.32.00%20AM.png\" data-filename=\"https://www.cosmicjs.com/uploads/7d1e4690-7e6d-11e6-97ac-019ebaf20b79-Screen Shot 2016-09-19 at 8.32.00 AM.png\" style=\"width: 1212px;\" class=\"fr-dii fr-draggable\"></p><p>In this bucket I am set up as the Bucket Admin, which automatically gives me Developer &amp; Editor permission to control my content. I have access to items such as Web Hosting, Import / Export, Webhooks, User Management, Usage &amp; Settings.&nbsp;</p><h3>Cosmic Bucket</h3><p><img src=\"https://www.cosmicjs.com/uploads/96670dd0-7e6d-11e6-97ac-019ebaf20b79-Screen%20Shot%202016-09-19%20at%208.32.42%20AM.png\" data-filename=\"https://www.cosmicjs.com/uploads/96670dd0-7e6d-11e6-97ac-019ebaf20b79-Screen Shot 2016-09-19 at 8.32.42 AM.png\" style=\"width: 1212px;\" class=\"fr-dii fr-draggable\"><br></p><p>In this bucket I am set up as the Bucket Editor, which gives me permission to create &amp; contribute my content. I have access to publish new posts, control the author metafield within the post itself &amp; draft or publish content. I do not have access to items such as Usage &amp; Users.&nbsp;</p><div>The decision for certain features not only being unavailable, but being hidden for a role such as an Editor, is to limit options &amp; guide workflow. For instance, to control Metafields, the developer has access to manage the Titles and Keys, while the editor just sees the Value field. &nbsp;Web Hosting and Usage are also hidden from editors to limit confusion.</div><div><br></div><div>If the websites and applications that we visit everyday are tailored to us as consumer segments, why aren&#39;t the tools that we use to publish content also tailored to our particular contributor types? </div><div><h3 style=\"font-family: 'Open Sans', sans-serif; color: rgb(0, 0, 0);\"><span style=\"color: inherit; font-family: inherit;\">Read More:</span></h3><p><a href=\"https://www.cosmicjs.com/blog/new-feature-track-your-api-requests\" target=\"_blank\">New: Track Your API Requests</a></p><p><a href=\"https://carsongibbons.com/build-a-blog-in-4-steps\" target=\"_blank\">Build a Blog in 4 Steps</a></p><p><a href=\"https://www.cosmicjs.com/blog/the-cosmic-stack\" target=\"_blank\">The Cosmic Stack</a><br></p><p><br></p><p><a href=\"https://www.cosmicjs.com/blog/three-ways-to-use-the-cosmic-stack\" target=\"_blank\">Three Ways to use The Cosmic Stack</a></p><p><br></p><div><a href=\"https://www.cosmicjs.com/blog/how-to-create-an-intuitive-website-navigation-menu\" target=\"_blank\">How to Create an Intuitive Website Navigation Menu</a></div></div><div><br></div>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p><br></p><div style=\"box-sizing: border-box; color: rgb(0, 0, 0); font-family: 'Open Sans', sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);\"><br></div><p><br></p><div style=\"box-sizing: border-box;\">If the websites and applications that we visit everyday are tailored to us as consumer segments, why aren&#39;t the tools that we use to publish content also tailored to our particular contributor types? </div>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"c166c2d0-960c-11e6-8afd-2319bb61fbf1-users.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/c166c2d0-960c-11e6-8afd-2319bb61fbf1-users.jpg","imgix_url":"https://imgix.cosmicjs.com/c166c2d0-960c-11e6-8afd-2319bb61fbf1-users.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-09-19T14:12:58.051Z","created_by":"5716b504e9c686d006000073","created":"2016-09-19T14:12:58.052Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p><br></p><div style=\"box-sizing: border-box; color: rgb(0, 0, 0); font-family: 'Open Sans', sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);\"><br></div><p><br></p><div style=\"box-sizing: border-box;\">If the websites and applications that we visit everyday are tailored to us as consumer segments, why aren&#39;t the tools that we use to publish content also tailored to our particular contributor types? </div>","featured_image":{"url":"https://cdn.cosmicjs.com/c166c2d0-960c-11e6-8afd-2319bb61fbf1-users.jpg","imgix_url":"https://imgix.cosmicjs.com/c166c2d0-960c-11e6-8afd-2319bb61fbf1-users.jpg"}}},{"_id":"57d89d8d663e845a460032b3","order":181,"slug":"how-to-create-an-intuitive-website-navigation-menu","title":"How to Create an Intuitive Website Navigation Menu","content":"<p></p><p></p><p>In my previous post, <a href=\"https://www.cosmicjs.com/blog/building-with-the-content-editor-in-mind\">Building with the Content Editor in Mind</a>, I talked about how to best split up the content of a web page to be easily managed by a content editor. &nbsp;In this article, I’m going to show you how to create an easy-to-manage website navigation menu using the powerful Cosmic Metafields.</p><p>Cosmic Metafields were designed partly with navigation in mind because navigation needs to be both flexible and nestable. &nbsp;Cosmic Metafields allows you to create nestable data structures with parent / child relationships easily with a simple drag and drop in the <a href=\"https://www.cosmicjs.com\">CMS</a>. &nbsp;And the output from the Cosmic API makes building and managing a navigation menu for your website easier than ever.</p><p></p><h3>Real (Estate) World Example</h3><ul><li><img src=\"https://www.cosmicjs.com/uploads/9ff1d1f0-7a26-11e6-9f50-c1e138141f9f-real-estate-website.png\" data-filename=\"https://www.cosmicjs.com/uploads/9ff1d1f0-7a26-11e6-9f50-c1e138141f9f-real-estate-website.png\" style=\"width: 1084px;\"><br><br>Let's take a look at the <a href=\"https://www.cosmicjs.com/apps/real-estate\">Real Estate Website</a> available in the <a href=\"https://www.cosmicjs.com/apps\">Cosmic Websites and Apps page</a>. &nbsp;This website includes the following nav items:<p></p><ul><li>1. Home<br>2. About</li></ul>3. Property Types - (Includes nested menu items in a dropdown)<br>-- Residential</li><li>-- Commercial</li><li>4. Listings</li><li>...etc<br><br></li></ul><p>You can see we have two levels of navigation, a main level: Home, About,&nbsp;Property&nbsp;Types, Listings and a nested nav level:&nbsp;Residential&nbsp;and Commercial, child elements that belong to the&nbsp;Property&nbsp;Types main nav menu item. &nbsp;If you've ever had to build a navigation menu like this and make it easily managed for a content editor in a CMS, you know that it is challenging. &nbsp;But Cosmic has made this once challenging, time-consuming task easy to implement in any website codebase and intuitive to manage in the <a href=\"https://www.cosmicjs.com\">Cosmic CMS API</a>.</p><p></p><h3>Metafields to the Rescue</h3>Let's now go step-by-step to create an easily managed, nested navigation menu, like the Real Estate Website navigation. &nbsp;<a href=\"https://www.cosmicjs.com/login\" target=\"_blank\" style=\"background-color: rgb(255, 255, 255);\">Login to follow along</a>.<p></p><p>First we will create a new bucket (or use an existing bucket) then add an Object Type to store our navigation and other global elements which we will call Globals.<br></p><p><img src=\"https://www.cosmicjs.com/uploads/14d49c50-7a27-11e6-9f50-c1e138141f9f-globals.png\" data-filename=\"https://www.cosmicjs.com/uploads/14d49c50-7a27-11e6-9f50-c1e138141f9f-globals.png\" style=\"width: 407.877px; height: 362px;\"><br></p><p>Next let's create a new object within our Global object type titled appropriately: Nav.</p><p>Since we will only be using the Metfields in this object, let's remove the Content editor in Nav by editing the Object Settings &gt; Visibility Settings.</p><p>Now let's begin building our navigation. &nbsp;First let's create a new Metafield for each Nav item on the first level. &nbsp;This includes: Home, About, Property Types, Listings, etc. &nbsp;Each Metafield value field will be the link that we want to navigate to. &nbsp;(Home will go to \"/\", About to \"/about\" etc...)</p><p><img src=\"https://www.cosmicjs.com/uploads/3b442bb0-7a29-11e6-9f50-c1e138141f9f-metafields.png\" data-filename=\"https://www.cosmicjs.com/uploads/3b442bb0-7a29-11e6-9f50-c1e138141f9f-metafields.png\" style=\"width: 1084px;\"><br></p><p>Now the fun part, let's create our nested navigation beneath our Property Types main nav item. &nbsp;To do this, create a new Metafield and drag it under the&nbsp;Property Types&nbsp;nav item. &nbsp;You can <b>nest</b> the secondary nav item beneath any main nav item creating the parent / child relationship which we will use later when we retrieve our content from the API.</p><p>Our new navigation menu now looks like the following:<img src=\"https://www.cosmicjs.com/uploads/57a56870-7a27-11e6-9f50-c1e138141f9f-metafields.png\" data-filename=\"https://www.cosmicjs.com/uploads/57a56870-7a27-11e6-9f50-c1e138141f9f-metafields.png\" style=\"width: 1084px;\"></p><p>To see how easy it will be to add the navigation to our codebase, &nbsp;let's look at the API endpoint of our nav object.</p><p>Notice that the nav object includes our menu items as a simple array of Metafields. &nbsp;And Property Types has an additional array of children which store our sub navigation items. &nbsp;For a developer, this is huge because it takes this once complex task of nested, managed navigation items and breaks it down into a simple parent / child relationship. &nbsp;This makes implementation <b>much</b> easier.</p><p><img src=\"https://www.cosmicjs.com/uploads/bbd35000-7a27-11e6-9f50-c1e138141f9f-metafields-api.png\" data-filename=\"https://www.cosmicjs.com/uploads/bbd35000-7a27-11e6-9f50-c1e138141f9f-metafields-api.png\" style=\"width: 0px; height: 0px;\"><img src=\"https://www.cosmicjs.com/uploads/330bca30-7a28-11e6-9f50-c1e138141f9f-metafields-api.png\" data-filename=\"https://www.cosmicjs.com/uploads/330bca30-7a28-11e6-9f50-c1e138141f9f-metafields-api.png\" style=\"width: 483.75px; height: 724.531px;\"><br></p><p>Also, notice that the visual structure of the Metafields in the editor and the visual data structure in the JSON API are practically identical!</p><p>I hope you have enjoyed this article on how to easily build a website navigation using Cosmic Metafields. &nbsp;If you have any comments or questions, please <a href=\"https://twitter.com/cosmic_js\" target=\"_blank\">reach out to Cosmic on Twitter</a>&nbsp;and&nbsp;<a href=\"https://www.cosmicjs.com/community\">join our Slack Community</a>.</p><p></p><p></p><p></p><p></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p><span style=\"font-size: 14px;\">In this article, I’m going to show you how to create an easy-to-manage website navigation menu using the powerful Cosmic Metafields. &nbsp;</span><span style=\"font-size: 14px;\">Because navigation needs to be both flexible and nestable Cosmic Metafields allows you to create nestable data structures with parent / child relationships easily with a simple drag and drop in the&nbsp;</span><a href=\"https://www.cosmicjs.com/\" style=\"background-color: rgb(255, 255, 255); color: rgb(19, 147, 176); font-size: 14px;\">CMS</a>. &nbsp;<span style=\"font-size: 14px;\">Cosmic has made this once time-consuming task easy to implement in&nbsp;</span><span style=\"font-size: 14px;\">any website codebase&nbsp;</span><span style=\"font-size: 14px;\">and intuitive to manage in the <a href=\"https://www.cosmicjs.com\">Cosmic CMS API</a>.</span></p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-09-14T00:45:01.211Z","created_by":"55767c3ffbcf5cbb13000001","created":"2016-09-14T00:45:01.211Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p><span style=\"font-size: 14px;\">In this article, I’m going to show you how to create an easy-to-manage website navigation menu using the powerful Cosmic Metafields. &nbsp;</span><span style=\"font-size: 14px;\">Because navigation needs to be both flexible and nestable Cosmic Metafields allows you to create nestable data structures with parent / child relationships easily with a simple drag and drop in the&nbsp;</span><a href=\"https://www.cosmicjs.com/\" style=\"background-color: rgb(255, 255, 255); color: rgb(19, 147, 176); font-size: 14px;\">CMS</a>. &nbsp;<span style=\"font-size: 14px;\">Cosmic has made this once time-consuming task easy to implement in&nbsp;</span><span style=\"font-size: 14px;\">any website codebase&nbsp;</span><span style=\"font-size: 14px;\">and intuitive to manage in the <a href=\"https://www.cosmicjs.com\">Cosmic CMS API</a>.</span></p>"}},{"_id":"57d7ff8d663e845a46001c6c","order":182,"slug":"new-feature-track-your-api-requests","title":"New Feature: Track Your API Requests","content":"<p>We&#39;re excited to announce a new feature that allows you to easily monitor API usage and activity for your Cosmic-powered applications. &nbsp;The new Usage section of your bucket provides an easy way to filter API requests by date and monitor spikes and dips in activity (screenshot below).<br><br><img src=\"https://www.cosmicjs.com/uploads/5ea47b80-79b8-11e6-9f50-c1e138141f9f-Screen Shot 2016-09-12 at 3.53.38 PM.png\" data-filename=\"https://www.cosmicjs.com/uploads/5ea47b80-79b8-11e6-9f50-c1e138141f9f-Screen Shot 2016-09-12 at 3.53.38 PM.png\" style=\"width: 1218px;\" class=\"fr-dii fr-draggable\"><br><br><a href=\"https://www.cosmicjs.com/login\" target=\"_blank\">Click here to l</a><a href=\"https://www.cosmicjs.com/login\" target=\"_blank\">og in to your Cosmic account.</a><br><br>It is our hope that&nbsp;the new API Usage tool will help you and your team&nbsp;be more efficient as you build and host your Cosmic-powered applications. Only Admin users of each bucket will have access to the API Usage report within the Dashboard.</p><p>To access the API Usage report, navigate to:</p><p><strong>Buckets &gt; Your Bucket &gt; Usage &gt; Filter Date Range = API Usage Report</strong></p><p><strong><br></strong><span style=\"color: inherit; font-family: inherit; font-size: 24px;\">Read More:</span></p><p><a href=\"https://carsongibbons.com/build-a-blog-in-4-steps\" target=\"_blank\">Build a Blog in 4 Steps</a></p><p><a href=\"https://carsongibbons.com/build-a-sales-presentation-app-in-4-steps\" target=\"_blank\">Build a Sales Presentation App in 4 Steps</a></p><p><a href=\"https://www.cosmicjs.com/blog/the-cosmic-stack\" target=\"_blank\">The Cosmic Stack</a></p><p><a href=\"https://www.cosmicjs.com/blog/three-ways-to-use-the-cosmic-stack\" target=\"_blank\">Three Ways to use The Cosmic Stack</a></p><p><a href=\"https://www.cosmicjs.com/blog/building-with-the-content-editor-in-mind\" target=\"_blank\">Building With the Content Editor in Mind</a></p><p><a href=\"https://tonyspiro.com/breaking-the-mold-taking-charge-of-your-development-process\" target=\"_blank\">Breaking the Mold: Taking Charge of Your Development Process</a></p><p><br><br></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>We&#39;re excited to announce a new feature that allows you to easily monitor API usage and activity for your Cosmic-powered applications. </p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"5ea47b80-79b8-11e6-9f50-c1e138141f9f-Screen Shot 2016-09-12 at 3.53.38 PM.png","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/5ea47b80-79b8-11e6-9f50-c1e138141f9f-Screen Shot 2016-09-12 at 3.53.38 PM.png","imgix_url":"https://imgix.cosmicjs.com/5ea47b80-79b8-11e6-9f50-c1e138141f9f-Screen Shot 2016-09-12 at 3.53.38 PM.png"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-09-13T13:30:53.872Z","created_by":"5716b504e9c686d006000073","created":"2016-09-13T13:30:53.872Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>We&#39;re excited to announce a new feature that allows you to easily monitor API usage and activity for your Cosmic-powered applications. </p>","featured_image":{"url":"https://cdn.cosmicjs.com/5ea47b80-79b8-11e6-9f50-c1e138141f9f-Screen Shot 2016-09-12 at 3.53.38 PM.png","imgix_url":"https://imgix.cosmicjs.com/5ea47b80-79b8-11e6-9f50-c1e138141f9f-Screen Shot 2016-09-12 at 3.53.38 PM.png"}}},{"_id":"57cd7a378315c7ab30000002","order":183,"slug":"cosmic-js-users-hit-500000-api-requests","title":"Cosmic Users Hit 500,000 API Requests","content":"<p><a href=\"https://www.cosmicjs.com\" target=\"_blank\">Cosmic</a>, an API-first cloud-based <a href=\"https://www.cosmicjs.com\" target=\"_blank\">content management platform</a>, and its user base continues to grow in Public Beta, having hit 500,000 API requests a mere 6 weeks into Public Beta Launch. Cosmic entered Public Beta on&nbsp;July 19 of this year, and since has brokered multiple agency partner agreements, augmented 40% growth of its user base, onboarded paying customers and is now on pace to hit 1,000,000 API requests by late October. Cosmic currently has over 1,500 global users that represent 126 countries that have used the platform. Cosmic users represent a variety of industries, from interactive agencies and development shops to travel, healthcare, FinTech, banking, analytics, professional services &amp; more. <a href=\"https://www.cosmicjs.com/about\" target=\"_blank\">Cosmic Founders</a> <a href=\"https://tonyspiro.com\" target=\"_blank\">Tony Spiro</a> and <a href=\"https://carsongibbons.com\" target=\"_blank\">Carson Gibbons</a> project exceeding 2,000 global users by mid to late October, coupled with the 1 Million API requests mark.</p><p>Cosmic Founder Tony Spiro attributes the recent growth of Cosmic to several items:<br></p><p><b>1. Developer Outreach in Public Beta</b></p><p>The new <a href=\"https://www.cosmicjs.com/community\" target=\"_blank\">Cosmic Community</a> allows users to easily sign up for the <a href=\"https://cosmicjs.slack.com\" target=\"_blank\">Cosmic Slack Channel</a>, follow and engage with social channels and resources such as <a href=\"https://github.com/cosmicjs\" target=\"_blank\">GitHub</a>, <a href=\"https://twitter.com/cosmic_js\" target=\"_blank\">Twitter</a> &amp; <a href=\"https://facebook.com/cosmicjs\" target=\"_blank\">Facebook</a>.</p><p><b>2. Content Creation / Curation</b></p><p>The Cosmic Founders actively contribute to the <a href=\"https://www.cosmicjs.com/blog\" target=\"_blank\">Cosmic Blog</a>, and recently have received requests from agency partners to be able to contribute to the blog eco-system.&nbsp;</p><p><b>3. Websites &amp; Apps</b></p><p> </p><p>In addition to displaying apps that represent various programming languages, Cosmic continues to push out vertical-specific <a href=\"https://www.cosmicjs.com/apps\" target=\"_blank\">Websites &amp; Applications</a> such as <a href=\"https://www.cosmicjs.com/apps/medical-professional\" target=\"_blank\">Medical Professional</a>, <a href=\"https://www.cosmicjs.com/apps/roofing-company\" target=\"_blank\">Roofing Professional</a> &amp; <a href=\"https://www.cosmicjs.com/apps/real-estate\" target=\"_blank\">Real Estate</a>.&nbsp;</p><p><b>4. Emerging Partner Program</b></p><p>Cosmic is rolling out its Partner Programs, which promote collaboration between Cosmic &amp; agencies for content management and hosting on the <a href=\"https://www.cosmicjs.com/blog/the-cosmic-stack\" target=\"_blank\">Cosmic App Server</a>, as well as designers &amp; developers who want to contribute apps to the Cosmic App Store for a revenue share.&nbsp;</p><p><b>RoadMap<br></b></p><p>Cosmic Founders Tony Spiro and Carson Gibbons say they plan to continue the iterative feedback loop that has grown the Cosmic user base, and will be seeking a <a href=\"https://angel.co/cosmicjs\" target=\"_blank\">seed fundraising round</a> in Q4 of this year.</p><p><a href=\"https://www.cosmicjs.com\" target=\"_blank\">Cosmic</a> is an <a href=\"https://www.cosmicjs.com\" target=\"_blank\">API-first cloud-based content management platform</a> that meets the demand for portable, scalable &amp; flexible content management through web applications &amp; websites. For more information about <a href=\"https://www.cosmicjs.com\" target=\"_blank\">Cosmic</a>, or to schedule a demo to learn more about the product, visit <a href=\"https://www.cosmicjs.com\" target=\"_blank\">CosmicJS.com</a>, or get in touch by contacting&nbsp;<a href=\"http://support@cosmicjs.com\" target=\"_blank\">support@cosmicjs.com</a>.</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p><a href=\"https://www.cosmicjs.com\" target=\"_blank\">Cosmic</a>, an API-first cloud-based&nbsp;<a href=\"https://www.cosmicjs.com\" target=\"_blank\">content management platform</a>,&nbsp;and its user base continues to grow in Public Beta, having hit 500,000 API requests a mere 6 weeks into Public Beta Launch.<br></p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-09-05T13:59:19.585Z","created_by":"5716b504e9c686d006000073","created":"2016-09-05T13:59:19.586Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p><a href=\"https://www.cosmicjs.com\" target=\"_blank\">Cosmic</a>, an API-first cloud-based&nbsp;<a href=\"https://www.cosmicjs.com\" target=\"_blank\">content management platform</a>,&nbsp;and its user base continues to grow in Public Beta, having hit 500,000 API requests a mere 6 weeks into Public Beta Launch.<br></p>"}},{"_id":"57bb08f6375171d87a002bd9","order":184,"slug":"building-with-the-content-editor-in-mind","title":"Building with the Content Editor in Mind","content":"<p></p><div style=\"text-align: left;\"><span style=\"line-height: 1.42857;\">When building websites connected to a CMS, it is important that the content is structured as simply as possible for the end user to edit</span><span style=\"line-height: 1.42857;\">.  I call this <i>user-first content development</i>.   </span><span style=\"line-height: 1.42857;\">It benefits everyone – the content editor, the developer and the agency when the content editor is empowered with the easiest and most intuitive way to manage content.  This seems obvious, but this oversight happens all too often </span><span style=\"line-height: 1.42857;\">a</span><span style=\"line-height: 1.42857;\">nd results in confusion and ultimately a bad experience for the content editor</span><span style=\"line-height: 1.42857;\">.  When you build user-first, you are empowering everyone on your team to build the best possible product.</span></div><div style=\"text-align: left;\"><span style=\"line-height: 1.42857;\"><br>In this article I'm going to show you some basic ways to structure content for your websites that make content very easy to manage on the backend.   When you start with an easy-to-use CMS and structure your content intuitively, your content editor will be able to quickly and easily navigate through the CMS to edit content and will </span>ultimately<span style=\"line-height: 1.42857;\"> sing your praises.</span></div><span style=\"line-height: 1.42857;\"><br>Let's first look at a standard website layout.  For 99% of all websites you have the standard structure of <b>Header</b>, <b>Main Content</b> and <b>Footer</b> and it looks something like this:</span><p></p><p style=\"text-align: center; \"><img style=\"width: 409.875px; height: 390.915px;\" src=\"https://www.cosmicjs.com/uploads/21195e90-6872-11e6-84c1-418a1c27cf43-page.jpg\" data-filename=\"https://www.cosmicjs.com/uploads/21195e90-6872-11e6-84c1-418a1c27cf43-page.jpg\"><br></p><p><span style=\"line-height: 20px;\"><br></span></p><p><span style=\"line-height: 20px;\">When I look at the page layout above and consider how it will be managed in the CMS, I immediately translate this into two different object types: <b>Global (</b>items on all pages like the <b>Header</b> and <b>Footer</b>) and <b>Page </b>(<b>Main Content</b>).  In the Cosmic backend it will look something like this:</span></p><p style=\"text-align: center; \"><img style=\"width: 525.231px; height: 463px;\" src=\"https://www.cosmicjs.com/uploads/3da60630-6872-11e6-84c1-418a1c27cf43-globals.png\" data-filename=\"https://www.cosmicjs.com/uploads/3da60630-6872-11e6-84c1-418a1c27cf43-globals.png\"><span style=\"line-height: 20px;\"><br></span></p><p><span style=\"line-height: 20px;\"><br></span></p><p><span style=\"line-height: 20px;\">This is set up in a way that allows for easy communication with your content editor on how to edit the content on the pages of the website.  If they are looking to edit a page, they go into <b>Pages. </b>If they need to edit anything that is repeated across the entire website, they go into <b>Globals</b>.  For the developer, there's an easy way to scale <b>Global</b> items </span><span style=\"line-height: 1.42857;\">that will be reused across the site </span>like logo, navigation, social links, etc.</p><p><span style=\"line-height: 20px;\">Now let's say we want to add a hero image on the top of each page on the website. </span></p><p style=\"text-align: center; \"><img style=\"width: 974px;\" src=\"https://www.cosmicjs.com/uploads/2a450f30-68bf-11e6-80c0-59f0be90729b-cosmic-hero.gif\" data-filename=\"https://www.cosmicjs.com/uploads/2a450f30-68bf-11e6-80c0-59f0be90729b-cosmic-hero.gif\"><span style=\"line-height: 20px;\"><br></span></p><p><span style=\"line-height: 20px;\">Cosmic makes this really easy to do by using <b><i>metafields</i>. </b> To add a new <i>metafield</i> to all of our new and existing pages, we will go into our Object Type settings for our Pages and add an image <i>metafield</i> for <i>hero</i>.</span></p><p style=\"text-align: center; \"><img style=\"width: 654.091px; height: 681px;\" src=\"https://www.cosmicjs.com/uploads/8f49aeb0-6872-11e6-84c1-418a1c27cf43-pages.png\" data-filename=\"https://www.cosmicjs.com/uploads/8f49aeb0-6872-11e6-84c1-418a1c27cf43-pages.png\"><span style=\"line-height: 20px;\"><br></span></p><p style=\"text-align: left;\"><span style=\"line-height: 20px;\">Now each Page will have the image <i>metafield</i> hero available:</span></p><p style=\"text-align: center;\"><img style=\"width: 569.352px; height: 842px;\" src=\"https://www.cosmicjs.com/uploads/aba1ffe0-6872-11e6-84c1-418a1c27cf43-new-page.png\" data-filename=\"https://www.cosmicjs.com/uploads/aba1ffe0-6872-11e6-84c1-418a1c27cf43-new-page.png\"><span style=\"line-height: 20px;\"><br></span></p><p style=\"text-align: left;\"><span style=\"line-height: 20px;\">Let's say we also wanted to add the company's social links to Facebook, Twitter and LinkedIn.  This is really easy.  All we need to do is add a new <b>Socials</b> object in <b>Globals</b> and each social link will have its own text <i>metafield</i>.  It would look something like this:</span></p><p style=\"text-align: center;\"><img style=\"width: 536.506px; height: 565px;\" src=\"https://www.cosmicjs.com/uploads/cb74f8e0-6872-11e6-84c1-418a1c27cf43-edit-global.png\" data-filename=\"https://www.cosmicjs.com/uploads/cb74f8e0-6872-11e6-84c1-418a1c27cf43-edit-global.png\"><span style=\"line-height: 20px;\"><br></span></p><p style=\"text-align: left;\"><span style=\"line-height: 20px;\"><br></span></p><p style=\"text-align: left;\"><span style=\"line-height: 20px;\">As you can see, Cosmic makes it really easy to give your content editor the easiest and most intuitive content editing experience.  I hope you found these basic examples useful in getting started with user-first content development using Cosmic.  If you have any questions about how to further structure your content for easy handoff to content editors, please <a href=\"https://www.cosmicjs.com/community\">join our Slack channel</a>, or reach out to us on <a href=\"https://twitter.com/cosmic_js\" target=\"_blank\">Twitter</a>.</span></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p><span style=\"font-size: 14px; line-height: 1.42857;\">When building websites connected to a CMS, it is important that the content is structured as simply as possible for the end user to edit</span><span style=\"font-size: 14px; line-height: 1.42857;\">. &nbsp;I call this&nbsp;<i>user-first content development</i>. &nbsp;&nbsp;</span><span style=\"font-size: 14px; line-height: 1.42857;\">It benefits everyone – the content editor, the developer and the agency when the developer makes sure the content editor is empowered with the easiest and most intuitive way to manage content. &nbsp;This seems obvious, but this oversight happens all too often&nbsp;</span><span style=\"font-size: 14px; line-height: 1.42857;\">a</span><span style=\"font-size: 14px; line-height: 1.42857;\">nd results in confusion and ultimately a bad experience which is bad for everyone</span><span style=\"font-size: 14px; line-height: 1.42857;\">&nbsp;</span><span style=\"font-size: 14px; line-height: 1.42857;\">–</span><span style=\"font-size: 14px; line-height: 1.42857;\">&nbsp;</span><span style=\"font-size: 14px; line-height: 1.42857;\">the developer, the content editor and the agency.</span><br></p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created_at":"2016-08-23T14:15:18.627Z","created_by":"5357ef811693be2118000001","created":"2016-08-23T14:15:18.627Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p><span style=\"font-size: 14px; line-height: 1.42857;\">When building websites connected to a CMS, it is important that the content is structured as simply as possible for the end user to edit</span><span style=\"font-size: 14px; line-height: 1.42857;\">. &nbsp;I call this&nbsp;<i>user-first content development</i>. &nbsp;&nbsp;</span><span style=\"font-size: 14px; line-height: 1.42857;\">It benefits everyone – the content editor, the developer and the agency when the developer makes sure the content editor is empowered with the easiest and most intuitive way to manage content. &nbsp;This seems obvious, but this oversight happens all too often&nbsp;</span><span style=\"font-size: 14px; line-height: 1.42857;\">a</span><span style=\"font-size: 14px; line-height: 1.42857;\">nd results in confusion and ultimately a bad experience which is bad for everyone</span><span style=\"font-size: 14px; line-height: 1.42857;\">&nbsp;</span><span style=\"font-size: 14px; line-height: 1.42857;\">–</span><span style=\"font-size: 14px; line-height: 1.42857;\">&nbsp;</span><span style=\"font-size: 14px; line-height: 1.42857;\">the developer, the content editor and the agency.</span><br></p>"}},{"_id":"57b4727e58574f4823003ba5","order":185,"slug":"three-easy-steps-for-rapid-prototyping","title":"Three Easy Steps for Rapid Prototyping","content":"<p><span style=\"color: inherit; font-family: inherit; font-size: 18px;\"><img src=\"https://cosmicjs.imgix.net/6ae9e010-648c-11e6-807e-57b9ff6a6d02-cosmicjs-prototyping.jpg\" style=\"width: 1062px;\" class=\"fr-dii fr-draggable\"><br></span></p><p><span style=\"color: inherit; font-family: inherit; font-size: 18px;\">What is rapid prototyping?</span></p><p>Rapid prototyping is the process of quickly building a scale model for display to a client or partner, knowing that the prototype can be changed at a moment&#39;s notice. For a builder this could be an actual model, for a product it could be a mold model, and for an agency or development shop it could be a number of things. Many agencies will build rapid prototypes not just to display creative, websites &amp; apps for clients, but to win the business in the first place by demonstrating a certain level of commitment to and understanding of the product or service at hand. Rapid prototyping allows the development team to participate in a faster feedback loop to get the best possible product while allowing the client to participate in the process. The constraints are usually time, money &amp; technology infrastructure in terms of how that rapid prototype can be reviewed, and where.&nbsp;</p><h4 style=\"font-family: 'Open Sans', sans-serif; color: rgb(51, 51, 51);\"><br></h4><h4 style=\"font-family: 'Open Sans', sans-serif; color: rgb(51, 51, 51);\">How are agencies currently handling rapid prototyping?&nbsp;</h4><p>In the creative agency world, there are numerous ways in which agencies will display creative work for their clients. Some have built proprietary galleries online that display comps pixel for pixel, some still print creative on 11&quot; x 17&quot; PDFs &amp; others display a website example on a local server, hence forcing the clients of the agency to meet at the agency&#39;s offices for any type of digital presentation. There&#39;s nothing like displaying actual apps for clients to start planting vision seeds for how the creative will actually look and function in the wild. </p><h4 style=\"font-family: 'Open Sans', sans-serif; color: rgb(51, 51, 51);\"><br></h4><h4 style=\"font-family: 'Open Sans', sans-serif; color: rgb(51, 51, 51);\">Why use a web-based CMS?&nbsp;</h4><p>Cosmic is the ideal tool for rapid prototyping. Rather than displaying an idea for an application or website on your local server with the clients in your office for a brief meeting, or having printed screenshots of an app for display, simply build your app and quickly deploy on the Cosmic App Server, making it available for review on any device that has an internet connection. The client(s) having access anywhere allows them to provide feedback in real-time while also allowing the agency to quickly iterate on a design, content piece or structural component. The app can then be edited according to the client&#39;s direction and re-deployed with a custom domain for actual usage by the client once the rapid prototyping phase is over.&nbsp;</p><h4 style=\"font-family: 'Open Sans', sans-serif; color: rgb(51, 51, 51);\"><br></h4><h4 style=\"font-family: 'Open Sans', sans-serif; color: rgb(51, 51, 51);\">Here are the three easy steps for agencies using Cosmic for rapid prototyping:</h4><p>1. Integrate your GitHub repo with Cosmic&nbsp;</p><p>2. Set up as many buckets as you would need for your rapid prototyping projects</p><p>3. Deploy buckets as the rapid prototype becomes ready for review&nbsp;</p><h4 style=\"font-family: 'Open Sans', sans-serif; color: rgb(51, 51, 51);\"><br></h4><h4 style=\"font-family: 'Open Sans', sans-serif; color: rgb(51, 51, 51);\">Here are the three reasons Cosmic is best-suited for rapid prototyping projects:</h4><p>1. No local server / stack set up to push to for display</p><p>2. Edit content in real time to adjust design accordingly (no lorem ipsum copy)</p><p>3. Once the rapid prototype is complete and approved, deploy on the Cosmic App Server with a custom domain</p><p>For more information on why <a href=\"https://www.cosmicjs.com/\" target=\"_blank\">Cosmic</a> is the best solution for your rapid prototyping needs, read <a href=\"https://www.cosmicjs.com/blog/the-cosmic-stack\" target=\"_blank\">The Cosmic Stack</a> to see the simplest content management stack on the market.</p><p><a href=\"https://www.cosmicjs.com/\" target=\"_blank\">Cosmic</a> is an <a href=\"https://www.cosmicjs.com/\" target=\"_blank\">API-first cloud-based CMS</a> that gives developers and agencies <a href=\"https://www.cosmicjs.com/features\" target=\"_blank\">portable, scalable &amp; flexible content management solutions</a> through its API that converts all content into JSON objects for consumption on any internet-connected device.&nbsp;</p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>Rapid prototyping is the process of quickly building a scale model for display to a client or partner, knowing that the prototype can be changed at a moment&#39;s notice. For a builder this could be an actual model, for a product it could be a mold model, and for an agency or development shop it could be a number of things. Many agencies will build rapid prototypes not just to display creative, websites &amp; apps for clients, but to win the business in the first place by demonstrating a certain level of commitment to and understanding of the product or service at hand. Rapid prototyping allows the development team to participate in a faster feedback loop to get the best possible product while allowing the client to participate in the process. The constraints are usually time, money &amp; technology infrastructure in terms of how that rapid prototype can be reviewed, and where. </p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"6ae9e010-648c-11e6-807e-57b9ff6a6d02-cosmicjs-prototyping.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/6ae9e010-648c-11e6-807e-57b9ff6a6d02-cosmicjs-prototyping.jpg","imgix_url":"https://imgix.cosmicjs.com/6ae9e010-648c-11e6-807e-57b9ff6a6d02-cosmicjs-prototyping.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2016-08-17T14:19:42.623Z","status":"published","modified":"2016-08-21T03:50:34.367Z","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>Rapid prototyping is the process of quickly building a scale model for display to a client or partner, knowing that the prototype can be changed at a moment&#39;s notice. For a builder this could be an actual model, for a product it could be a mold model, and for an agency or development shop it could be a number of things. Many agencies will build rapid prototypes not just to display creative, websites &amp; apps for clients, but to win the business in the first place by demonstrating a certain level of commitment to and understanding of the product or service at hand. Rapid prototyping allows the development team to participate in a faster feedback loop to get the best possible product while allowing the client to participate in the process. The constraints are usually time, money &amp; technology infrastructure in terms of how that rapid prototype can be reviewed, and where. </p>","featured_image":{"url":"https://cdn.cosmicjs.com/6ae9e010-648c-11e6-807e-57b9ff6a6d02-cosmicjs-prototyping.jpg","imgix_url":"https://imgix.cosmicjs.com/6ae9e010-648c-11e6-807e-57b9ff6a6d02-cosmicjs-prototyping.jpg"}}},{"_id":"57a9edeb34d05c0c23000fe6","order":186,"slug":"three-ways-to-use-the-cosmic-stack","title":"Three Ways to Use The Cosmic Stack ","content":"<p><img src=\"https://www.cosmicjs.com/uploads/deefe380-5e40-11e6-89ef-3ff7807a5a96-db.jpg\" style=\"width: 1058px;\"><br></p><p>In last week's article, Tony told us about the ingredients in <a href=\"https://www.cosmicjs.com/blog/the-cosmic-stack\" target=\"_blank\">The Cosmic Stack</a>, why it is so powerful and what its benefits are. Now that we've seen what The Cosmic Stack looks like, let's look at how we can customize our use of it. </p><p>From a high level, you have three basic ways to use The Cosmic Stack. You have flexibility to use just the CMS API, the CMS API and your own app hosted on the Cosmic app server, or the CMS API with a pre-built content-ready app hosted on the Cosmic App Server.<br></p><h4 style=\"font-family: 'Open Sans', sans-serif; color: rgb(51, 51, 51);\"><span style=\"font-weight: bold; color: inherit; font-family: inherit; font-size: 24px;\"><br></span></h4><h4 style=\"font-family: 'Open Sans', sans-serif; color: rgb(51, 51, 51);\"><span style=\"font-weight: bold; color: inherit; font-family: inherit; font-size: 24px;\">1. Manage Content </span></h4><h4 style=\"font-family: 'Open Sans', sans-serif; color: rgb(51, 51, 51);\"><span style=\"font-weight: bold; font-size: 14px;\">Stack: </span></h4><div><div>GitHub Repo</div><div>Hosting Server</div><div>Cosmic CMS API</div></div><div><br></div><div><a href=\"https://www.datalyze-solutions.com/blog/#/\" target=\"_blank\">See how Datalyze Solutions uses Cosmic to power their blog. </a></div><p>This scenario will require a developer to sync the Cosmic API to your website or application. From then on, content managers can syndicate content to their heart's content. <a href=\"https://www.cosmicjs.com/getting-started\" target=\"_blank\">We've provided Client libraries to help you easily manage content for your website or app. </a><br></p><div><br></div><div><span style=\"font-weight: bold; font-size: 24px;\">2. Build, Deploy, Host & Manage Content </span><br></div><div><div><span style=\"font-weight: bold;\">Stack:</span><br></div><div>GitHub repo</div><div>Cosmic CMS API</div><div>Cosmic App Server</div></div><div><br></div><div><a href=\"http://www.ops-conf.com/\" target=\"_blank\">See how Ops Conf uses Cosmic to power their conference community app.</a></div><p>This scenario will require a developer to integrate your GitHub account with Cosmic & deploy the app. Content managers can get a head start in their dashboard while the dev team polishes the app's code in GitHub. <a href=\"https://www.cosmicjs.com/blog/how-to-deploy-a-website-with-a-custom-domain-using-cosmic-js\" target=\"_blank\">Read more on app deployment and hosting through Cosmic. </a><br></p><div><br></div><div><span style=\"font-weight: bold; font-size: 24px;\">3. Deploy & Manage Pre-Built Apps </span><br></div><div><span style=\"font-weight: bold;\">Stack: </span><br></div><div><div>Cosmic CMS API</div><div>Cosmic App Server</div></div><div><br></div><div>This scenario only requires anyone who likes an app and wants to see it online for their business, association or portfolio. <a href=\"https://www.cosmicjs.com/apps\" target=\"_blank\">Browse our content-ready apps.</a></div><div><br></div><div><a href=\"https://www.cosmicjs.com/blog/the-cosmic-stack\" target=\"_blank\">The Cosmic Stack</a> is flexible for teams & companies. Build, deploy, host, update, or simply customize your Cosmic Stack to fit your team's needs. We built <a href=\"https://www.cosmicjs.com/\" target=\"_blank\">Cosmic</a> for one reason: to simplify the content management stack while making developers and content editors happy by putting content first. <a href=\"https://www.cosmicjs.com/\" target=\"_blank\">Read their testimonials here. </a></div>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}},{"value":"<p>In last week's article, Tony told us about the ingredients in&nbsp;<a href=\"https://www.cosmicjs.com/blog/the-cosmic-stack\" target=\"_blank\">The Cosmic Stack</a>, why it is so powerful and what its benefits are. Now that we've seen what The Cosmic Stack looks like, let's look at how we can customize our use of it.&nbsp;</p><p>From a high level, you have three basic ways to use The Cosmic Stack. You have flexibility to use just the CMS API, the CMS API and your own app hosted on the Cosmic app server, or the CMS API with a pre-built content-ready app hosted on the Cosmic App Server.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2016-08-09T14:51:23.219Z","status":"published","modified":"2016-08-21T03:53:05.215Z","modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}},"teaser":"<p>In last week's article, Tony told us about the ingredients in&nbsp;<a href=\"https://www.cosmicjs.com/blog/the-cosmic-stack\" target=\"_blank\">The Cosmic Stack</a>, why it is so powerful and what its benefits are. Now that we've seen what The Cosmic Stack looks like, let's look at how we can customize our use of it.&nbsp;</p><p>From a high level, you have three basic ways to use The Cosmic Stack. You have flexibility to use just the CMS API, the CMS API and your own app hosted on the Cosmic app server, or the CMS API with a pre-built content-ready app hosted on the Cosmic App Server.</p>"}},{"_id":"57a241d13cbfe3912400061f","order":187,"slug":"the-cosmic-stack","title":"The Cosmic Stack","content":"<p>There is a powerful trend happening in technology. &nbsp;It is a shift from confined, installed systems into a more free, micro-services economy. &nbsp;This can be seen in the consumer space from people choosing to stream music instead of downloading MP3s, choosing to Uber to work rather than drive their personal car and people choosing to order groceries to their door from Amazon instead of going to the grocery store.</p><p><span style=\"line-height: 1.42857;\">Cosmic is taking this empowering concept to&nbsp;web development.</span></p><p><span style=\"line-height: 1.42857;\"><img src=\"https://www.cosmicjs.com/uploads/b769cda0-5a65-11e6-a9f5-2fe979b67940-4e8920f0-59f8-11e6-bebd-b9ba100b2b07-cosmic-stack.jpg\" style=\"width: 1381px;\" class=\"fr-dii fr-draggable\">We no longer need nor should we be putting our content in a box. &nbsp;There is a vast array of devices from desktop to mobile to watches to cars that need flexible and easily accessible content. &nbsp;The only way to provide content to these destinations is to start our content in the place it will eventually need to go: the API. &nbsp;</span><span style=\"line-height: 1.42857;\">Cosmic provides you with a powerful CMS API that will scale your digital properties and your business.</span><br></p><h3><span style=\"line-height: 1.42857;\">What does the Cosmic Stack look like?</span></h3><p><span style=\"line-height: 1.42857;\">Since we have seen&nbsp;</span><span style=\"line-height: 20px;\">enormous</span><span style=\"line-height: 1.42857;\">&nbsp;benefits by removing the installed CMS, we decided to remove web hosting as well. &nbsp;Now your application stack only needs the Cosmic CMS API and a code repository. &nbsp;What was once a mess of connections between various applications and servers is now boiled down to simply:</span></p><p><span style=\"line-height: 1.42857;\">1. GitHub repo<br></span><span style=\"line-height: 1.42857;\">2. Cosmic CMS API<br></span>3. Cosmic app server</p><h3><span style=\"line-height: 1.42857;\">Why is this so powerful?</span></h3><p>The Cosmic Stack is big because you no longer need to maintain or configure infrastructure for your website or app. &nbsp;You now only have two places to review work, Cosmic and GitHub. &nbsp;No longer do you have to worry about code being deployed improperly or someone pushing up the wrong branch to your hosted server. &nbsp;Everything is set to be put into a process of checks and balances within your team. &nbsp;No longer do you have to worry about files or data being out of sync between testing, staging and live instances. &nbsp;All content, data and files are synced to the Cosmic API.</p><h3>What&rsquo;s the benefit?</h3><p>The benefit is in development hours saved and sanity. &nbsp;No installation. &nbsp;No configuration. &nbsp;Just content and code. &nbsp;Your content is hosted in Cosmic and your code is pushed from your GitHub repo to the Cosmic app server.</p><p>Some folks using the Cosmic Stack have reported a 75% reduction in dev time spent and an overall faster, less complicated and more streamlined development process.</p><p>The Cosmic Stack helps teams be more efficient and can dramatically increase your project&#39;s bottom line. &nbsp;<span style=\"line-height: 1.42857;\">Try the Cosmic Stack out and let us know what you think. &nbsp;<a href=\"https://www.cosmicjs.com/community\" target=\"_blank\">Join us on our Slack channel</a> or <a href=\"https://twitter.com/tonyspiro\" target=\"_blank\">reach out to me on twitter</a>. &nbsp;I look forward to seeing what you build!</span></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":null,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"value":"<p>There is a powerful trend happening in technology. &nbsp;It is a shift from confined, installed systems into a more free, micro-services economy. &nbsp;This can be seen in the consumer space from people choosing to stream music instead of downloading MP3s, choosing to Uber to work rather than drive their personal car and people choosing to order groceries to their door from Amazon instead of going to the grocery store.</p>","key":"teaser","title":"Teaser","type":"html-textarea","children":null},{"value":"deefe380-5e40-11e6-89ef-3ff7807a5a96-db.jpg","key":"featured_image","title":"Featured Image","type":"file","children":null,"url":"https://cdn.cosmicjs.com/deefe380-5e40-11e6-89ef-3ff7807a5a96-db.jpg","imgix_url":"https://imgix.cosmicjs.com/deefe380-5e40-11e6-89ef-3ff7807a5a96-db.jpg"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2016-08-04T19:11:13.127Z","status":"published","modified":"2016-08-21T03:53:24.254Z","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5716b504e9c686d006000073","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p>There is a powerful trend happening in technology. &nbsp;It is a shift from confined, installed systems into a more free, micro-services economy. &nbsp;This can be seen in the consumer space from people choosing to stream music instead of downloading MP3s, choosing to Uber to work rather than drive their personal car and people choosing to order groceries to their door from Amazon instead of going to the grocery store.</p>","featured_image":{"url":"https://cdn.cosmicjs.com/deefe380-5e40-11e6-89ef-3ff7807a5a96-db.jpg","imgix_url":"https://imgix.cosmicjs.com/deefe380-5e40-11e6-89ef-3ff7807a5a96-db.jpg"}}},{"_id":"578e1fc465ca0db05c000b40","order":188,"slug":"were-live-on-product-hunt","title":"We're Live on Product Hunt!","content":"<p><a href=\"https://www.producthunt.com/tech/cosmic-js\" target=\"_blank\"><img src=\"https://cosmicjs.imgix.net/14a03230-4dae-11e6-a4cd-ff7ddd3d0cad-0c9a3347-0342-4318-b4bd-a781f16bb401.png?w=800\" style=\"width: 1130px;\"></a><br></p><p>The big day has arrived, we are now on Product Hunt&nbsp;announcing our Public Beta! &nbsp;We would love for you to show your support and go&nbsp;to <a href=\"https://www.producthunt.com/tech/cosmic-js\" target=\"_blank\">https://www.producthunt.com/tech/cosmic-js</a> and upvote! &nbsp;<span style=\"line-height: 1.42857;\">Also, after you vote, click \"Get It\" for $20 credit towards your Cosmic account. &nbsp;Just a little something to say thank you for all of the generous support and feedback!</span></p><p><br>Cheers,<br>Tony Spiro | Carson Gibbons<br>Cosmic Founders<br></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2016-07-19T12:40:36.935Z","status":"published","modified":"2016-07-19T12:44:26.597Z","modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}},{"_id":"578585b41621de245c0002d2","order":189,"slug":"cosmic-js-founders-featured-on-the-next-level-show","title":"Cosmic Founders Featured on The Next Level Show","content":"<p><img src=\"https://www.cosmicjs.com/uploads/585701a0-4905-11e6-ada5-1f77e5b8f86d-Carson-and-Tony-in-the-studio-med.jpg\" style=\"max-width: 640px; width: 100%\"><br></p><p><a href=\"https://www.cosmicjs.com\" target=\"_blank\">Cosmic</a> Founders <a href=\"https://twitter.com/tonyspiro\" target=\"_blank\">Tony Spiro</a> and <a href=\"https://twitter.com/carsoncgibbons\" target=\"_blank\">Carson Gibbons</a> were featured on <a href=\"http://nextlevelshow.com\" target=\"_blank\">The Next Level Show</a>, a Dallas-based business talk show that features Founders and CEOs. The founders discussed their historical pain points with installed content management systems, as well as their partnership, private beta updates, and the frontier of cloud-based CMS APIs that both speed up the development cycle and add to the bottom line. Stream the audio file or watch the interview <a href=\"http://nextlevelshow.com/tony-spiro-and-carson-gibbons/\" target=\"_blank\">here</a>.<br></p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2016-07-13T00:05:08.405Z","status":"published","modified":"2016-07-13T14:35:26.208Z","modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}}}},{"_id":"577f9cf75182ae8134000a15","order":190,"slug":"video-tutorial-one-click-ssl","title":"Video Tutorial: One-Click SSL","content":"<p>Adding SSL to your website couldn't be easier with Cosmic. &nbsp;Simply go to your bucket &gt; Settings &gt; Deploy Web App &gt; Add SSL to Domains and click the \"Add SSL\" button (upgrade if necessary). &nbsp;In a few seconds, all of your domains and subdomains on your deployed application will have the security of SSL from Let's Encrypt. &nbsp;Plus the certs will automatically renew, so you will never have to update your SSL again! &nbsp;Here is a short tutorial to show you how easy it is:</p><p><iframe src=\"//www.youtube.com/embed/I1L3U8CRlR0\" width=\"640\" height=\"360\" frameborder=\"0\"></iframe><br></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2016-07-08T12:30:47.224Z","status":"published","modified":"2016-07-08T14:03:57.696Z","modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}},{"_id":"577ac40a187f34166b00000b","order":191,"slug":"video-tutorial-localization","title":"Video Tutorial: Localization","content":"<p>In this video I walk you through adding localization to your Cosmic object types. &nbsp;This allows you to add versions of your content in different languages and locales.</p><p>There is also a Localization Example App available on the &nbsp;<a href=\"https://www.cosmicjs.com/apps\" target=\"_blank\">Cosmic Apps page</a>.</p><p><iframe src=\"//www.youtube.com/embed/e0rQ8m9Wse0\" width=\"640\" height=\"360\" frameborder=\"0\"></iframe><br></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2016-07-06T20:16:10.011Z","status":"published","modified":"2016-07-06T14:04:49.881Z","modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}},{"_id":"577ac48c187f34166b00000c","order":192,"slug":"video-tutorial-webhooks","title":"Video Tutorial: Webhooks","content":"<p>In this video tutorial, I show you how to add webhooks to your Cosmic bucket. &nbsp;Cosmic makes it easy for you to add webhooks, allowing you to send data to the endpoints of your choice whenever content is changed. &nbsp;This is useful for triggering static site builds, posting a message on Slack, or communicating with any 3rd party API whenever content has changed in your bucket.</p><p><iframe src=\"//www.youtube.com/embed/jWtGUIgtRfI\" width=\"640\" height=\"360\" frameborder=\"0\"></iframe><br></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2016-07-05T20:18:20.450Z","status":"published","modified":"2016-07-05T13:39:31.820Z","modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}},{"_id":"576838e4163172890e000029","order":194,"slug":"cms-woes-how-a-brand-manager-found-a-cloud-based-solution","title":"CMS Woes? How A Brand Manager Found a Cloud-Based Solution ","content":"<p><span style=\"line-height: 1.42857;\"><img src=\"https://cosmicjs.imgix.net/96e58570-37c8-11e6-8e0a-3b2dfab18a76-download.png\" style=\"width: 909px;\"></span></p><p><span style=\"line-height: 1.42857;\">Brand Managers manage, well, brands. &nbsp;Seems simple enough right? &nbsp;It does in title and theory alone. &nbsp;Managing a brand means managing the brand’s tone, voice, messaging, consumer segmentation, price points, marketing, advertising and all of the subsequent elements and assets that fall out of such an engagement. &nbsp;Having managed brands for years myself, I can attest to the magnitude of the job at hand. &nbsp;Once the client has agreed upon a general direction, it becomes the brand manager’s responsibility to ignite passion and results from the internal agency team that services the account. &nbsp;As my workload would increase month over month as business heated up or an account was grown, I went through the whole Automation | Delegation | Elimination routine to see what I could cut out of my schedule as busy work. &nbsp;The problem? &nbsp;I was only one person. &nbsp;I could only affect hours tallies on my end, but had little to no influence over design, development, copywriting &amp; production.&nbsp;</span><br></p><p><br><span style=\"line-height: 1.42857;\">The area that always seemed to be the weak link in terms of staying on budget was in development. &nbsp;Boutique agencies struggle to attract qualified talent with their long work hours and subpar compensation, and then after taking a gamble on a more junior talent that is developed over time, retention is a beating. &nbsp;Companies line up with development jobs that pay 2X, sometimes 3X what a boutique agency is willing to part with for that developer’s compensation package. &nbsp;This is all before taking into account staging servers, hosting servers, CMS logins, local installations of CMS systems and all of the red tape and bureaucracy associated that can bog down a productive workflow. &nbsp;As a result, my quotes back to clients for websites, microsite, landing pages and applications were always a bit higher than they were expecting. &nbsp;I started searching for a </span><a href=\"https://www.cosmicjs.com\" target=\"_blank\" style=\"line-height: 1.42857; background-color: rgb(255, 255, 255);\">cloud-based solution</a><span style=\"line-height: 1.42857;\"> to my CMS woes to cut out some of the middle men and see if there was an easier way to 'get this digital property live'.&nbsp;<br></span><span style=\"line-height: 1.42857;\"><br>I found&nbsp;</span><a href=\"https://www.cosmicjs.com\" target=\"_blank\" style=\"line-height: 1.42857; background-color: rgb(255, 255, 255);\">Cosmic</a><span style=\"line-height: 1.42857;\">. &nbsp;Had I been told as a Brand Manager that I could eliminate the local CMS, the hosting server and the shared logins of content editing, I would have seen the value immediately. &nbsp;No longer having to build APIs on a per-CMS / per-client basis, no longer having to build out a proprietary backend, yet still attaining the same custom-value would have been a lifesaver and a half for a brand manager focused on the bottom line. &nbsp;It would have easily cut my back end developers’ hours estimates by 40%, eliminated costly hosting servers and would have streamlined content-centric employees within the agency to not have to deal with the red tape of updating content within a traditional CMS.&nbsp;<br></span><span style=\"line-height: 1.42857;\"><br>Whether we picked out a </span><a href=\"https://www.cosmicjs.com/apps\" target=\"_blank\" style=\"line-height: 1.42857; background-color: rgb(255, 255, 255);\">content-ready application</a><span style=\"line-height: 1.42857;\"> or plugged </span><a href=\"https://github.com/cosmicjs/cosmicjs-node\" target=\"_blank\" style=\"line-height: 1.42857; background-color: rgb(255, 255, 255);\">GitHub</a><span style=\"line-height: 1.42857;\"> into </span><a href=\"https://www.cosmicjs.com\" target=\"_blank\" style=\"line-height: 1.42857; background-color: rgb(255, 255, 255);\">Cosmic</a><span style=\"line-height: 1.42857;\">, I’m seeing time and cost savings at every turn. &nbsp;Music to a brand manager’s ears, and music to a boutique agency’s margin and bottom line. &nbsp;As it turns out, it also benefits the client as their content is put first, their content is pushed live more quickly and is devourable globally on any device.</span></p><p><span style=\"font-kerning: none\"></span></p>","metafields":[{"object_type":"authors","value":"5768b27f163172890e00002e","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z"}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2016-06-20T18:41:40.761Z","status":"published","modified":"2016-06-21T15:57:52.964Z","modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b27f163172890e00002e","slug":"carson-gibbons","title":"Carson Gibbons","content":"","metafields":[{"value":"e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","key":"profile_picture","title":"Profile Picture","type":"file","children":null,"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},{"value":"carsongibbons","key":"username","title":"Username","type":"text","children":null}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:20:31.394Z","status":"published","modified_at":"2019-06-05T14:20:53.314Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2019-06-05T14:20:53.314Z","metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg","imgix_url":"https://imgix.cosmicjs.com/e1ff6690-231f-11e8-a5ff-2f0fc8889184-7yVDmZBl_400x400.jpg"},"username":"carsongibbons"}}}},{"_id":"575dd542cfc2ed6e1200001f","order":195,"slug":"how-to-deploy-a-website-with-a-custom-domain-using-cosmic-js","title":"How to Deploy a Website with a Custom Domain Using Cosmic","content":"<h2><strong>Update</strong></h2><blockquote><p>This article goes over features (web deployment, custom domains) that are now deprecated. We now recommend that you deploy your websites and apps to your preferred hosting providers.</p></blockquote><p><br></p><p><span class=\"author-d-4z65zz66zl57z75zyiz66zfr2fz87zwz89znuiz90zz77zz79zb12uz122zz79z5z75zz84zvz86zz122zz84z4ik4z69zz72zk9p0z82zz89zi\">Cosmic is a powerful CMS API that allows you to manage content for your websites and applications faster and easier. &nbsp;But did you know that you can also use Cosmic to deploy code to your website (in any language) from any GitHub repository? &nbsp;In addition to deploying content and code, starting today you can also add unlimited domains to your deployed application. &nbsp;This is revolutionary because it means that moving forward all you need to launch your website is a git repository, a domain name provider and Cosmic! &nbsp;No more hosting server necessary! &nbsp;I&rsquo;ve added a couple of screencasts for your viewing. &nbsp;Let&rsquo;s get started.</span></p><div><h3 style='font-family: \"Open Sans\", sans-serif; color: rgb(51, 51, 51);'><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><iframe src=\"https://www.youtube.com/embed/9lYbC3eBo2A\" width=\"640\" height=\"360\" frameborder=\"0\" style=\"font-size: 14px; line-height: 20px;\"></iframe></span></h3></div><h3 style='font-family: \"Open Sans\", sans-serif; color: rgb(51, 51, 51);'>Create a Bucket</h3><div>After <a href=\"https://www.cosmicjs.com/login\" target=\"_blank\">logging in to your Cosmic account</a>, create a new bucket. &nbsp;After creating your new bucket, you will be prompted to install an app.</div><h3 style='font-family: \"Open Sans\", sans-serif; color: rgb(51, 51, 51);'>Install an App</h3><div>Let&#39;s go ahead and install an app, but you could just as easily skip this step and deploy your own application pointed to your Cosmic bucket. &nbsp;After installing your app, you will be prompted to deploy the application.</div><div><h3>Deploy the App</h3><div>Next click &quot;Deploy Web App&quot; to launch the web application to <code style=\"font-size: 12.6px;\">http://[your-bucket-slug].cosmicapp.co</code>. &nbsp;<span class=\"author-d-4z65zz66zl57z75zyiz66zfr2fz87zwz89znuiz90zz77zz79zb12uz122zz79z5z75zz84zvz86zz122zz84z4ik4z69zz72zk9p0z82zz89zi\" style=\"line-height: 1.42857;\">Once you do this it will take&nbsp;</span><span class=\"author-d-4z65zz66zl57z75zyiz66zfr2fz87zwz89znuiz90zz77zz79zb12uz122zz79z5z75zz84zvz86zz122zz84z4ik4z69zz72zk9p0z82zz89zi b\" style=\"line-height: 1.42857;\">about a minute</span><span class=\"author-d-4z65zz66zl57z75zyiz66zfr2fz87zwz89znuiz90zz77zz79zb12uz122zz79z5z75zz84zvz86zz122zz84z4ik4z69zz72zk9p0z82zz89zi\" style=\"line-height: 1.42857;\">&nbsp;for the application to deploy on a custom instance of the Cosmic app server. &nbsp;While this is working&nbsp;</span><span class=\"author-d-4z65zz66zl57z75zyiz66zfr2fz87zwz89znuiz90zz77zz79zb12uz122zz79z5z75zz84zvz86zz122zz84z4ik4z69zz72zk9p0z82zz89zi b\" style=\"line-height: 1.42857;\">its</span><span class=\"author-d-4z65zz66zl57z75zyiz66zfr2fz87zwz89znuiz90zz77zz79zb12uz122zz79z5z75zz84zvz86zz122zz84z4ik4z69zz72zk9p0z82zz89zi\" style=\"line-height: 1.42857;\">&nbsp;magic, let&#39;s add our custom domains&hellip;</span></div></div><h3 style='font-family: \"Open Sans\", sans-serif; color: rgb(51, 51, 51);'><span class=\"fr-video fr-fvc fr-dvi fr-draggable\" contenteditable=\"false\"><iframe src=\"https://www.youtube.com/embed/xlphcQ32YHM\" width=\"640\" height=\"360\" frameborder=\"0\" style=\"font-size: 14px; line-height: 1.42857;\"></iframe></span></h3><h3 style='font-family: \"Open Sans\", sans-serif; color: rgb(51, 51, 51);'>Add Custom Domains</h3><div><span class=\"author-d-4z65zz66zl57z75zyiz66zfr2fz87zwz89znuiz90zz77zz79zb12uz122zz79z5z75zz84zvz86zz122zz84z4ik4z69zz72zk9p0z82zz89zi\">The Cosmic app server subdomain is great for development and staging, but when you go live, you&#39;re going to want to add our own custom domains. &nbsp;Cosmic makes this incredibly easy by providing the option to add custom domains to your deployed application. &nbsp;Here are the 4 easy steps:</span><br></div><div><br></div><div>1. Go to Settings &gt; Deploy Web App &gt; Add Custom Domains (upgrade your account if needed)</div><div>2. Add your custom domains</div><div>3. Click &quot;Set Domains&quot;</div><div>4. Go to your domain name registrar&#39;s website and point your A Name Records to the Cosmic app server located at <code style=\"font-size: 12.6px;\">162.243.13.186</code></div><div><br></div><div><div><span class=\"author-d-4z65zz66zl57z75zyiz66zfr2fz87zwz89znuiz90zz77zz79zb12uz122zz79z5z75zz84zvz86zz122zz84z4ik4z69zz72zk9p0z82zz89zi\">Now navigate to your domain and notice that you now have your application hosted at your custom domain! &nbsp;Add as many domains / subdomains as you need! &nbsp;Whenever you need to deploy changes to the app, just push the changes up to your GitHub repository and click &quot;Redeploy Web App&quot;.</span></div><div><span class=\"author-d-4z65zz66zl57z75zyiz66zfr2fz87zwz89znuiz90zz77zz79zb12uz122zz79z5z75zz84zvz86zz122zz84z4ik4z69zz72zk9p0z82zz89zi\"><br></span></div><div><span class=\"author-d-4z65zz66zl57z75zyiz66zfr2fz87zwz89znuiz90zz77zz79zb12uz122zz79z5z75zz84zvz86zz122zz84z4ik4z69zz72zk9p0z82zz89zi\">Cosmic now gives you the power to deploy a website faster and more nimbly than any other system. &nbsp;And all you need is a git repository, a domain name provider and Cosmic!</span></div></div>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"b5LDPUHcqL","value":"5768b253163172890e00002c","object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"18jc7zAuU0","value":""},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"lVqS2ZMBCT","value":"","url":null,"imgix_url":null},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"fPwf0lIVF8","value":""},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"XVscCXAtKv","value":""}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2016-06-14T21:33:54.237Z","status":"published","modified":"2016-06-21T03:22:05.064Z","modified_at":"2020-10-02T02:07:53.246Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2020-09-26T21:29:20.160Z","unpublish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"","featured_image":{"url":null,"imgix_url":null},"seo_meta_description":"","published_date":""}},{"_id":"573dcc4a174961562c000015","order":196,"slug":"imgix-image-processing-now-available-on-cosmic-js","title":"Imgix Image Processing Now Available on Cosmic","content":"<p><a href=\"https://www.imgix.com/\" style=\"line-height: 1.42857; background-color: rgb(255, 255, 255);\" target=\"_blank\">Imgix</a><span style=\"line-height: 1.42857;\">&nbsp;is an image processing service that gives you some serious power when it comes to handling images for your websites and apps. &nbsp;Their dynamic image processing API lets you crop, scale, rotate, watermark, add style and more to your images</span>\r\n<span style=\"line-height: 1.42857;\">by&nbsp;</span><span style=\"line-height: 1.42857;\">simply adding a query string to the image url.</span></p><p><span style=\"line-height: 1.42857;\">I&#39;m happy to say that Imgix processing is now available for all your images uploaded to Cosmic! &nbsp;Just look for the additional property (</span><span style=\"line-height: 1.42857;\"><code>imgix_url</code></span>\r\n<span style=\"line-height: 1.42857;\">) in your bucket&#39;s API endpoints and you can begin using this powerful image processing service.</span></p><h4><br><span style=\"line-height: 1.42857;\">Here&#39;s an example:</span></h4><div>Let&#39;s say you have a very large image:</div><p><a href=\"https://imgix.cosmicjs.com/14f4f800-48c1-11ed-a07b-05c6717a9348-sebastian-unrau-sp-p7uuT0tw-unsplash-1.jpg\" rel=\"noopener noreferrer\" target=\"_blank\">https://imgix.cosmicjs.com/14f4f800-48c1-11ed-a07b-05c6717a9348-sebastian-unrau-sp-p7uuT0tw-unsplash-1.jpg</a></p><p>And you need the same image in a different size to accommodate mobile devices with lower bandwidth. &nbsp;With the power of Cosmic and Imgix all you need to do is add <code>?w=500</code> to the end of the <code>imgix_url</code> and you now have a 500 pixel wide image, perfect for mobile devices!</p><p><a href=\"https://imgix.cosmicjs.com/14f4f800-48c1-11ed-a07b-05c6717a9348-sebastian-unrau-sp-p7uuT0tw-unsplash-1.jpg?w=500\" rel=\"noopener noreferrer\" style=\"line-height: 1.42857; background-color: rgb(255, 255, 255);\" target=\"_blank\">https://imgix.cosmicjs.com/14f4f800-48c1-11ed-a07b-05c6717a9348-sebastian-unrau-sp-p7uuT0tw-unsplash-1.jpg?w=500</a></p><p><span style=\"line-height: 1.42857;\">Imgix is normally a paid service, but we are giving it to you&nbsp;</span><span style=\"line-height: 1.42857; font-weight: bold;\">for free&nbsp;</span><span style=\"line-height: 1.42857;\">for all free and paid Cosmic plans. &nbsp;</span></p><p><a href=\"https://www.cosmicjs.com/login\" style=\"line-height: 1.42857; background-color: rgb(255, 255, 255);\" target=\"\">Log in</a><span style=\"line-height: 1.42857;\">&nbsp;or&nbsp;</span><a href=\"https://www.cosmicjs.com/signup\" style=\"line-height: 1.42857; background-color: rgb(255, 255, 255);\" target=\"\">sign up</a><span style=\"line-height: 1.42857;\">&nbsp;for Cosmic&nbsp;</span><span style=\"line-height: 1.42857;\">to manage content for</span><span style=\"line-height: 1.42857;\">&nbsp;</span><span style=\"line-height: 1.42857;\">your</span>\r\n<span style=\"line-height: 1.42857;\">websites and apps faster and easier, now with the dynamic power of Imgix!</span></p>","metafields":[{"children":null,"type":"object","title":"Author","key":"author","id":"ZLYbf8OssP","value":"5768b253163172890e00002c","object_type":"authors","object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}},{"children":null,"type":"html-textarea","title":"Teaser","key":"teaser","id":"DqptQdclui","value":"<p><span style=\"line-height: 1.42857;\">I&#39;m happy to say that Imgix processing is now available for all your images uploaded to Cosmic!</span></p>"},{"children":null,"type":"file","title":"Featured Image","key":"featured_image","id":"wpUvMCZnUj","value":"14f4f800-48c1-11ed-a07b-05c6717a9348-sebastian-unrau-sp-p7uuT0tw-unsplash-1.jpg","url":"https://cdn.cosmicjs.com/14f4f800-48c1-11ed-a07b-05c6717a9348-sebastian-unrau-sp-p7uuT0tw-unsplash-1.jpg","imgix_url":"https://imgix.cosmicjs.com/14f4f800-48c1-11ed-a07b-05c6717a9348-sebastian-unrau-sp-p7uuT0tw-unsplash-1.jpg"},{"children":null,"type":"textarea","title":"SEO Meta Description","key":"seo_meta_description","id":"u1fZZGXNKu","value":"I'm happy to say that Imgix processing is now available for all your images uploaded to Cosmic!"},{"children":null,"type":"date","title":"Published Date","key":"published_date","id":"UBq4P4WgtW","value":"2016-05-24"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2016-05-24T14:23:06.823Z","status":"published","modified":"2016-06-21T03:22:15.699Z","modified_at":"2022-10-11T14:18:17.786Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-10-11T14:18:17.786Z","unpublish_at":null,"metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}},"teaser":"<p><span style=\"line-height: 1.42857;\">I&#39;m happy to say that Imgix processing is now available for all your images uploaded to Cosmic!</span></p>","featured_image":{"url":"https://cdn.cosmicjs.com/14f4f800-48c1-11ed-a07b-05c6717a9348-sebastian-unrau-sp-p7uuT0tw-unsplash-1.jpg","imgix_url":"https://imgix.cosmicjs.com/14f4f800-48c1-11ed-a07b-05c6717a9348-sebastian-unrau-sp-p7uuT0tw-unsplash-1.jpg"},"seo_meta_description":"I'm happy to say that Imgix processing is now available for all your images uploaded to Cosmic!","published_date":"2016-05-24"}},{"_id":"57262d88c6a2d0a20a000001","order":197,"slug":"new-feature-deploy-private-github-repos-to-the-web","title":"New Feature: Deploy Private GitHub Repos to the Web","content":"<p>You can now use&nbsp;<span style=\"line-height: 1.42857;\">Cosmic to&nbsp;</span><span style=\"line-height: 1.42857;\">deploy your&nbsp;</span><span style=\"line-height: 1.42857;\">GitHub </span><span style=\"line-height: 1.42857;\">private repos</span><span style=\"line-height: 1.42857;\">&nbsp;to the web. &nbsp;All you have to do is </span><a href=\"https://www.cosmicjs.com/signup\" target=\"_blank\" style=\"line-height: 1.42857; background-color: rgb(255, 255, 255);\">sign up </a><span style=\"line-height: 1.42857;\">or </span><a href=\"https://www.cosmicjs.com/login\" target=\"_blank\" style=\"line-height: 1.42857; background-color: rgb(255, 255, 255);\">sign in</a><span style=\"line-height: 1.42857;\"> using your GitHub account and authorize access to your private repos. (Don't worry, we only access your private repos when you are ready to deploy them to the web).</span></p><p><img src=\"https://www.cosmicjs.com/uploads/e8ecb620-0fc5-11e6-8705-db68e8821ac0-github-access.png\" style=\"width: 100%; max-width: 622px;\"><br></p><p>After you authorize access the process is super easy. &nbsp;Just go to <span style=\"font-weight: bold;\">Your Bucket &gt; Settings &gt; Deploy Web App</span> and choose which private (or public) GitHub repo you would like to deploy.&nbsp;<span style=\"line-height: 1.42857;\">You can also deploy an app from any public Git repo url&nbsp;</span><span style=\"line-height: 1.42857;\">(make sure your app follows the </span><a href=\"https://devcenter.heroku.com/\" target=\"_blank\" style=\"line-height: 1.42857; background-color: rgb(255, 255, 255);\">Heroku deployment guidelines</a><span style=\"line-height: 1.42857;\">).</span></p><p><img src=\"https://www.cosmicjs.com/uploads/3c08c440-0fba-11e6-8705-db68e8821ac0-deploy.png\" style=\"width: 100%; max-width: 569px;\"><br></p><p>Click <span style=\"font-weight: bold;\">Deploy Web App</span> and your private repo will be deployed to the world!</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2016-05-01T16:23:36.041Z","status":"published","modified":"2016-06-21T03:31:23.380Z","modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}},{"_id":"56f0ca24b3c813ae11000026","order":199,"slug":"how-to-add-an-editable-news-feed-widget-to-your-website","title":"How to add an editable news feed widget to your website","content":"<p>Cosmic is great for hosting content for an entire website or application, but can also be used to add quick, dynamic content elements to any existing website. &nbsp;In this short tutorial, I'll show you how you can add a news feed widget to&nbsp;your website in a few short steps. &nbsp;Let's get to it:</p><p>1. <a href=\"https://www.cosmicjs.com/login\" target=\"\">Sign in</a> to your Cosmic account.</p><p>2. A<span style=\"line-height: 1.42857;\">fter signing in,</span><span style=\"line-height: 1.42857;\">&nbsp;select \"Add object type\" in the left side nav of your bucket's dashboard and&nbsp;</span><span style=\"line-height: 1.42857;\">c</span><span style=\"line-height: 1.42857;\">reate a \"News\" object type</span><span style=\"line-height: 1.42857;\">. &nbsp;Call the object type \"News\" (plural) and \"Article\" (</span><span style=\"line-height: 1.42857;\">singular)</span><span style=\"line-height: 1.42857;\">. &nbsp;Then add your articles (you can add content or metafields later, they're not required for this example).</span></p><p style=\"text-align: center; \"><img src=\"data:image/png;base64,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9pr5xz/+0WPCwxWyySabmIUXXjixHXzN+JGff/558/TTT5uurq4kUaq6hn96s802S+0T/XnzzTfNE088YT788MOKdVIXGJHGjx9vXnjhhYplKmXYeuutzbrrrmuJ7L777jMTJkxILDLXXHOZ/fff38w999y23XHjxiXmK3exWTouJ0Ole+hs0KBB9qP38MMPm8cee6xSERuHaKSeKzaY0wwznUiXXHJJ8/vf/96stNJKRQi/++47c8opp5jbb7/dXr/yyivN4osvXrz/1Vdfmf/85z9mjTXWKF7jJLSh/bzzzmt+8pOfGIJmtaQ33njD3HnnndaKrKYcLwi+YYig2gSJYuE/9NBD1Rax+drb280ee+xhCbTagu+995656667rL87rcwvfvELA6GRkO2yyy6zI4+0/JWur7DCCuanP/1pMdvEiRPNNddcU/ztn6y22mpm4MCB9hKW+/nnn28taz9P2nmzdJzWfi3Xd9llF7PKKqvYIoyCLrnkktSPaVZ6rkXePOWdqURKUIkXhqGQS5988okdvmORHH744eaWW26xFgX5sC7KpZCIdP311zdYRGkWaLl+cA8ygXzSrChXfrvttquIi8ubdMRy/OMf/2jdC0n3/WsM348++ugS14R/v9L5o48+ah555JHEbEcccYSZb775ivd4Dggy9iSB+fHHH1/iZ+fDe/311ydW9/3vf9/suuuu9h54XHTRRVURabN0nCh0Dy7utNNOReOj3AcjSz33QOxcFJlpRJoUVHr11VfNIYccYn1sfC033HBDOyyEUF9++WVz5plnGr6qaSkUIu3fv79Za621SsRkWI2l+fjjj9spXc6HyEcE62mDDTZItCgh03/9618ldbkf++yzj2FI6ScImI/Qs88+a9tx9xjur7766madddYpIRjuI8vFF19scXf5k4577rmnWW655Yq3aOuZZ56xw3fnf8WqXHbZZQ0ks+iiixbzclLu5Y0TKfkhXci31sQoADeHn6ol0nIy+vU1S8d+m/WeV0ukWeq53j6EWr7pRJoWVGKIyZSmJZZYwg71/Tmi06dPNyeddJId7kKqJ5xwgg1sxEENgUixQvkA+Am/5A033FDR6mPYxcPOsMqlNAJIItFXXnnF3HHHHRWtqSQrlqHepZdemloWfey7775OLDtfd/To0WWDZJA3Q2aOJMiWNiDgeEoiUvLV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YNZaihNINRHvjTbayBxwwAFWNF5K3AGQnEsQCJbqnHPO6S51O0IiEPDf//73knu89CeccELZshS49dZbzQMPPGDL+n0guPfCCy+YzTffvKRe/wdkfO6551pScNfjdUAg22yzjbtdcoSMxowZY+67776S6+4HdR144IFmgw02cJe6HcHrvPPOSwxAzjrrrIaPwTLLLNOtnH/hscces+4V/xozF3ieWltbzQ033GA/QoMGDfKzWNfN4MGDi88c7Z1yyin241OS8f9/QLgPP/ywJWP0JiJNQql3XcuMSAcMGGCnCQFXLVanD29aubvvvtuMHTvWz9q0c59Aqh0W85JilUKUSS8WlhuWNh8fSAcr7P3337d58bM6i56yv/rVr+z0Kjrsy8JvSJrA3NSpU80CCyxgFl54YVuWcqNGjSpaZPFylCVhxb4duVk49uvXr4Sc45Z0Wh34jadMmWLr4wPRt29fe84/WKZYhn6iHvqEFe4Sc1upA7ywcv3+g9M777zjstpjXBZkwAoFR9wrvgyXX365ee6554rlfexfffVV69dGX+gBQqQsJP7rX//a6oN7yIDF6xJB0Q8++MBa4sxI8VOSvv37Ou8dCGRCpPEhfRohxiHEOn322Wftl5yvflq5mTnE91/aaomUfmJxbbjhhrbLWJYQk5/22Wcf+5Og2ieffFK8BQ68xBAjybcssaZ+85vfWKKBACHr+MT6VVdd1Q51ITHIgeT3wV6I/mH4fNVVV5VYnQxvCZqRICcsX1d/Uh1YfMyy8Ns56KCD7HCbOtAblt306dP5adMWW2xh9txzT3sO6Vx//fXm0Ucf/f+7xrpEsNYdQUFujHTI6yes/k033dQGLsHCJeRkPuc666xjLzFzAsvWJZ9I3TU+YhdddFHiJHpcDwROSchw4YUXmpdfftkVtcR97LHHGtwjLo8s0iI8vfYkEyI99dRTS6Y4lRu++8g64sSvioVSrhxWABOdm518AqmFSBna87KTfDKsRv7VV1/dHHXUUTbrnXfeaWcw8MMFNDhnruqDDz7IacXk94HMEMH555/frRz5IHHcB5CGP7E8XseECRMs+XSrJLqAxbnccsvZW75VGrfu/vCHP1hCj9dBW7S94IIL2ltXXHGFefrpp+PZUn9jVZ5zzjmW3N544w37wXGZ40QKiZ5xxhndiJr8vrx8LK688spEOXAx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EUtL4ztfubrwAR9++OHWso+3zc5VrJtnez32M4BQ+XC5/kLArA7D+iUQVm5RgGuPI6u1kNdZ/O4emN94443miSeesMtu0YuPm8unY+9CIBMiXWWVVTKflkSEO21JYl5VhL+TF5NpUPzPNJ8k32dS/9jpibIQBP5Apv8021pHLlZjuTmxEBxBwiQrNKkPXMOvCxnzEam1H5AxU5wgMwgV/GppO02mctf5CGKJ85GANJmVUa3OytWre/lCIBMiBQIsrLXXXjsTNHyrLJMGVKkQEAJCoAYEMiPSGmRQViEgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhEQkeZafRJeCAiBEBAQkYagBckgBIRArhHIFZG2tCBu91QoFLpf1BUhIASEQJMQyAWRrrbaambAgAFmiSWWMO3t7SXQdHR0mMmTJ5uxY8eaCRMmlNzTDyEgBIRAMxAInkgh0aOPProqLC666KJgyBTruX///maeeeYxbW1tZvz48ebDDz+s2I+VV17ZbLDBBmbGjBnm5ptvNnwolISAEAgbgeCJ9OSTTzbLLLNMVSi+88475swzz6wqb9aZINKzzjrLzDfffLapjz76yAwdOtRUckMceuihZt111zVdXV1mxIgR1trOWlbVLwSEQH0IBE+kl1xySbfhfFqXsd6OOuqotNvdrlcitW4FargAkQ4fPtwstNBCxVLjxo0zd911V/F30skBBxxgNtpoI0ukw4YNM++9915SNl0TAkIgIASCJ9LRo0dnAlfWvtUkIsXKxCr9+OOPU/skIk2FRjeEQLAI/M8Sqa+RLHyrSURKm5MmTbJD9jRruCdESluktDrtzSb+E5o8Tey6mvofRUBEGik+C9+qT6QTJ060Q/y+ffvax2zMmDE2+JT0zFVLpK2trWbgwIFmrbXWMrPOOqut6ttvvzWPPfaYefDBB0tIdc0117T5INq0oNfiiy9utt56a1vPlClTbB1x+egTAbR5553XTJ061dx5553WBUE+ZNhyyy3N2muvbQNstDVt2jTz2WefmZdeesk8/fTT5vPPP49Xqd9CoFcgICKN1Mgw/8gjj2yoQn0ife655yyZ7LXXXrYNhvhDhgwxX3zxRbc2qyHS5Zdf3hx77LGmT58+3cpzAcIaOXKkJTF+Dxo0yJIc53fffbedKsa5nw488ECz4YYb2kudnZ1m8ODBZvr06X4WM9dcc5lRo0bZWQjffPONOfHEEy12G2+8sdl3330N5J6W6LN8vmno6HreEfg/AAAA//94y/4pAAAqkklEQVTtnQe4FcX5hweVYvtjAaIogoaQCCoJGDEiBjRibBijRjRigokSxYKiiCiCCIgl2KNgSNREjTUqVhRbxBafoMGIigV7RaygqPDnnTAn31n2nHvuvbv33Lv7m+fh7tndqe/s/vabb2aXZs65Zcv/NdowZcqUBqnbkCFDEi2nWbNm7vTTT3dt27Z1c+fOdeedd5475ZRTXIcOHXw58+fPd2ecccZKZQ4ePNhtu+22bunSpW7cuHHu7bffLorTuXNnN3z4cLfKKqv440uWLHHkteqqq7pOnTr5LSc4fvzxx7svv/zSHz/xxBN9mrhyyWvSpEmudevWhbIuueQS99RTTxX2+UG9qB/hiSeecNOmTXPrrLOOmzBhgltttdX88cWLF7vXXnvN179du3ZuvfXWc7Dg+IgRI3y9fET9EYEMEWi2vC0S0uUQGkJIEZaxY8cWxO6qq65yDz30UNHlVE5IESTEd9111/VpZs+e7aZOnepFiwNrrbWWGzVqlFt//fX9efKmDITynHPOcWuuuWaRwPpIy/907NjRjRw5siDOHCfvSy+9NETx20MPPdRtvfXW/ncQWiuuDz74oLv66quL0jRv3txtt9127uuvv3azZs0qOqcdEcgKAQnpip5sCCGlqN13390NGDDAl/rNN9+44447zn3xxRcrauG8xVfKIu3Zs6c77LDDfNw33njDW7yFhCt+ILJYiFioWKVYr2yPOeYY17VrVy+6kydPdvPmzSskPeCAA1zfvn39OSzY1Vdf3S1atMidcMIJXgCJaEXc1vvggw92vXv39mnHjBnj3nvvvUK++iECeSEgIV3R0w0lpAgSVukGG2zgSw7D/nDBlbNIDznkENerV69YMQzp2QYXAu6B8ePHuzfffNMLJYJJmDFjhrvxxhv9b+pDnDZt2rh3333XPf30065///4rlWEF+vXXX/dpyMBapAsXLnSItMTUo9WfHBGQkK7o7IYSUopr3769Gz16dGEoja8RnyOhlJAieFh8G264oY/3yCOPuAULFjiGzjbgi8RCxI1g/azWrWCF0Nbl0Ucfdffee6+vG3kG1wC/t99+ezdo0CB+uttvv93deuut/jc+UoTY1gNrl/Nsly1r1J4j3wb9EYH6EpCQriDYkEJKkfvuu6/beeedfel2YqickAbLcUWVa9xYi9RangzNjz32WD8Rtddee7nddtvNCx5+zzlz5viJsZYtWzosTHyu5HPEEUe47t27+99nnnmmn+AKFcDHSn64BGzAZTFz5kwvvJSpIAJZJSAhXdGzDS2kCJudOELALrroorIWaVgFQJWxPPGDlgucJ02Y+Q8ijZV4/vnnu+eee65g5Vp/qhVNxJv0YVY/6jsN5dOeXXbZxfXr18/P5IfjbL/66ivfNspTEIEsEpCQrujVhhZSiu3UqZMLy5IQN/yL22yzjevTp0/RsJy4VnjtZA/nKg1YlIgk4b777nN33nmnw7pkVv+ZZ55xF154oT9nJ7Xuuusux2w8E1jR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pEtAQpouX+UuAiKQAwIS0hx0spooAiKQLgEJabp8lbsIiEAOCEhIc9DJaqIIiEC6BCSk6fJV7iIgAjkgICHNQSeriSIgAukSkJCmy1e5i4AI5ICAhDQHnawmioAIpEtAQpouX+UuAiKQAwIS0hx0spooAiKQLgEJabp8lbsIiEAOCDRb3sZlOWinmigCIiACqRGQkKaGVhmLgAjkhYCENC89rXaKgAikRkBCmhpaZSwCIpAXAhLSvPS02ikCIpAaAQlpamiVsQiIQF4ISEjz0tNqpwiIQGoEJKSpoVXGIiACeSEgIc1LT6udIiACqRGQkKaGVhmLgAjkhYCENC89rXaKgAikRkBCmhpaZSwCIpAXAhLSvPS02ikCIpAaAQlpamiVsQiIQF4ISEjz0tNqpwiIQGoEJKSpoVXGIiACeSEgIc1LT6udIiACqRGQkKaGVhmLgAjkhYCENC89rXaKgAikRkBCmhpaZSwCIpAXAhLSvPS02ikCIpAaAQlpamiVsQiIQF4ISEjz0tNqpwiIQGoEJKSpoVXGIiACeSEgIc1LT6udIiACqRGQkKaGVhmLgAjkhYCENC89rXaKgAikRiA1IW3WjKzTD8uWLUu/kAyXEPpJHDPcyWpa6gQSF9LWrVu73XbbzW277bauVatWqTbgiy++cI899pi744473Mcff5xqWVnMfK211nInn3yya9mypbv++uvdo48+WtRMRHbNNdd0n332WdFx7YiACBQTSFxIDzjgANe3b1/XUBYON/sDDzzgrrnmmuKWpbRHebvvvrvjgRHaePPNN7tFixZVXOIOO+zgOnTo4NOvttpq7q677nLvvfdexemTirj22mu7M88806266qruhhtucPfcc08ha8SVc6uvvrqbM2eOu+iiiwrn9EMERKCYQOJCev7553tL9LjjjnOff/55cWkJ72EtTZ482WGZHnPMMQnnHp8dQnrGGWe4ddddtxAhKkKFEzE/sNLPOecc17x588LZW265xVvVhQMN9AMhnTRpkkPMo21o166dO+2009wqq6ziFi9e7I4//nj39ddfN1DNVIwINC0CiQvplClTPIEhQ4YUkUCACMGKKzpZj51S5dUjy7JJacfpp5/u2rZtW4j3zjvvuLFjx1bUtn79+rmBAwcW0vIjKmJFJ1PcKSek66yzjn9gIKQLFy50o0aNckuXLk2x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QkM55T46QroQ4t7xj1qcIa7dvvvuu/4D1fh0o3WwlqcVUtLHfZza5stvloCxWgHhjeYdjat9EWjqBBIX0jz8VyNhaG/Xi9oLwa4dLSUi+++/v9txxx19suhElM2LjyszccPbU9GADxSL8Pbbb3e8jx8NLD/idVG+g2oD6Xg/nv/nCp8u1i3/+R2f5QvBWtZx7eT/ncKFgfVrAxNP/B9WDyz/f7TCG1bl2mfT6rcINFUCiQupna1tKCjctA31n981VJui5bB2k0ksfKHMyPMJPSxKu+Qomibsk/Zb3/qW/z+0+ODJ888/X/SRkRCvLlveasLq5B/fmaVOCiKQNwKJCykLsfXfMeftMlJ7RSDfBBIX0nzjVOtFQATySEBCmsdeV5tFQAQSJSAhTRSnMhMBEcgjAQlpHntdbRYBEUiUgIQ0UZzKTAREII8EJKR57HW1WQREIFECEtJEcSozERCBPBKQkOax19VmERCBRAlISBPFqcxEQATySEBCmsdeV5tFQAQSJSAhTRSnMhMBEcgjAQlpHntdbRYBEUiUgIQ0UZzKTAREII8EJKR57HW1WQREIFECEtJEcSozERCBPBKQkOax19VmERCBRAlISBPFqcxEQATySEBCmsdeV5tFQAQSJSAhTRSnMhMBEcgjAQlpHntdbRYBEUiUgIQ0UZzKTAREII8EJKR57HW1WQREIFECEtJEcSozERCBPBKQkOax19VmERCBRAlISBPFqcxEQATySEBCmsdeV5tFQAQSJSAhTRSnMhMBEcgjAQlpHntdbRYBEUiUgIQ0UZzKTAREII8EJKR57HW1WQREIFECEtJEcSozERCBPBKQkOax19VmERCBRAlISBPFqcxEQATySEBCmsdeV5tFQAQSJSAhTRSnMhMBEcgjAQlpHntdbRYBEUiUgIQ0UZzKTAREII8EJKR57HW1WQREIFECEtJEcSozERCBPBKQkOax19VmERCBRAlISBPFqcxEQATySEBCmsdeV5tFQAQSJfD/0D4BsQozAbwAAAAASUVORK5CYII=\" data-filename=\"Screen Shot 2016-03-21 at 11.50.42 PM.png\" style=\"width: 172.876px; height: 223px; float: none;\"><br></p><p>3. In your HTML file add a div that will receive the news feed then add the Cosmic browser client to get your bucket's content. &nbsp;<a href=\"https://github.com/cosmicjs/cosmicjs-node\" target=\"_blank\">You can download the Cosmic Browser Client on GitHub</a>. &nbsp;Next, in only a few lines of code, you can get the articles from your bucket. &nbsp;Here is a quick&nbsp;<span style=\"line-height: 1.42857;\">JS Fiddle of everything</span><span style=\"line-height: 1.42857;\">&nbsp;you will need:</span></p><p><iframe width=\"100%\" height=\"300\" src=\"//jsfiddle.net/x93ya1zs/3/embedded/js,html,result/\" allowfullscreen=\"allowfullscreen\" frameborder=\"0\"></iframe></p><p>You can see how powerful this is. &nbsp;A developer can add these dynamic areas to any portion of an existing site and enjoy the benefits of a CMS API. &nbsp;Any non-dev team member can be invited to edit this content in the Cosmic admin dashboard quickly and&nbsp;<span style=\"line-height: 1.42857;\">easily with&nbsp;</span><span style=\"line-height: 1.42857;\">no database or server-side installation necessary!</span></p><p><br></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2016-03-22T04:29:24.271Z","status":"published","modified":"2016-06-21T03:31:45.888Z","modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}},{"_id":"56e0fdbab28b6a1a28000001","slug":"4-reasons-to-choose-a-cms-api-over-an-installed-cms","title":"4 Reasons to Choose a CMS API Over an Installed CMS","content":"<p><span style=\"line-height: 1.42857;\">Choosing a content management system for a project is a very important decision. &nbsp;Here are four reasons why you should&nbsp;</span><span style=\"line-height: 1.42857;\">choose a <a href=\"https://www.cosmicjs.com\" target=\"\">CMS API</a> over a traditional installed CMS. &nbsp;Doing so will benefit</span><span style=\"line-height: 1.42857;\">&nbsp;yourself, your&nbsp;developers and your organization.</span></p><p><img src=\"https://www.cosmicjs.com/uploads/678df770-e6e3-11e5-9c05-b17f70344e7b-vShYrVhsZw.gif\" style=\"width: 1058px;\"><br></p><h4><br></h4><h4>Freedom</h4><p>When your content comes from an API, you free your developers up to build applications using whatever programming language they want. &nbsp;This is huge for developers. &nbsp;<span style=\"line-height: 1.42857;\">Unlike a traditional installed CMS that locks the developer into a certain programming language, by using a CMS API, a</span><span style=\"line-height: 1.42857;\">&nbsp;developer on your team can build the web application in React, Rails, Node.js, PHP, etc. &nbsp;When you want to bring a Swift and Java developer onto the team they can easily serve the same content from the CMS API to the iOS and Android applications. &nbsp;This leads to faster development cycles and increased company productivity.</span></p><h4><br></h4><h4>Speed</h4><div>When you build your applications around a CMS API you gain an amazing speed advantage over traditional installed CMSs. &nbsp;Let's say you have a new web project and need to install three&nbsp;<span style=\"line-height: 1.42857;\">environments:</span><span style=\"line-height: 1.42857;\">&nbsp;development, staging and production. &nbsp;By deciding to use a CMS API, you've now divided the time it takes to setup a CMS by three. &nbsp;By choosing to go with a&nbsp;</span><span style=\"line-height: 1.42857;\">CMS API y</span><span style=\"line-height: 1.42857;\">ou can now serve the content to all three instances from the same CMS API and not worry about configuration and data migrations between three different instances.</span></div><h4><br></h4><h4>Low Overhead</h4><p>By not having to maintain a database and file system to handle content, you can keep your server light-weight. &nbsp;<span style=\"line-height: 1.42857;\">All you need on your server is your application and all you need to worry about is the performance of your application. &nbsp;</span><span style=\"line-height: 1.42857;\">This saves money on server overhead as well as development turnaround.</span></p><h4><br></h4><h4>Money Savings</h4><p>There are obviously higher server costs when you use an traditional installed CMS which demands more RAM and file storage on your server. &nbsp;But&nbsp;<span style=\"line-height: 1.42857;\">the real cost savings&nbsp;</span><span style=\"line-height: 1.42857;\">when you choose a CMS API is in the development time saved. &nbsp;When you outsource your content needs to a dedicated CMS API you allow your team&nbsp;to spend less time on all of the headaches that come with an installed CMS. &nbsp;Developer time is extremely valuable and when you remove the task of configuring and managing an installed CMS, their time can be better focused on other tasks that provide a higher return.&nbsp;</span></p><p><span style=\"line-height: 1.42857;\"><br></span></p><p><span style=\"line-height: 1.42857;\">CMS APIs are the future of content management. &nbsp;By switching to a CMS API now, you will</span><span style=\"line-height: 1.42857;\">&nbsp;increase the freedom, speed and cost efficiency of your projects, increase company productivity and will make it easier for developers and content creators to make better application experiences.</span></p><p><span style=\"line-height: 1.42857;\">It is the mission of Cosmic to be the most intuitive CMS API available. &nbsp;<a href=\"https://www.cosmicjs.com/signup\" target=\"_blank\">Sign up now</a> and see how you and your team can greatly benefit from using a CMS API to power your applications.</span></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2016-03-10T04:53:14.077Z","status":"published","modified":"2016-06-21T03:31:55.428Z","order":200,"modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}},{"_id":"56d396c41d92fee665000003","slug":"update-easier-metafields","title":"Update: Easier Metafields","content":"<p>It's now even easier to add metafields to your objects. &nbsp;Available metafields include: plain text, plain textarea, html textarea, select dropdown, object select (for object connections), image / file and date.</p><p><a href=\"https://www.cosmicjs.com/login\" target=\"\">Sign in</a> and check out the available metafield options that make it so easy to add dynamic content to your websites and apps.</p><p><img src=\"data:image/png;base64,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VY3iwDMEIAABCEAAAhCAAAQgAAEITByBRx55JNx4442jElAlJqYiogVeZ511wtSpU213wuz//u//jt/dGqa94IILRre+w71b+9okCKa2jtmmTJhoaLY/Nh6ZnISQOB5Yy+NUl9zrrruuc9PVvVaFZTyNBL999903XkK9zySyLrPMMmO+5HjFO+aEEcEoAhLVjj322HDyySePOmcH9t9///D6178+HHbYYWHmzJlht912CxLf1A18PI3S9pGPfCRcfPHF8TLveMc7wpvf/OYxX3K84h1zwogAAhCAAAQgAAEIQAACEIAABGoTeOihh8I//vGPUf5XXHHFsMoqq4w4XiYiPv/5zw9LLbXUCL8TtYOQ2IK8PvDNmNvbctvmeyLqmPU+NHvQeiSqR9jb3/52y35Q70CJieNpUsHv5z//eeydONZrjle8Y00X4UcTOOuss8JnPvOZESdUkWqI86xZs+JxlUXNO3HUUUd1/J1yyilB/sbT6LmWYHnhhRfGy/RSSByPeMeTBXFDAAIQgAAEIAABCEAAAhCAwGgCWmhFGkRqvJiob9s777wz9RK/aftFRFTiEBJH3aLuByQcmDG3t+W2bZiEROXJCxtisN9++4X3v//9hmNc7PES/MYr3nGBMIGR6h8RCXYrrLBCT4aUN83Kk08+GV772tcGpUNGvVJPOOGEoG7dMkrbzTffHF7wgheEGTNmhMMPPzwe18/xxx8fNtlkk87+eDjS5wIhcTwoEycEIAABCEAAAhCAAAQgAIHBJlAmJj73uc+Nw38HQUTUHUBIbFEOJRyYMbe35bZtmIRECTk2R5tEJa0gtNhiiwX1ENRy5ONlxkvwG694x4vDRMSr8rvPPvvEocJvfetbg7b5bfx90rW/9a1vhS222KIwGZdddll4z3veE89JcOxV79XCi/37oJ51L7AjJFbR4hwEIAABCEAAAhCAAAQgAIF8CZSJiUVE+mk4s08fQqKnUdNtoqG8m9vbcts2TELiaaedFheVMEyap/CBBx4In//858OOO+5oh3tueyGpl+LQeMXbcwATGKFWidp9991jCnolkDXNzt/+9rfOnIMSrjVHZtUEsxrefO+998Yei/pnZ7yNnnWExPGmTPwQgAAEIAABCEAAAhCAAASGg0AdMbFfRUTdAYTEFuXQREMFNbe35bZtWIRELVmulWhteKnHtv76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AhCAAAQgAAEIQAACEIAABCAAAQhAYFAJVAmJmpdwgw026AiJ0uBsXsQHH3wwXH311THbmjNRHf103kRDs+XBu+ty6omQWLZqsxKx3XbbhWnTprVKnImGisfc3jYRUXZbIZE5EkUXAwEIQAACEIAABCAAAQhAAAIQgAAEINAvBKqGNi+55JJxFLD1VJQgaEKibAmJWshY7m222SYuxCI/WihFQqDCaZFknS8y6t143333xVPyN3ny5I43LyRuttlmYerUqfFad911V9T+pM/Jf+ViK/J02mmnhYcffrgTsXcogS996UvDWmutNeLi3k+R20RDnTO3t+W2DSGxiCDHIAABCEAAAhCAAAQgAAEIQAACEIAABAaNwFiERA2Bvv3226MGt/XWW88T9uYKieoIeOONN0bBb9tttw0LL7xwIRa/MvMmm2wSlllmmY4/LyS+8IUvjMOp77nnns55c1QKifL00EMPhVNPPdX8l9pa0UVjtKVYdjMmGsqfub1tIqLsIiHxySefDI8//nhUW5944omgTYuuPP3000FdPWfPnh0BdksH5yEAAQhAAAIQgAAEIAABCEAAAhCAAAQgML8IjEVIvO6664LEvbRH4p133hmuv/76rkKiFwvTlZn9Oc9ipZVWisKkejPOmjWrukeiBVQizzrrLNuttKVmavWY5z3veaUKqImGisjc3pbbNgmJEgY1seStt94aVVYpqGVh5VdhJYBiIAABCEAAAhCAAAQgAAEIQAACEIAABCDQLwTaConSuv785z/HTnTpHInjISTaMOtFFlmkg04d+7r2SDTf8vynP/0pKpx2rJu94YYbRlFRq854o8ybMbe35dYmUVCKqq7rz1eFRUg0OtgQgAAEIAABCEAAAhCAAAQgAAEIQAAC/USgSkjUYivS0tTjUJvNkahRuH//+9878xuq8542GfnptZCoqQw1dHqhhRYaha62kGghNXT4iiuuiEtT27FuthZl2WKLLYIUUxkTBb3bjsnWpu6SM2bMiEOWi/wVHVM4hESRwUAAAhCAAAQgAAEIQAACEIAABCAAAQj0G4EqIVGLmay//vpRRJSYp+HEDzzwQLAFTyQays9WW23VEfnGQ0hcZZVV4gLLRewaC4kWieYo1ESOf/nLXzpin50rspWxV77ylWHVVVftKiTOnDkzXHTRRSOi8UKjnVhxxRXjajQSKKWSyo+ETplLL7002vxAAAIQgAAEIAABCEAAAhCAAAQgAAEIQKAfCFQJidLOijalW8fVY3GDDTYIGm6sfTve6x6J6623Xlh55ZVj/OnPpCOOOGKOXTw9WWdfcxjee++94dprr621wMn2228f1llnnU7UqUAoIfD000/vnDeH+VtttdXioi5LLbVUVGjVvVNp0Ca35nOU+/zzz7eg2BCAAAQgAAEIQAACEIAABCAAAQhAAAIQmHACTYVEDXFWRzoJe1rg2AuNyoz2ey0kbrbZZqWLKU963eteN0dKYy+M5lG85pprYi/Fqvj22muvsOyyy0YvJhDK1nbuuefGLptpeKmuO+ywQ1h00UU7wqGJhwiJKS32IQABCEAAAhCAAAQgAAEIQAACEIAABPqNQJWQqBG3G2+88Yj5ETUCV2KhzZk4P4TEdEVnz3DS6quvPme//faLAp0/MRZ3t4VZtHS0wCnzXkjUSsvqjWjHLA2Ctueee8Zx4CYamk2PRKOEDQEIQAACEIAABCAAAQhAAAIQgAAEINDPBKqERBu6rPkRTThM7bEIieq5eN1110U8qVj42GOPhcsvvzyek5hpHQBTlpPmdo2co0xoIsVeGy2Yct55542KVhBe//rXh8UXX7wjGko81JyLv/nNbzrHLOArXvGKOBei/JiAaDZColHChgAEIAABCEAAAhCAAAQgAAEIQAACEOhnAlVC4pJLLhle9KIXhfESEu+4445www03RDxVQuKaa64Z1lprrUKMUUjcfPPNwyabbFLoYawHb7311vCLX/xiRDQSBHfbbbc4xtt6H8q+6qqrovppxxRI8F772td2FlMxAdFshMQRaNmBAAQgAAEIQAACEIAABCAAAQhAAAIQ6FMCEykkXnHFFeHhhx+OZKqERHX823LLLeNI4hRjFBK33nrrsOGGG6bnerIvUfDUU0/tJFSR6tgee+wRVlhhhU7vQx375S9/GW677bbOMflVV8pdd91VznjcBESzERIjGn4gAAEIQAACEIAABCAAAQhAAAIQgAAE+pzAeAiJ6mmoUb4yWgelaNSxFidWBz4zVUKi/LzgBS8ImpowNVFIfMlLXhK7TqYne7V/0UUXhZtvvrkTXZmQKH8zZ84cISRqRRr1XpRROBMQzUZI7GDFAQEIQAACEIAABCAAAQhAAAIQgAAEINDHBMZDSHz88cc78xsq62uvvXZc5VnzKc6ePTt22rv99ttHUOkmJMrzqquuGlZbbbXOmiX//Oc/QxQStayzIhgPI8Hv5JNPDsqUGQmCr3rVq2Km5JaRfe2114bf//73I4REhjYbNWwIQAACEIAABCAAAQhAAAIQgAAEIACBQSYwHkKieNx0001B0wvKSEAsMsstt1y477774qkyIVFhJSBqxHCRiULiLrvsEtZYY41R5++99964IIrGRrc16mE4Y8aMEcG12Mree+8d1NvQC4lli628+MUvjl0q5dd6Ippd1CNR6f7DH/4w4prsQAACEIAABCAAAQhAAAIQgAAEIAABCEBgIglUCYnLLLNMWH/99RsvtqL8SADU8GWtyiytzJspU6aEddZZJ2hVaHXge+qpp4LWS9HiLmbUAfCPf/xjUBq0jsr9998fF2Z54oknzEu0J83tojhn//33D4suuuiIE9o599xzg5aGnjZtWthggw2ClMsyVXNU4LkH1OVR8x6mZvnll49zJCouLyQ+9NBD4fTTT+8c8+F23HHHuDiLCYhmeyHxySefDH/5y1+CxoYrLgwEIAABCEAAAhCAAAQgAAEIQAACEIAABPqFQJGQqA53tlKz3LZJN5Pb23LbpjzJ7W25n3766XhMPwq/0EILdfabOp555pnYqU/6XUzL3N6Ic7baaqvCeNK5DZU4iYoaH61FUCQ+KjGKSEbjrqVgzpo1K1x55ZUjFljxF9h55507PSC9kCi3xMu77rrLe49unVOvSQmaUlIlJMooQ4888kjsvnn99dfHNMgvQmLEww8EIAABCEAAAhCAAAQgAAEIQAACEIBAnxCYH0KiiYvjkeVJn/jEJ+ZMnjy5MO5USCz01PDguuuuG7bbbruOYuqFREV19913h3POOWdUrKk/eUiPaV9ipmyExFEIOQABCEAAAhCAAAQgAAEIQAACEIAABCAwgQQGXkicPn36vNVOCiD+4he/6EzUWHC68aHVV189qDeiV0aLxMD//d//jUOU/QVSfzqXHtM+QqKnhhsCEIAABCAAAQhAAAIQgAAEIAABCECgXwgMtZD4//7f/4sTLY4VtsZ5a47DNddcM0ZlAqB2zO1tuW+55ZZwySWXRP9F/oqOKZyERF1HQ6sxEIAABCAAAQhAAAIQgAAEIAABCEAAAhDoFwJDLSQKslZy0fLRV199dVz9pQl49UDU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7R/+8Ic4bOT73/9+PJ3664dhzfbSr9uYtHx625eLYRcSH3vssdgAl90PYoC/D/PDnVN953nmmm9j4J9x6v55VAa97r/hhhvC/vvvHzbYYIPwgx/8YMwftXq/ffGLXwynnXaaFZv4PtY7YbHFFuscw9H/BHKt73LJd6+ERJXktB7UMbVt9ef+F77whfjHyZlnnhmHQqvnoDfypzaz6g4vJGqkTt02lsLqz129l7wZbyFR1xJHb5QXdTBQz3x1MNAfKWpbi5E3Gg7dZki0j6MX7l60/306NKT8ta99bWeIuc5piLn+qLLvQO8f98QSyKW+K6O88847x3aPtAzriShb3/Cy9Tz743LL2Dmdt03H5fZ26o4ne/gz6eMf//h/1IceRlwVlRcyzO1tuW2TOCi3t71w6N0Sku65557oX92YczI5PYj+Y7JMMNLQAvVs03Bf/eunBoTmQJEZTyGxn8qcnhtrFGkOmG9+85tj/kgbj/wpnW95y1uC/s1997vfHQ488MBWl6lTLlpF3IeBrrrqqqChQPow1jwwiy++eB+mcvySlFN95ynmmm9jUOcZp+6fN2XMINT9uq8/+tGPwje+8Y04DYhsayTbPW9qP/TQQ7GHvt79m266adCcZRIOvvSlL8WPyabx4X/iCORa3+WS714KiWWltM47w8L6NrMdkz19+vSgnolVRnMVaoqhp59+Oqy11lrh5ptvjt7nh5BYlK42bIviGe9jvWr/+3Raz1AJMZoD/4orrhj1Hej9455YArnUd2WUNQRf4p/mezXxMBUObV/+TEA020TEVEC0fV3Xu8vS0fb4pMMPP3zghUTfK1FCosTFCy64oC2TgQyX04NYt2FQNl9hXSFx5syZQUOk1GNCPR310OofSk3aK2FO+6nRJMua4F2TKKeTNNs5LcCy1VZbxX8H//jHP4bf//73UQBXXCuttFJcKGTjjTce84PvG0VNhzDoY1wirT7CZJRX5XmXXXYZNZ+in+xZedt8881jmPRHz6WG4urfQsW34447hocffjicddZZQcMOZDS87ZBDDomNMe1rMmjr9q39KlNVLjRB929/+9tYSWshFl1fedMxNfiUNolx22+/ffiv//qveP/Sa4mnJvnWB6rKgMrCP/7xj3jslltuif8AK169FHTv9UJIjeLQpODqOS1hW0zLjE3IrXQpTYpP4VW+PvOZ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AAI9I5B7fTfwQuLcCUrnXH755bFb7a677lprxaOxlh4TDRWPub0tt20IifVo5/4g1qOELwi0J4CQ2J5dr0PmWt/lmu9elx/igwAE+p9ArvVdrvnu/xJJCiEAgV4TyL2+G3ghce7kp3Ouu+66WC623nrrsMoqq/S6jIyKz0RDnTC3t01ElI2QOApf4YHcH8RCKByEQA8JICT2EOYYo8q1vss132MsLgSHAAQGkECu9V2u+R7AIkqSIQCBMRLIvb4beCFx7hLoc6655ppYDHbcccew7LLLjrFIdA9uoqF8mtvbctuGkNidp3zk/iDWo4QvCLQnoEVVtIqyJlPWytRaoRozMQRyre9yzffElDKuCgEITCSBXOu7XPM9kWWNa0MAAhNDIPf6buCFxLnLn8/Rsuxa7XOFFVaYL6XIRENdzNzeNhFRNkJivVuS+4NYjxK+INCegFZX+853vhMefPDBsO2224btt9++fWSEHBOBXOu7XPM9psJCYAhAYCAJ5Frf5ZrvgSykJBoCEBgTgdzru4EXEqdPnz5nTCWgRWATDRXU3N6W2zaExHqAc38Q61HCFwQgMAwE/j975wFn11Hd/6Pee5csS7aaLRssN7nJvckFY+LQIYTEwYEQAgQIYDsWGBOcUAIBAiEBwh8ICWBjsGy5Nwl3W+5Ws2RVS6ve29r/OU8+q9nd997OnX27e+/8fvfzuZqz983cd8/3njl67/fmzqDmO1S/U4hZ+kACJJCNAGq+Q/U7W3SwNgmQQAoE0PNd4YXET3/602+89tprpVWbx48fH716s45qXLZsmezYsaN0Dh3hOGDAABk5cqQMGTJEOnXq1BDvJhrqyJ4lS5aURvjYsYEDB4peh7bVY5WExD179oi+p1773r17S4vFdO7cudSmb9++cv/99ze8H4KB3hER7jF9JAESOEAANd+h+s24JwESwCOAmu9Q/caLcHpMAiSAnu8KLyTaHIkq9F166aXSs2fPTFG9ffv2kmi3a9euiu30McBRo0Y1vF5fXy8PP/xwSQhsOOgMExP12NixY+W4444rOzJRxccXX3yxob62s10FRrXXrFnjnzp5G70jJn+D6SAJkEADAdR8h+p3w42nQQIkAEMANd+h+g0T2HSUBEiggQB6viu8kPje9773jWeffbY0YjCrkLh161a54447GoJBDZ1nsWvXrrJ+/fqG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FAH0PK83+5JLLqGQmDXqda5D28z2S7Vt19GFavul2rZXGpGIKCQaU338TRed2bVrV2kBFjvOkgRIgASKSEB/mdMR1joZMdrjzJXuF/N8JTI8TgIkUEQCzPPN7xrzfHMmPEICJFBcAszzje8dhcTGPIL+MtFQK5vtl2rb7guIeswERCspJAYhZyUSIAESIAESIAESIAESIAESIAESIAESIIEOJkAhMeIGmGioTc32S7Vtp5AYAZhNSIAESIAESIAESIAESIAESIAESIAESIAEckeAQmLELTHRUJua7ZcmImpJITECMJuQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAnkjgCFxIhbYqKhNjXbL9W2nUJiBGA2IQESIAESIAESIAESIAESIAESIAESIAESyB0BCokRt8REQ21qtl+aiKglhcQIwGxCAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiSQOwIUEiNuiYmG2tRsv1TbdgqJEYDZhARIgARIgARIgARIgARIgARIgARIgARIIHcEKCRG3BITDbWp2X5pIqKWFBIjALMJCZAACZAACZAACZAACZAACZAACZAACZBA7ghQSIy4JSYaalOz/VJt2ykkRgBmExIgARIgARIgARIgARIgARIgARIgARIggdwRoJAYcUtMNNSmZvuliYhaUkiMAMwmJEACJEACJEACJEACJEACJEACJEACJEACuSNAITHilphoqE3N9ku1baeQGAGYTUiABEiABEiABEiABEiABEiABEiABEiABHJHgEJixC0x0VCbmu2XJiJqSSExAjCbkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJ5I4AhcSIW2KioTY12y/Vtp1CYgRgNiEBEiABEiABEiABEiABEiABEiABEiABEsgdAQqJEbfERENtarZfmoioJYXECMBsQgIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkkDsCFBIjbomJhtrUbL9U23YKiRGA2YQESIAESIAESIAESIAESIAESIAESIAESCB3BCgkRtwSEw21qdl+aSKilhQSIwCzCQmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQO4IUEiMuCUmGmpTs/1SbdspJEYAZhMSIAESIAESIAESIAESIAESIAESIAESIIHcEaCQGHFLTDTUpmb7pYmIWlJIjADMJiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAArkjQCEx4paYaKhNzfZLtW2nkBgBmE1IgARIgARIgARIgARIgARIgARIgARIgARyR4BCYsQtMdFQm5rtlyYiakkhMQIwm5AACZAACZAACZAACZAACZAACZAACZAACeSOAIXEiFtioqE2Ndsv1badQmIEYDYhARIgARIgARIgARIgARIgARIgARIgARLIHQEKiRG3xERDbWq2X5qIqCWFxAjAbEICJEACJEACJEACJEACJEACJEACJEACJJA7AhQSI26JiYba1Gy/VNt2CokRgNmEBEiABEiABEiABEiABEiABEiABEiABEggdwQoJEbcEhMNtanZfmkiopYUEiMAswkJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkEDuCFBIjLglJhpqU7P9Um3bKSRGAGYTEiABEiABEiABEiABEiABEiABEiABEiCB3BGgkBhxS0w01KZm+6WJiFpSSIwAzCYkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAK5I0AhMeKWmGioTc32S7Vtp5AYAZhNSIAESIAESIAESIAESIAESIAESIAESIAEckeAQmLELTHRUJua7ZcmImpJITECMJuQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAnkjgCFxIhbYqKhNjXbL9W2nUJiBGA2IQESIAESIAESIAESIAESIAESIAESIAESyB0BCokRt8REQ21qtl+aiKglhcQIwGxCAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiSQOwIUEiNuiYmG2tRsv1TbdgqJEYDZhARIgARIgARIgARIgARIgARIgARIgARIIHcEKCRG3BITDbWp2X5pIqKWFBIjALMJCZAACZAACZAACZAACZAACZAACZAACZBA7ghQSIy4JSYaalOz/VJt2ykkRgBmExIgARIgARIgARIgARIgARIgARIgARIggdwRoJAYcUtMNNSmZvuliYhaUkiMAMwmJEACJEACJEACJEACJEACJEACJEACJEACuSNAITHilphoqE3N9ku1baeQGAGYTUiABEiABEiABEiABEiABEiABEiABEiABHJHgEJixC0x0VCbmu2XJiJqSSExAjCbkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJ5I4AhcSIW2KioTY12y/Vtp1CYgRgNiEBEiABEiABEiABEiABEiABEiABEiABEsgdAQqJEbfERENtarZfmoioJYXECMBsQgIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkkDsCFBIjbomJhtrUbL9U23YKiRGA2YQESIAESIAESIAESIAESIAESIAESIAESCB3BCgkRtwSEw21qdl+aSKilhQSIwCzCQmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQO4IUEiMuCUmGmpTs/1SbdspJEYAZhMSIAESIAESIAESIAESIAESIAESIAESIIHcEaCQGHFLTDTUpmb7pYmIWlJIzA54w4YNovvOnTulvr4++wnYggRIgARyRKBLly7Su3dvGTJkSGnP0aV12KUwz3cYer4xCZBAGxBgnm8OlXm+ORMeIQESKC4B5vnG945CYmMeQX+ZaKiVzfZLtW2nkBiEtFRJRcMlS5bItm3bwhuxJgmQAAkUiEC/fv1kwoQJoh9GEDfmecS7Tp9JAIsA8zw/z2NFPL0lATwC6Hle7ziFxIi4N9FQm5rtlyYiakkhMRzwwoULSyLiwIEDZfjw4aURPKhftsOpsSYJkEARCOgPJKtXr5bt27eLfviYPHlyES675tfIPF9zpDwhCZBATggwzx+4EczzOQlIXgYJkEDNCTDPH0RKIfEgi2DLRENtYLZfqm07hcQwrPr4w7Jly0RFRB2tw40ESIAEUiSwYMGCkpg4fvx4uMecmedTjGj6RAIk0JQA8zw/zzeNCf5NAiSQFgHkPG93kkKikchQmmioTcz2SxMRtaSQGAbWOqOO0tHROtxIgARIIEUC+kumjtbo27evTJkyJUUXK/rEPF8RDV8gARJIiADz/PbSqHt+nk8oqOkKCZBAIwLIed5AUEg0EhlKEw21idl+qbbtFBLDwM6fP7+0sMrxxx8f1oC1SIAESKCABHSOQM13Om3DtGnTCuhB/CUzz8ezY0sSIIHiEGCerxd+ni9OvPJKSYAEshNAzvNGi0KikchQmmioTcz2SxMRtaSQGAb2ySefLFXkB48wXqxFAiRQXAKo+Q7V7+JGKq+cBEgglgBqvkP1OzZO2I4ESKC4BNDzHYXEiNg10VCbmu2XattOITEMMHpHDKPEWiRAAikQQM13qH6nELP0gQRIIBsB1HyH6ne26GBtEiCBFAig5zsKiRFRbKKhNjXbL01E1JJCYhhg9I4YRom1SIAEUiCAmu9Q/U4hZukDCZBANgKo+Q7V72zRwdokQAIpEEDPdxQSI6LYRENtarZfqm07hcQwwOgdMYwSa5EACaRAADXfofqdQszSBxIggWwEUPMdqt/ZooO1SYAEUiCAnu8oJEZEsYmG2tRsvzQRUUsKiWGA0TtiGCXWIgESSIEAar5D9TuFmKUPJEAC2Qig5jtUv7NFB2uTAAmkQAA931FIjIhiEw21qdl+qbbtFBLDAKN3xDBKrEUCJJACAdR8h+p3CjFLH0iABLIRQM13qH5niw7WJgESSIEAer6jkBgRxSYaalOz/dJERC0pJIYBRu+IYZRYiwRIIAUCqPkO1e8UYpY+kAAJZCOAmu9Q/c4WHaxNAiSQAgH0fEchMSKKTTTUpmb7pdq2U0gMA4zeEcMosRYJkEAKBFDzHarfKcQsfSABEshGADXfofqdLTpYmwRIIAUC6PmOQmJEFJtoqE3N9ksTEbWkkBgGGL0jhlFiLRIggRQIoOY7VL9TiFn6QAIkkI0Aar5D9TtbdLA2CZBACgTQ8x2FxIgoNtFQm5rtl2rbTiExDDB6RwyjxFokQAIpEEDNd6h+pxCz9IEESCAbAdR8h+p3tuhgbRIggRQIoOc7CokRUWyioTY12y9NRNSSQmIYYPSOGEaJtUiABFIggJrvUP1OIWbpAwmQQDYCqPkO1e9s0cHaJEACKRBAz3cUEiOi2ERDbWq2X6ptO4XEMMDoHTGMEmuRAAmkQAA136H6nULM0gcSIIFsBFDzHarf2aKDtUmABFIggJ7vCi8kXnXVVW+0dyCaaKjva7ZfNrX173KCoh3X12zfuHFj6Zxz585tb7c69P3QO2KHwuebkwAJtCsB1HyH6ne7BhffjARIIBcEUPMdqt+5CDpeBAmQQLsSQM93M2bMkE6dOsngwYOlc+fOjXY9rsfKlXpMd92a2nas9OKbr5td67IThcRaI+2Y86F3xI6hznclARLoCAKo+Q7V746IMb4nCZBAxxJAzXeofndstPHdSYAEOoIAer4rvJA4a9asXI5I1NGGNuKwaWmjD7Wsr69vGI2odl1dXenv2bNnd0R/6LD3RO+IHQaeb0wCJNDuBFDzHarf7R5gfEMSIIEOJ4Ca71D97vCA4wWQAAm0OwH0fFf4R5spJLZ7n2mTN0TviG0ClSclARLIJQHUfIfqdy6DkBdFAiTQpgRQ8x2q320aTDw5CZBALgmg5zsKiRFhqSMMbTPbL9W2XUcdqu2XHJFo9A6W6B3xIAlaJEACqRNAzXeofqcez/SPBEigOQHUfIfqd/MI4BESIIHUCaDnOwqJERFuoqE2Ndsv1bbdFxD1mC8iqs1Hmw/cAPSOGBGGbEICJFBQAqj5DtXvgoYpL5sESKAVBFDzHarfrQgVNiUBEigoAfR8RyExInBNNNSmZvul2rZTSAwDjN4RwyixFgmQQAoEUPMdqt8pxCx9IAESyEYANd+h+p0tOlibBEggBQLo+Y5CYkQUm2ioTc32SxMRtaSQGAYYvSOGUWItEiCBFAig5jtUv1OIWfpAAiSQjQBqvkP1O1t0sDYJkEAKBNDzHYXEiCg20VCbmu2XattOITEMMHpHDKPEWiRAAikQQM13qH6nELP0gQRIIBsB1HyH6ne26GBtEiCBFAig5zsKiRFRbKKhNjXbL01E1JJCYhhg9I4YRom1SIAEUiCAmu9Q/U4hZukDCZBANgKo+Q7V72zRwdokQAIpEEDPdxQSI6LYRENtarZfqm07hcQwwOgdMYwSa5EACaRAADXfofqdQszSBxIggWwEUPMdqt/ZooO1SYAEUiCAnu8oJEZEsYmG2tRsvzQRUUsKiWGA0TtiGCXWIgESSIEAar5D9TuFmKUPJEAC2Qig5jtUv7NFB2uTAAmkQAA931FIjIhiEw21qdl+qbbtFBLDAKN3xDBKrEUCJJACAdR8h+p3CjFLH0iABLIRQM13qH5niw7WJgESSIEAer6jkBgRxSYaalOz/dJERC0pJIYBRu+IYZRYiwRIIAUCqPkO1e8UYpY+kAAJZCOAmu9Q/c4WHaxNAiSQAgH0fEchMSKKTTTUpmb7pdq2U0gMA4zeEcMosRYJkEAKBFDzHarfKcQsfSABEshGADXfofqdLTpYmwRIIAUC6PmOQmJEFJtoqE3N9ksTEbWkkBgGGL0jhlFiLRIggRQIoOY7VL9TiFn6QAIkkI0Aar5D9TtbdLA2CZBACgTQ8x2FxIgoNtFQm5rtl2rbTiExDDB6RwyjxFokQAIpEEDNd6h+pxCz9IEESCAbAdR8h+p3tuhgbRIggRQIoOc7CokRUWyioTY12y9NRNSSQmIYYPSOGEaJtUiABFIggJrvUP1OIWbpAwmQQDYCqPkO1e9s0cHaJEACKRBAz3cUEiOi2ERDbWq2X6ptO4XEMMDoHTGMEmuRAAmkQAA136H6nULM0gcSIIFsBFDzHarf2aKDtUmABFIggJ7vKCRGRLGJhtrUbL80EVFLColhgNE7Yhgl1iIBEkiBAGq+Q/U7hZilDyRAAtkIoOY7VL+zRQdrkwAJpEAAPd9RSIyIYhMNtanZfqm27RQSwwCjd8QwSqxFAiSQAgHUfIfqdwoxSx9IgASyEUDNd6h+Z4sO1iYBEkiBAHq+o5AYEcUmGmpTs/3SREQtKSSGAUbviGGUWIsESCAFAqj5DtXvFGKWPpAACWQjgJrvUP3OFh2sTQIkkAIB9HxHITEiik001KZm+6XatlNIDAOM3hHDKJWvtX//fpk1a5asX79e3va2t4l2am54BO6//3755S9/KZMnT5ZPfepT0qVLFzwIBfEYNd+h+p2nsNTPJj//+c9l3rx5MmnSJPnkJz8ZnSv27Nkj3bt3l06dOuXJxUJey759++RLX/oS/x8v5N0rf9Go+Q7V7/JRwKMkEE6gvr6+pB907dq1USN+z2uEI1d/oOc7CokR4WiioTY12y/Vtp1CYhjglDria6+9Jvfcc488/fTTsmPHDunVq5cMHjxYxo4dK8ccc4xMmTKldCyMTMu1du7cKW9/+9tl06ZN8td//ddy5ZVXttyoADU2b94sc+fOlab/oeql63+quo0cOVImTpwoAwcOLP2N/M/vfvc7+cpXviJTp06Vn/zkJ9HiADLD9vI9pXyXhRmq31kYtVR38eLFcvfdd8uzzz4rW7ZskX79+sm2bdtK/6+cddZZcsopp0i3bt0qnkY/m+gPDZpbW5MrtL2KkH379pXf/va3MmTIkIrvWcQXXn75Zbn33ntFeevnuM6dO8vQoUNLP9S85S1vKYmweqxWm35WuPzyy5P7f7xWfIp4HtR8h+p3e8TowoULRXfN8eeddx4/57UxdP2uof/fajl+/Hg5+uijW3zHat9dmjbWH+HOPvvs0g9yq1atkne+852yd+9e+c///E+ZNm1aQ/VUv+c1OFhgAz3fUUiMCF4TDbWp2X6ptu0UEsMAp9AR9cvcv/3bv8lNN93UotM//elPg/5DavFErsLu3btLX0B0ROJHP/pR+cu//MuQZrmvox+W3ve+9wVd52WXXSYf+chHSsJiUIMEK91yyy1y/fXXt0ocSBBLLl1KId/FgEX1O4ZV0zaa3/WHAhXwqm06QvBb3/qWnHTSSWWr6WeTL37xi3LXXXe1Klfo6OdvfvObpff4/ve/L9OnTy/7fkU7+Oqrr8qXv/xleeaZZ6peeu/eveUPf/iDDBgwoGq90Bd37dol73jHO0ojElP6fzzU/xTroeY7VL/bI4Z//etfy4033lgSnmbPni2DBg1qj7eFfQ//e8hnPvMZec973tMiC79NS5X1/2u7jy+88IJ86EMfKjX5i7/4C/nYxz7W0DzV73kNDhbYQM93FBIjgtdEQ21qtl+qbTuFxDDARe+Iep//6q/+qtGXDx29oCM+9D+A+fPnl35lMhq/+c1vSr9u2d+tKfP4H4zGv4paOqJDv2zpqJms25IlS+Td7353pmb6H/273vWu0uiRTA0TqEwhsTg3sej5LpY0qt+xvKzdE088URptbn9rOXz4cDn11FNLo9vXrFkj97upDfxNv4joCPWmo+Y0N9dCSLQvtPqev/rVr0ojw/337whbRcArrrhCQr/wNb1GHUly8cUXN/q/Wke8jx49WnREiN4H2/T/tNtvv1169uxph1pV5lFI1GvSETL6CPzXv/51jn7KeIdR8x2q3xnDI6q6fc5TAeq2227j0zhRFMMbfec735Gf/exnJeH297//fWlUekuts3x38e+jL0B+/vOflz/90z9teKs8fs9ruDhwAz3fUUiM6AD6Qdw2s/1SbdspJBqp6mXRO+KLL74of/Znf1ZyUh9l/uEPfyhHHnlko7mj9NFj9VNHlFx77bU1+1Cex/9g7DEtLe3XtuoR0PxV/z/jciNedASoPt6no2+WLVvWcAJNatddd12zL9ANFRI17ANmax5XTBRN7twqer6LBYrqdywvbef/36J/q6ijI+a09DcVulTc01HxtjUd1aDH9bNJLYREnR/xqaeeKv1IFPK4l11TW5b6A93Xvva16JH5/ijL4447rjRn4ahRoxouWeevqqurK01dogff//73N7zWWiOPQuKCBQtKPh511FHy4x//uGafWVrLqijtUfMdqt/tEZf2Oc8XoNrjfRHfw3+c+Pzzz5cbbrgh6HuF/91FhUj9wU+/p5XbdOomm75J/2/WUYnbt2+XE088sVG+zeP3vHL+IB5Dz3cUEiOiXju7bWb7pdq2U0g0UtXLondE+wKjXupE9kcccUR1h2v4ah7/g3nuuefkwx/+cGm0zB133CH6GFjWzf/P+Ec/+pEce+yxZU+hfU1H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rIOpSYAE6kBAu7+jkBhhxSIaIqvE7RBx2Skk+gF+4IEHTF9fn5k9e7ZfBqYiARIggQoSgJ+Dv+vp6TFHHnlkBWsQX2T6+Xh2zEkCJFAdAvTz/H++OtbKkpIACcQQ0OznhReFRCEREIpoiCwSt0MRERFSSPQD+9hjj5l169aZgw46yIwdO9YvE1ORAAmQQMUIrF271ixcuNCMGTPGHHzwwRUr/dCKSz8/NH7MTQIkUA0C9PP8f74alspSkgAJxBLQ7OeFGYVEIREQimiILBK3Q8Rlp5DoB3bFihXmmWeeMRMmTDAHHHCAXyamIgESIIGKEYCIiH8+ZsyYYSZPnlyx0g+tuPTzQ+PH3CRAAtUgQD/P/+erYaksJQmQQCwBzX5emFFIFBIBoYiGyCJxOxQRESGFRH+wMloFYuLuu+9uRo0alb7+538FpiQBEiCBchLAiOulS5emIqLG0YjSKvTzQoIhCZBA3QjQz+9oUfr5ulk260MCJCAE6OeFhDEUEney8I6JaIgMErdDxGWnkOiNNZ0j8YknnkhfcfbPxZQkQAIkUB0CEBFnzpyp9kcSzClDP18de2VJSYAEwgnQz9PPh1sNc5AACVSJgHY/j7aikBhhsSIaIqvE7VBERIQUEsMB4/W35cuXm40bN6biYvgVmIMESIAEykMAC6tghPWUKVPUvc7cqBXo5xuR4XESIIEqEqCfH9xq9PODmfAICZBAdQnQzw9sOwqJA3l4fRLREIklboeIy04h0QspE5EACZAACZAACZAACZAACZAACZAACZAACZScAIXEiAYS0RBZJW6HIiIipJAYAZhZSIAESIAESIAESIAESIAESIAESIAESIAESkeAQmJEk4hoiKwSt0PEZaeQGAGYWUiABEiABEiABEiABEiABEiABEiABEiABEpHgEJiRJOIaIisErdDERERUkiMAMwsJEACJEACJEACJEACJEACJEACJEACJEACpSNAITGiSUQ0RFaJ2yHislNIjADMLCRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAqUjQCExoklENERWiduhiIgIKSRGAGYWEiABEiABEiABEiABEiABEiABEiABEiCB0hGgkBjRJCIaIqvE7RBx2SkkRgBmFhIgARIgARIgARIgARIgARIgARIgARIggdIRoJAY0SQiGiKrxO1QRESEFBIjADMLCZAACZAACZAACZAACZAACZAACZAACZBA6QhQSIxoEhENkVXidoi47BQSIwAzCwmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQOkIUEiMaBIRDZFV4nYoIiJCCokRgJmFBEiABEiABEiABEiABEiABEiABEiABEigdAQoJEY0iYiGyCpxO0RcdgqJEYCZhQRIgARIgARIgARIgARIgARIgARIgARIoHQEKCRGNImIhsgqcTsUEREhhcQIwMxCAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRQOgIUEiOaRERDZJW4HSIuO4XECMDMQgIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkUDoCFBIjmkREQ2SVuB2KiIiQQmIEYGYhARIgARIgARIgARIgARIgARIgARIgARIoHQEKiRFNIqIhskrcDhGXnUJiBGBmIQESIAESIAESIAESIAESIAESIAESIAESKB0BCokRTSKiIbJK3A5FRERIITECMLOQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmUjgCFxIgmEdEQWSVuh4jLTiExAjCzkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJlI4AhcSIJhHREFklbociIiKkkBgBmFlIgARIgARIgARIgARIgARIgARIgARIgARKR4BCYkSTiGiIrBK3Q8Rlp5AYAZhZSIAESIAESIAESIAESIAESIAESIAESIAESkeAQmJEk4hoiKwSt0MRERFSSIwAzCwkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAKlI0AhMaJJRDREVonbIeKyU0iMAMwsJEACJEACJEACJEACJEACJEACJEACJEACpSNAITGiSUQ0RFaJ26GIiAgpJEYAZhYSIAESIAESIAESIAESIAESIAESIAESIIHSEaCQGNEkIhoiq8TtEHHZKSRGAGYWEiABEiABEiABEiABEiABEiABEiABEiCB0hGgkBjRJCIaIqvE7VBERIQUEiMAMwsJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkEDpCFBIjGgSEQ2RVeJ2iLjsFBIjADMLCZAACZAACZAACZAACZAACZAACZAACZBA6QhQSIxoEhENkVXidigiIkIKiRGAmYUESIAESIAESIAESIAESIAESIAESIAESKB0BCgkRjSJiIbIKnE7RFx2CokRgJmFBEiABEiABEiABEiABEiABEiABEiABEigdAQoJEY0iYiGyCpxOxQRESGFxAjAzEICJEACJEACJEACJEACJEACJEACJEACJFA6AhQSI5pERENklbgdIi47hcQIwMxCAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRQOgIUEiOaRERDZJW4HYqIiJBCYgRgZiEBEiABEiABEiABEiABEiABEiABEiABEigdAQqJEU0ioiGyStwOEZedQmIEYGYhARIgARIgARIgARIgARIgARIgARIgARIoHQEKiRFNIqIhskrcDkVEREghMQIws5AACZAACZAACZAACZAACZAACZAACZAACZSOAIXEiCYR0RBZJW6HiMtOITECMLOQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmUjgCFxIgmEdEQWSVuhyIiIqSQGAGYWUiABEiABEiABEiABEiABEiABEiABEiABEpHgEJiRJOIaIisErdDxGWnkBgBmFlIgARIgARIgARIgARIgARIgARIgARIgARKR4BCYkSTiGiIrBK3QxEREVJIjADMLCRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAqUjQCExoklENERWidsh4rJTSIwAzCwkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAKlI0AhMaJJRDREVonboYiICCkkRgBmFhIgARIgARIgARIgARIgARIgARIgARIggdIRoJAY0SQiGiKrxO0QcdkpJEYAZhYSIAESIAESIAESIAESIAESIAESIAESIIHSEaCQGNEkIhoiq8TtUEREhBQSIwAzCwmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQOkIUEiMaBIRDZFV4naIuOwUEsMBr1ixwmDfsGGD6evrC78Ac5AACZBAiQj09PSY0aNHm8mTJ6d7iYrWsaKsW7fOYN+8eXP6g1vHCsIbkwAJkEABBLq7u82IESPMmDFj0r2AS1b+EvTzlW9CVoAESMAiQD9vwUiiFBIH8vD6JKIhEkvcDkVEREgh0Qtpmgii4ZNPPmnWrl3rn4kpSYAESKBCBMaOHWsOOOAAA3FR44bvxBdffNFs3LhRY/VZZxIgAQUERo0aZXbbbTeDTqfGjX5eY6uzziSgi4B2P4/WppAYYfMiGiKrxO0QcdkpJPoDXrhwYSoiTpgwIf0HDCN4tHa2/akxJQmQQBUI4AeSpUuXpqPwICYedNBBVSh24WV8/vnnUxERI3fg44cNG2a6uroKvw8vSAIkQALtJrB169bUxyNEJ3OPPfZodxFKcT/6+VI0AwtBAiTQAgL08zuhUkjcycI7JqIhMkjcDkVEREgh0Q8rXmV+5plnDEREjNbhRgIkQAJ1JPDYY4+lHc0ZM2aoe80ZYury5cvT1//Gjx9fx+ZlnUiABEjArFq1yqCzOWXKFIMfjjRt9POaWpt1JQG9BDT7eWl1ColCIiAU0RBZJG6HiMtOIdEPrHSuMUpH2z9dfoSYigRIoA4E0MnC6GvMo3XwwQfXoUredVi2bJnZtGmTmThxohk+fLh3PiYkARIggSoRgIiITubIkSPNnnvuWaWiD7ms9PNDRsgLkAAJVICAZj8vzUMhUUgEhCIaIovE7VBERIQUEv3APvDAA+nCKrNnz/bLwFQkQAIkUEECmAsW/g7TNhx55JEVrEF8kZ999tn0OxFzh3EjARIggboSwP//vb296RyJ++67b12rmVsv+vlcLDxIAiRQMwKa/bw0JYVEIREQwnBkk7gdIi47hUQh5Q7vvffeNAGFRDcnniUBEqg+Aa3+7umnn04bj0Ji9W2YNSABEnATwKJS2Pbbbz93wpqdpZ+vWYOyOiRAAg0JaPXzAoRCopAICEU0RBaJ26GIiAgpJPqB1dqx9qPDVCRAAnUioNXfsYNZJytmXUiABFwEtHYw6eddVsFzJEACdSKg1c9LG1JIFBIBoYiGyCJxO0RcdgqJfmC1dqz96DAVCZBAnQho9XfsYNbJilkXEiABFwGtHUz6eZdV8BwJkECdCGj189KGFBKFREAooiGySNwORURESCHRD6zWjrUfHaYiARKoEwGt/o4dzDpZMetCAiTgIqC1g0k/77IKniMBEqgTAa1+XtqQQqKQCAhFNEQWidsh4rJTSPQDq7Vj7UeHqUiABOpEQKu/YwezTlbMupAACbgIaO1g0s+7rILnSIAE6kRAq5+XNqSQKCQCQhENkUXidigiIkIKiX5gtXas/egwFQmQQJ0IaPV37GDWyYpZFxIgARcBrR1M+nmXVfAcCZBAnQho9fPShhQShURAKKIhskjcDhGXnUKiH1itHWs/OkxFAiRQJwJa/R07mHWyYtaFBEjARUBrB5N+3mUVPEcCJFAnAlr9vLQhhUQhERCKaIgsErdDERERUkj0A6u1Y+1Hh6lIgATqRECrv2MHs05WzLqQAAm4CGjtYNLPu6yC50iABOpEQKuflzakkCgkAkIRDZFF4naIuOwUEv3Aau1Y+9FhKhIggToR0Orv2MGskxWzLiRAAi4CWjuY9PMuq+A5EiCBOhHQ6uelDSkkComAUERDZJG4HYqIiJBCoh9YrR1rPzpMRQIkUCcCWv0dO5h1smLWhQRIwEVAaweTft5lFTxHAiRQJwJa/by0IYVEIREQimiILBK3Q8Rlp5DoB1Zrx9qPDlORAAnUiYBWf8cOZp2smHUhARJwEdDawaSfd1kFz5EACdSJgFY/L21IIVFIBIQiGiKLxO1QRESEFBL9wGrtWPvRYSoSIIE6EdDq79jBrJMVsy4kQAIuAlo7mPTzLqvgORIggToR0OrnpQ0pJAqJgFBEQ2SRuB0iLjuFRD+wWjvWfnSYigRIoE4EtPo7djDrZMWsCwmQgIuA1g4m/bzLKniOBEigTgS0+nlpQwqJQiIgFNEQWSRuhyIiIqSQ6AdWa8fajw5TkQAJ1ImAVn/HDmadrJh1IQEScBHQ2sGkn3dZBc+RAAnUiYBWPy9tSCFRSASEIhoii8TtEHHZKST6gdXasfajw1QkQAJ1IqDV37GDWScrZl1IgARcBLR2MOnnXVbBcyRAAnUioNXPSxtSSBQSAaGIhsgicTsUEREhhUQ/sFo71n50mIoESKBOBLT6O3Yw62TFrAsJkICLgNYOJv28yyp4jgRIoE4EtPp5aUMKiUIiIBTREFkkboeIy04h0Q+s1o61Hx2mIgESqBMBrf6OHcw6WTHrQgIk4CKgtYNJP++yCp4jARKoEwGtfl7akEKikAgIRTREFonboYiICCkk+oHV2rH2o8NUJEACdSKg1d+xg1knK2ZdSIAEXAS0djDp511WwXMkQAJ1IqDVz0sbUkgUEgGhiIbIInE7RFx2Col+YLV2rP3oMBUJkECdCGj1d+xg1smKWRcSIAEXAa0dTPp5l1XwHAmQQJ0IaPXz0oYUEoVEQCiiIbJI3A5FRERIIdEPrNaOtR8dpiIBEqgTAa3+jh3MOlkx60ICJOAioLWDST/vsgqeIwESqBMBrX5e2pBCopAICEU0RBaJ2yHislNI9AOrtWPtR4epSIAE6kRAq79jB7NOVsy6kAAJuAho7WDSz7usgudIgATqRECrn5c2pJAoJAJCEQ2RReJ2KCIiQgqJfmC1dqz96DAVCZBAnQho9XfsYNbJilkXEiABFwGtHUz6eZdV8BwJkECdCGj189KGFBKFREAooiGySNwOEZedQqIfWK0daz86TEUCJFAnAlr9HTuYdbJi1oUESMBFQGsHk37eZRU8RwIkUCcCWv28tCGFRCEREIpoiCwSt0MRERFSSPQDq7Vj7UeHqUiABOpEQKu/YwezTlbMupAACbgIaO1g0s+7rILnSIAE6kRAq5+XNqSQKCQCQhENkUXidoi47BQS/cBq7Vj70WEqEiCBOhHQ6u/YwayTFbMuJEACLgJaO5j08y6r4DkSIIE6EdDq56UNKSQKiYBQRENkkbgdioiIkEKiH1itHWs/OkxFAiRQJwJa/R07mHWyYtaFBEjARUBrB5N+3mUVPEcCJFAnAlr9vLQhhUQhERCKaIgsErdDxGWnkOgHVmvH2o8OU5EACdSJgFZ/xw5mnayYdSEBEnAR0NrBpJ93WQXPkQAJ1ImAVj8vbUghUUgEhCIaIovE7VBERIQUEv3Aau1Y+9FhKhIggToR0Orv2MGskxWzLiRAAi4CWjuY9PMuq+A5EiCBOhHQ6uelDSkkComAUERDZJG4HSIuO4VEP7BaO9Z+dJiKBEigTgS0+jt2MOtkxawLCZCAi4DWDib9vMsqeI4ESKBOBLT6eWlDColCIiAU0RBZJG6HIiIipJDoB1Zrx9qPDlORAAnUiYBWf8cOZp2smHUhARJwEdDawaSfd1kFz5EACdSJgFY/L21IIVFIBIQiGiKLxO0QcdkpJPqB1dqx9qPDVCRAAnUioNXfsYNZJytmXUiABFwEtHYw6eddVsFzJEACdSKg1c9LG1JIFBIBoYiGyCJxOxQRESGFRD+wWjvWfnSYigRIoE4EtPo7djDrZMWsCwmQgIuA1g4m/bzLKniOBEigTgS0+nlpQwqJQiIgFNEQWSRuh4jLTiHRD6zWjrUfHaYiARKoEwGt/o4dzDpZMetCAiTgIqC1g0k/77IKniMBEqgTAa1+XtqQQqKQCAhFNEQWiduhiIgIKST6gdXasfajw1QkQAJ1IqDV37GDWScrZl1IgARcBLR2MOnnXVbBcyRAAnUioNXPSxtSSBQSAaGIhsgicTtEXHYKiX5gtXas/egwFQmQQJ0IaPV37GBW24oXLlxo7rrrLrP77rubU045xXR1dQ2o0NatW83w4cMHHOMHEtBKQGsHk36+8xZ/5513mieffNLstttu5uSTTx7kqztfwvwSwHYWLFhgRowYYU4//fQ0zE/JoyRQDgJa/bzQp5AoJAJCEQ2RReJ2KCIiQgqJfmC1dqz96OhIhecF//y89NJLuRXesGGDmTBhgtl///3N9OnTTXd3d246HiSBshPQ6u/YwRxsmRs3bjRPPPFErj+DKDdy5Egzfvz4dB+cu71HHnjgAXPdddeZPffc01x44YUDOqe33HKLue2228wBBxxgzj777AHnWl1K/J/1yCOP5N5m2LBhZpdddjGjR482Y8aMMbvuumtuOh4kgaIJaO1g0s8Xa0lbtmwxixYtSvcVK1b09zvhy/Cjzl577ZUKhvYPOz/5yU9SITHPVxdbumKvJt8xPT095sMf/nDqt4u4A78jiqDIa+QR0OrnhQWFRCEREIpoiCwSt0PEZaeQ6AdWa8faj46OVHhmPvrRj5r58+c3rTA6hp/73OfSX1opKDbFxQQlI6DV37GDOdgQ8U/od7/73cEnMkemTp1q5s6da/bee+/MmfZ9/MMf/mCuvfbaQUIifDc6rk899ZQpugPoUzt0tL/+9a+bzZs3N00OjhhNOWPGjKZpmYAEhkJAaweTfn4oVrMzL/zaHXfckf5As/Nofgz/B7/3ve9NBUWk+OUvf5n+uFI1IVG+Y/A98rd/+7dm1KhR+RUOPMrviEBgTO5NQKufF0AUEoVEQIh/mmWTuB0iLjuFRCHlDrV2rN1UdJ3FM/OP//iP5ne/+513xadNm2a+9a1vGYSt2J599llz1llnmY9//OPmnHPOacUteE2FBLT6O3YwBxt7b2+v+c53vjP4RIMjb3nLW8xhhx3W4GxrD0snL69zKiNg8EoaOoDtfMUZr1Tje2DdunXeAFrJEeX5r//6LwPR0jU6E6OLkO7UU081r3rVq7zLzoTVIKC1g0k/P3T7XLNmTfq9kP1xBCO++/r60j4m/j+VDYLb3/zN3/T7XQqJQmZHWLbviIGl46cqE9Dq56XNKCQKiYBQRENkkbgdIi47hUQ/sFo71n50dKTCMyNC4ite8Qrzve99z+C1NNm2bdtmli1bZubNmzeg441fLr///e+bgw8+WJIWFv7sZz8zX/nKV8xf/dVfmfe9732FXZcX0k1Aq79jB3Ow3dtC4jvf+c506gb834ANPg/n8cow5rvCBn/3oQ99yIwbNy793M4/LiERIt7SpUvTETGYgqKdm91JfO1rX2tOOOGEAbfHaJQXXnghnXtLOELohOAJ4bPoDfe69NJLB43czN7nvvvuM7/5zW/M6173OnPcccdlT/NzxQlo7WDSzw/NcOGv/vM//3PADyNvetOb0h+Q7B9o8D/zypUrDfwIpvux/wemkDiwDcr2HTGwdPxUZQJa/by0GYVEIREQwnnLJnE7RFx2ColCyh1q7Vi7qeg6i2dGhESMzvjGN76RdprzKDz//PPm7//+781jjz2WnsYcYtdff33/r7F5eUKPoTzvf//7DTrPH/nIR8wFF1wQegmmJ4FcAlr9HTuYg83BFhLPO+88s88++wxOlByB4IQOI7a3v/3tBj+2tHtzCYntLot9P7uT6BLl4NN/8Ytf9H9vuHjb1w+N33777eb3v/+92Xfffc273vWu3PkiUZYrr7zSLF682Jx44onm2GOPDb0N05ecgNYOJv380Azzt7/9rZH/EfBDB37Exv+4IRuFxIG0yvYdMbB0/FRlAlr9vLQZhUQhERDiH0DZJG6HiMtOIVFIuUP50pw9e7Y7Ic/WlgCeGRESDz30UHPZZZc1FBIBAc/WRRddZB588MGUyRe/+MV0DrE8QOisP/TQQ+kOp497YRGDo446Kh29kp2HZdWqVWmH8z/+4z/Syx144IHmAx/4gMEvxdgwyfWcOXMGdRCxcAL+Cbz11lvT8iHtfvvtZ8444wzOyQUY3FICWv0dO5iDHwBfIRF+S+ZSbCSW4TU4jNpesmSJwatx8FeYT3bKlCnmkEMOSRcbGVyCnUfgU7EyMxYuwetz6HxNnjzZHHHEEWaPPfZIf1TJmyMRV8BiAFgoC7505syZOy+aiWHRLPji5557LvXDOI3RlShfIxE1c4lBH307iciI+v385z9Pr5EVEmXhG5yEz8d3RN4GTmCEENNqgBE2lAM/boER+GH06Jvf/Ob+7wkshoBRQ5s2bTJYVAAL1GDDyqr4PsEIVGwQD/IY4voYUfn444/3zweJEUq4JsqL++VtsAvkwTxq4IxyQMDEtZYvX562g891cG2MtsTiQPgxD9+jKOvYsWPTuTux6EP2uzSvPFqOae1g0s/HWzhGGGI0IrahjD7PConwOXje8dzDH8AXyPeCzwhyfJ/gf22MOscGH4IfSvC/OhayarbhNexHH33U4H9r+Brkwf3h87FgjCwUIz9Woe6N5kjEXLzw1fCH+P/aR2Qt6jvCrmfod5l8v+K7AfUVX2xfU+J4hnB95Gn0XQQfDF5r165Ns4kPx/eB8JTr2SH8Er4P6MNtKvFxrX5eiFFIFBIBIf55kk3idoi47HACiNsh4rLDodhxdCrwGa9vatq0dqw1tXGzuuI5CREScT10Cs8999z00vhnAs+N3fnDPy2Y3xBfto02dLQxRxn+IcKGf7bwiqFrmzhxYjoC0u64oWP413/91/1iYzY/XkeE8MnFYbJk9H3W6u/YwRxs675CIl4dxg8b+J8hKyTif4Ybb7zR3H333YNvYB05/fTTzV/8xV9YR3ZG0VG8/PLLB7xOt/OsMa9//etT34qR33lzJGJ0HcTESZMmmQ9+8IO5HRlZkdO+rh3HQjJnnnlm8MrKsZ1EfHegMyybLdZiJOGMBguyQKCVxV1e85rXpGxQBrQPOn+NNvh+3BOsXBt+qEIn2u4MQnj98Y9/nLZ/Xl58F51//vlp22TPS72Q5j3veU+68rYIAtm0SINFGzC/o72hXhBgIUS4tqw460pb93NaO5j08/GWvWDBAnPzzTenFxjKSGUREjGnIubUvfrqqxsWCtMqHH/88QP8jZ34/vvvT//ftY/ZccwDm/fDB9LgewXz5+J7rtFm+4xmQiL+d8KP9djwIwb+57b/5290j6K+I+T6sd9l0i64TqO5cfFj4PeSqZ2woY7ZOYfxfY83FFCGvA2CIvoa+C62N4ivmK6JPtymMvS4Vj8v5CgkComAEIKHbBK3Q8RlxwOPuB0iLjuFxB0ktXasxY4Y7phvNFRIxHOEkYL45wOCIEaC2L+u4lfYt73tbemoCzDGK9OzZs1Kf+lFZ04m5x8zZkz6jxL+IcGXwte+9rW0wyb/0KFzhU64THyNX1AxsbWIglhZ78Mf/nB/M6JziVE8+Ofpqquu6j+OTuTHPvax/s+M6CSg1d+xgznY3n2FRDtdVkjEVe0OCkZ6YKQGBKk//elPBot6yAaRT0bQyTF0ML75zW/2+zf4O/gwjC7DDysYAWJveUKi3D/vHPJC6Lzzzjv7L4MOLkaj4N733HNPv0CGThB+dIFP9t1COol4tRkjY+C7L7744gHfFzZju3ObLUfe/fBdhM4dREaMSsT/dtjsUSf4XxAjD2XEOn4Iw4ayQODFdbHhRzHM8yhCIq5nf49A5IM4gHv+8Y9/TEeCphmTP1lxFMftekk6GRGD0ZDr168fIELndV6lfZEfcxfj7RHYB2wL9cB3I45jPuGQtpPy1DHU2sGkn4+zZviHb3/72+kzBR8MkSz2WbKfVykNRg6/8pWvTJ9TjEjDyHXZGi0+hVHTmKNXNvxfC4EKP2zY3wt5YiJGqON7xd7wgz3+V4eNrF69epBQ5hIS8V12zTXXpJeD74Gvga/y2fJ8dqN8ru8I5BnKdxm+H2T+S/h9TJ9kfx+jnFiACwIszqN/YwuC8PlXXHFF/8hQpDn66KNTpg8//HD/dz3sJzuXsm0TOI/+UNaHD9XuGjGt83Gtfl7alEKikAgI4exlk7gdIi47HnrE7RBx2Skk7iCptWMtdsQwTkgEN3w54rVmbPgV7/DDD0/j8kdG96JjZv9ThtfIIFzinwJs+AcOIqNs+ELHK8l49cs1RyI6YRArMfoRX8KY29FegROvD7wnGQWC62DDL4KNRrrIvRnWm4BWf8cO5mC7tkUel3hlz5uVlw6vnELQgQ+z/RzuCHuTURx5IqTdMYLAhzkYIejJhpGGP/rRj/rFsTyxUDopeefQYcWCWNjgI7Mj5+CLb7jhhv45IFEG12rHUi4J7U4iRtZArLM3/A+GVwbvuuuu/lEc6HydcsopdrIBglseY0ls3y+Pp7BwzZGI//0wghE/ZrlGHtkiL8Q//NOeHVUKMVG+5/JEQNvGUAf8EPaXf/mXAxbsgRCIEYeyEqw9IhPnsCo2RiW++tWvNieddFK/yClMIBrgO67RyCRJpynU2sGkn4+zcohMEN7wnLl8h8/VxQdJWizWAhFRfpzAcUxR8NOf/jRNgqkr8H+qfR72K9Np4MeNd7/73QNeI4av+OEPf5jmz/od+FyZAxYJ8IMKymALf/B9eC0X3xmyNRIS8d0mU1LgGhARIYL5brbPHsp3RBHfZfaIQwx8wA9aEASx2d/Fc+fOHdAnwXlZoAtxMMXUGRBmZcOPddKngWj71re+NT1FHy6Eig+1+nkhSSFRSASEcJCySdwOEZfdFhBxTARECSkk7iCptWMtdsQwXkj81a9+Zb7whS+kCLNiYDOu6CCj04wNnTp0kmTDP3N4zQ6dI9eqzfiF9JJLLkmzffWrXzUnn3yyXKI/xC+FslgLOqh/93d/13+OEX0EtPo7djAH27ot8sBHYJ45e0NnC4t3iM1gdAJGKUjHw07bKI7/MyAEYZRDdlVjjNqG70NHI9sZtK/3zDPPpGIijuWJhdJxzZ7D/z14tU1Gr2DhAIyCy9tkJAjOudJl89qdRJyDkAr/jQ2jMmUOKXwGt9cnr2nD19udZpyz22IoQqLUI8sC95DNHpmSJ0ZKOlsExj/sGBGUt9npsq+w2/VCpxMjnfI64fb8bHaZ7PwuLnnl0nxMaweTfj7O6m0/VqSQaD/L2ZLhBwj8EIEfePBWjT3fIf63xShA+Mzs6G25ju133vGOdxj8CITNFstCfhiyhUQpD+wJ0zpgixmxjnw2W3yO+Y4o8rvMFvykfdAfkWkv8pjZ3xnw33jlGe2W3f77v/87/b7FORmVSB+epVTcZ61+XghSSBQSASGciWwSt0PEZaeQKKTcoXSSuNiKm1Odz+KZCX21GTzQafvSl76Uoskbkehihg42nGCeWGi/Ft1ISESZP/WpT6WjaTC/F0Yb4vWu7AY/gFdHMDoRq61iLrK8fwCy+fi5ngS0+jt2MAfbs/0PPnwC/IhsGOWF179kw3m8mmxP3yDnmoX4wQU/aGTFLYxkvPTSS9PsjeZswkl0xOSVq+w1cL6RkGiPssnrHCGvbHbnUzpXcs4VZjuJrrQQSzEab/r06YOS2W3hEszs++WVsxEL+4bNriFpIcLi9XKUG9NpIMzbbEE42z52vbDA2Bvf+Ma8SwzobNv1stsQ93/Pe94z4HW73IvxYDpNCjBgmgFNG/18XGvbz6lrlLLP1cUHuURAXEdeF8Z3i724CfyTzPnq8hn4cQpv4WCzfYY9h2DeD2Rphpw/tpCIH9zBxB7NHvv9Z/vbnNsOONToO8L2g0P9LkPfAfXCXLVoI4wcxKh88IRYCl+f/bHHto+8V8mlEvboTZnqwi47fbiQKiakkHhaasOYcgV+BPaM3Y7LMfx4i7gdIi47WgRxO8zG05MF/ulKRgLtVPUKvLDrUnAAskncDhGXnUKikHKHWjvWbiq6zuKZiRESfUckYlQKhDyMVMHrYvjHAp30L3/5y+m8Vlmx0EdIRBp0SnFdjPT4l3/5l/5nX1oPThHiIl6/Rjq89ox/vOBkuekkoNXfsYM52N7tzsHgszuPYEL8Y489dsBrTDvP7ozhNWH4NUy5gB9K5K0HzHWFe2VHuoR0+KRzmhWqcPdG5+z64ZXYY445ZmdhMzG7s2d3SjPJBn2082VXQIafhb+H7WGuQdnwejB+RJJ/WnHcLmsZhES7Xtl2k3rYobRBNq1dr0ZzoeE69v2y/DH/I16rkw2v1cEe8Uokt3wCWjuY9PP59tDsKP6fxPx5+B/VJd41uw7Oiy+AGAVRyp6qws5vC3e2kGiPTsZctngdGP7B3uBbUWbcC5vtM2Q0I+6LkYU+C6LgGlIeEfNkgSncC/MJ2vMFIr3vZvu22O8I248W8V0G0RBvCuA72t7saSXs4w899FD/ojmYwxh+PpsXnOB35PVm+3uMPtymWVxcq58XghyRKCQCQhENkUXidoi47BQS/cBq7Vj70dGRCs/MUIVErL585JFHDgCGifwh3OGXV9cWKyRiHkXMj+i7Yd6Syy67jEKiL7AaptPq79jBHGzMducEoxExegliIDYIN3jlGL/gwj+NGzdu8AX+fASLXuB1KXTEXFtWBJSOGzogdkcy7xquV3al45q9vl0/u1OTd3109mQUTLMRH3Z+u5PoGsmDDjrKKfMAZkdg+pbVvp/deZYyNWIh5xE2u4akER5597Gvh7i0DzrvaEt0xrHZ9XKNDnKVCf/L5q0UCrt5wxveYGQRhfSG/JMS0NrBpJ+PewDs5y/rR0OvKD4o+6NC9jqN/L/tM7J5Gn22fZT4otB6SHmy9wi9Tja/zTb2O8JmUtR3mT16EGXGD4bgmLc1YpOXVo7Z5aQPFyrFhlr9vFCkkCgkAkIRDZFF4naIuOwUEv3Aau1Y+9HRkQrPTKiQiDyf+9zn0pXcMCIQ871MnDgxBYZn7/Of/3z/Km84iE4PfsnDL6xIjw77D37wgzR9rJBorwp94IEHDngVMb1w5g9ebcbIRZSFm04CWv0dO5iD7d3unFx44YVm2rRp/YnwSitebcXm6hDaowolM3wcFtXAiDuMBsE8ixi9kO2QSefER0iUieCz18A9peOaPWfXr9FICymz/foVRrzhdS97xKCky4Z2J9HuzGbT4bO9eEl2vkm7rHYHLHsdu5x592vEwr6OT5ntNNm5Le1rSVw67xAQ7degfetl3y+vXrhPI8EaYjfmSNP2Gq+wzwu1djDp5/Osofkx269gpC++D/BcxWw+PgjXbeT/bZ+BMkyZMiX1nY3Kgh9pMEpPFhqU+7u+t/KuJeXJO/f6ZG5b/P8es/n4Nrluo+8Im0lR32VY/Vr6ILi/a6SjzQZzPOI7G/2cRhveSsDCZvb/FEhLH96IWNxxrX5eaFFIFBIBIcQL2SRuh4jLTiFRSLlDrR1rNxVdZ/HMhAqJeFUYE8tjwxcrXqdAiO13v/ud+Yd/+Ic0jn/K8AozRk3YcxiiYw0nGDtHIv55QmcXIxJRjs9+9rNeHd+0UPyjloBWf8cO5mCTtzsnWfEKPtFeqCRvXiT7FTR0+DBCGj9oZF9lk0n1s0KfiJDolMjE7INLueOICFXZa+CsdByz5/BPtqz8iYWt8ENKo83u7IW82mfnaySA2feUsqLOMqE/zrvaws5vp8u7n1w/y8K+hk+ZbWHBh4fcF3NoYi4x1A+bXd6sjYWWSdKjbI8//ng6ShGjZmV773vfy9ed/wxDaweTfl6ehvBQFspATtfo4WZXFl/g8kG4hohT8BX2iHTbb7umQ2hUDvmuyPqiRunluJQHn+X1ZlwL/2tjc/mvNEGDPz7+1s4q/OzvCJtJEd9ltmBp3zv7g6KckxWb8T2PBddiX/OW69GHC4mhhVr9vFCjkCgkAkL8cy+bxO0QcdkpJAopd6i1Y+2moussnpkQIRHpsUoyFjjBhlXl8OWKDec++tGPmvnz56edqauuumrQaqhIh1fczjrrLEQHrczsM0cinu+LLrrIPPjgg+nk/ej020JlemH+IYEMAa3+jh3MjCEkH5uJPLZQmB1phqtJ5wLxRp0b/GAiqzZnO5b2q1XNRllI5zB7DdxbOl7Zc/Zk/FgpOW9Ve+THhhWq8Sovypsn0O1INfhvaCdR6mF3EnHVZm0hd7YXqMkrZyMWkh+hT5nx/YI507DoTnb0pH0txPGdJ5P3Z9vAt14+ZcreF2W8++67++fkwhyYGFXDzXCxlQars9M2GhPA/wa//e1v0wQYlY03XmI2Hx+E64pwlxUS4YuxuBZ+JGjmt/PKhzl5b7vttvT/72Y/UNn57fJIvsWLF5srrrgiTYZyYtV5GTBg53XFQ31b3ndE0d9lcg+UG98jmJoEvPE9D1E3+2OgPXox70dFV/1d5+jDXXSan6OQyMVWmltJJgX+YZNN4naIuOx4QBG3Q8Rlxz/Mdhz/8OEzRg9o2rR2rDW1cbO64jnxFRKR9sorrzT/9m//ll4WrylfffXV6esXOGBf6+ijjzZf//rX+0dn2OWwRy26Xm3+yEc+kv46bOeV+3zhC1/onwD529/+tpk1a1Y2GT+TwAACWv0dhcQBZpB+8BF5brrpJnPHHXek6bOvuErHyzWpvS1GZkUm+5xr1Bt+WIHIh45O9hooWKOOK3wx5q7FqO9GHaS0YskfWxQNGQUT0knEolvf/OY3U7ESo2XwA5S8PujTFigrXhP//e9/nxbbJSS6Xuuzy+yas+vWW29NfxDDzVyj/WxxEwvJyEh95POtl12mvHrhWnkb2lhEzLxFbPLyaDimtYNJPx9v3bafxVXwHOOZCt0a+ePsdeT7Iyskom8Kfw9BMfuDS/YaeZ/x4/qvf/3r9NTcuXO9/y9uVB6IbLKAiMuv5pUFx0J8W6PviCK/y6SeKJt879o/6mV9ONLZ39V538FIE7vRh8eS0/uDkRDjiEQhERDigZNN4naIuOwQBRG3QxEOEVJI3EFSa8da7IjhYPEPC6RIB8/m8+ijj5pktXbzxBNP9B/GK8V4pU82PHOf+tSnzA033GCwah3+oUGn0d7wWvQ555yT/qOE41kh0X5tec6cOeZf//Vfc8uDL/9zzz03vTTuhVdTsnOSyH3xKgM6/By1KER0hlr9HTuYg+3dR+TJdi7f9773Gaw8ic0W3/Je+8L/GVj5UhYYyXZA4CvxAwjmTcKWdw0clxEmiGevgWOujisWusK0E9hmz55tsMhJdu5DcMAiVPifqJngmF7I+mN3El2iHDrFKOeiRYvS3NKBk0vZr67hFWyMBsqWE5zwqjbKiS1PcMPIdMxvmTeCVO5lv7bsWljGtg98h2EEPK5rbxB3L7300nTkIsqLNGIfSGdfo1H7Ip3NMVsvfB+OHj0ayQZtsLHLL7/c4Ds1y3RQYkUHKCTu8FGKmryQqtqiGS6IBTiwanLWF7lu5vLHdj4RtLJCItLItBeIw0edeeaZDf93lZF0SIvNfm0X18brupizt9nWqDz4nsL/1vI/RNY/Nbuu7duG8h1RxHeZLQhmv+tktWvUJ+8Ng+woRthGoy3bJi4fDr7f+9736MMbwXQc1+rnBQmFRCEREOKBk+3/Z+87wOUmrrYngMFg3LANxhgwmBJiMMWhBQgkhgD+KKb3Dj+9tySUUEKHUBIwhGp6Cx1CDAETCMUQSCA0G/gMuOBQDDZ26N9/X12OPDtX0s7savdqdd55Ht0zK82MRq/mHum8OnNG8rZEXja8YCFvS+RlI5HYjqRWw1rGEWUlkQgPw+OOOy56aQHpBkIRxOHDDz9spkyZUgHXCSecED1wK3a2/cBUPnjCICFmGBZegXGFF4qxY8eas88+Ozomf1wiEf+jMm0ZZTDNAg927MdUM7xYoV/4/7a9ElH28MMPjwxMvPjhfDBc4cWCKdaYqgZjmkkvAlr1nRgBNsmhdxS0X7kvyWMbMLZHxsSJE80tt9wSNQaDDVOeEBMWCboShonEl8K+JBLQ9oRAmU033TTSmdBv8M6AvgQxJimpjSzDFToTuljISqxOvfHGG5vu3btH+vTNN9+MYu1J+3gxHTp0qPysKm0jEWMLH35k5Ws8P0Da4fmBj1CSgJVMnZN9aAfT+TCFDQlkIgxWLFaDawBOMu1Q6iQZtLbHIp4T8MjB+RD8HouB4WMSnhvixYe20M4qq6wS7cf96tevX0wcyCI3KIe6CMeBe4w2pk6dau69997IUxTHEQcY3pw26eA7xmwc7euCQYoPe0svvbRZccUVo77BAAYm8DSFdyamHyIlGb/RAYV/tBqY1PP1DXb8X4Mwgl6UBP2x4YYbGuhOsRuhT/D/j/cJEEoIKyApSx9LGcg04g7HbH2A3+gDPtjjQzn6AL0K3fLaa69FH6rseLMo/8wzz0TPDuSRsLr7MsssE9UF0QidgTLwCsdHeKSs/tjkJMriAz6ehT7JvpZ6nhH1PsuAG54xsCGQ3HiI+GgIGwHPgKRnlE1Coj6uBbj26NEjwhX18NzHmMDzG7Fy8SxI0+EYa9DheMZThwPR8KRVzwtSJBIFiQCJfzxJkrcl8rJB6SBvS+RlkwcCfiMPpYw8pzYLwpRaEMD/iUxt9rlmGF3wRMTqpEkJD2p4lMALJS3hRQTGJbx6XCIRdRDjBaSgm9wVomG0gqh86KGH3KIdfmO6CGLOMOlFgEQiPVVk9PuSPNCPtuegEDbYjzAPYgRIu7YEAQRiCp4uSSQgytoeh3ZdycOoWX755SOjMakN8ZRIOoY27Jhb0maSzFq1Mqk89tlGYloZez/IuD333DMOhWEfs1fKtvfbeaxMjHhVeGezCTcpY8fSkn0i7TiUaecC1rZRjndCeDkKQSNtuRJGOsaF6/HuO8ZsL0n7usQIhcxK9a40m9V2Kx7TamDKOOUHo/pGreuZmNWaG/Kimj6WtmziztY5chx6G57iWe/RKOvqLOzDswmzghBDNS259ar1B885O16i+zEo7Tx5PiPqeZbZz9kNUlahtmMhJulUG4O068V+xNV1icRqOhxeo3g2goRk8kNAq54XdEgkChIBEspRkuRtibxseAFE3pbIy0YisR1JrYa1jCPKSo/ENDxgKOHhi6lx8PSolvClDas14+FtJxCB8GSEArz55pujacvHHnus2WGHHexiUR7eICeeeGL09VUO4uspSEN41NgJcczOP/98Ay8hN+Glevvtt4+mh+DrIZNeBLTqOxqYHce8TfK43gluaXifXNc2/QjJju+HDxnw7MDiUm6Cpwo89PCyC4MQehNei7bHmtTB/YEB6hobqANPFBBN+BBie0RKXVkVOumYlIEx98ILLxjE/cO7j53gaQOPGxCRocnHSIRhhOcHPkCBWE26fjkvpujC83Dy5MmyK5Ig6PDsQRu4XniJwrMyKS4u8IZXkHhhogGcc7fddqtY+AteR/AotPHA8wlGvTuFGR+9EC9TvFmkc+gXYqlhcYakJF4sSee3ywNHeMvACxXT/8TDCe+wIDXwHLX7KXXxPFt//fXNkCFDMnGV8lqkVgOTej6/EY7/dXg4g2BLS5hxs9Zaa0XeilLGRx+j7Ouvvx7pKXxcOfjgg2PPQGkHEvYqpjk/+uijif//eLeFrkj7/0dYDbwvu3oLbcODesSIEfHCIj79sQnWpFiCaNdNeT8janmWiR5G3+AAAUeGNMLOJhzlo6F9TXhGw9EBWCQlPLNxT8Rjs5oOhy0D2yrtHiadg/vaEdCq5+X+k0gUJAIk/iElSd6WyMtmE4jYJwSiSBKJ7UhqNaxlHFE2FoHp06cbTBnA109s+FKXZUi6vYGhDuMSBCLqwXByvT7sOnhhwLQTGIL4H0f5bt262UWYV4yAVn1HA7Oxgx7GDaY2iXECBsXyRAAAQABJREFUnSP5kDPDow56DnoPpFbeugvvQtCPOAfIyUacI+R608oCS2AADNHXWnAQLFEfzwMY7G7C+yDKyTE8Z7LuG/qF5wpwRLvuBy23/Tx/4zmKcYb+Ffne5XnNtbal1cCknq91xKTXgx4CwY//eehL/P9DQqdk6Yr0FsOP4NzSBzknwj6I3qrWIjz5oDtQHm3V+nyqdp5mHsd1dOazTMYF7BH0BfZNtecHdXi+I0SrnhcUSSQKEgES/6ySJG9L5GUjkShIZUuthnU2KjxKBIhAGRHQqu9oYJZxNPOaiAARSEJAq4FJPZ80GriPCBCBMiKgVc/LvSSRKEgESCENUUXythQSEZJEoh+wWg1rP3RYiggQgTIhoFXf0cAs0yjmtRABIpCFgFYDk3o+a1TwGBEgAmVCQKuel3tIIlGQCJBCGqKK5G2JvGwkEv2A1WpY+6HDUkSACJQJAa36jgZmmUYxr4UIEIEsBLQamNTzWaOCx4gAESgTAlr1vNxDEomCRIAU0hBVJG9LIREhSST6AavVsPZDh6WIABEoEwJa9R0NzDKNYl4LESACWQhoNTCp57NGBY8RASJQJgS06nm5hyQSBYkAKaQhqkjelsjLRiLRD1ithrUfOixFBIhAmRDQqu9oYJZpFPNaiAARyEJAq4FJPZ81KniMCBCBMiGgVc/LPSSRKEgESCENUUXythQSEZJEoh+wWg1rP3RYiggQgTIhoFXf0cAs0yjmtRABIpCFgFYDk3o+a1TwGBEgAmVCQKuel3tIIlGQCJBCGqKK5G2JvGwkEv2A1WpY+6HDUkSACJQJAa36jgZmmUYxr4UIEIEsBLQamNTzWaOCx4gAESgTAlr1vNxDEomCRIAU0hBVJG9LIREhSST6AavVsPZDh6WIABEoEwJa9R0NzDKNYl4LESACWQhoNTCp57NGBY8RASJQJgS06nm5hyQSBYkAKaQhqkjelsjLRiLRD1ithrUfOixFBIhAmRDQqu9oYJZpFPNaiAARyEJAq4FJPZ81KniMCBCBMiGgVc/LPSSRKEgESCENUUXythQSEZJEoh+wWg1rP3RYiggQgTIhoFXf0cAs0yjmtRABIpCFgFYDk3o+a1TwGBEgAmVCQKuel3tIIlGQCJBCGqKK5G2JvGwkEv2A1WpY+6HDUkSACJQJAa36jgZmmUYxr4UIEIEsBLQamNTzWaOCx4gAESgTAlr1vNxDEomCRIAU0hBVJG9LIREhSST6AavVsPZDh6WIABEoEwJa9R0NzDKNYl4LESACWQhoNTCp57NGBY8RASJQJgS06nm5hyQSBYkAKaQhqkjelsjLRiLRD1ithrUfOixFBIhAmRDQqu9oYJZpFPNaiAARyEJAq4FJPZ81KniMCBCBMiGgVc/LPSSRKEgESCENUUXythQSEZJEoh+wWg1rP3RYiggQgTIhoFXf0cAs0yjmtRABIpCFgFYDk3o+a1TwGBEgAmVCQKuel3tIIlGQCJBCGqKK5G2JvGwkEv2A1WpY+6HDUkSACJQJAa36jgZmmUYxr4UIEIEsBLQamNTzWaOCx4gAESgTAlr1vNxDEomCRIAU0hBVJG9LIREhSST6AavVsPZDh6WIABEoEwJa9R0NzDKNYl4LESACWQhoNTCp57NGBY8RASJQJgS06nm5hyQSBYkAKaQhqkjelsjLRiLRD1ithrUfOixFBIhAmRDQqu9oYJZpFPNaiAARyEJAq4FJPZ81KniMCBCBMiGgVc/LPSSRKEgESCENUUXythQSEZJEoh+wWg1rP3RYiggQgTIhoFXf0cAs0yjmtRABIpCFgFYDk3o+a1TwGBEgAmVCQKuel3tIIlGQCJBCGqKK5G2JvGwkEv2A1WpY+6HDUkSACJQJAa36jgZmmUYxr4UIEIEsBLQamNTzWaOCx4gAESgTAlr1vNxDEomCRIAU0hBVJG9LIREhSST6AavVsPZDh6WIABEoEwJa9R0NzDKNYl4LESACWQhoNTCp57NGBY8RASJQJgS06nm5hyQSBYkAKaQhqkjelsjLRiLRD1ithrUfOixFBIhAmRDQqu9oYJZpFPNaiAARyEJAq4FJPZ81KniMCBCBMiGgVc/LPSSRKEgESCENUUXythQSEZJEoh+wWg1rP3RYiggQgTIhoFXf0cAs0yjmtRABIpCFgFYDk3o+a1TwGBEgAmVCQKuel3tIIlGQCJBCGqKK5G2JvGwkEv2A1WpY+6HDUkSACJQJAa36jgZmmUYxr4UIEIEsBLQamNTzWaOCx4gAESgTAlr1vNxDEomCRIAU0hBVJG9LIREhSST6AavVsPZDh6WIABEoEwJa9R0NzDKNYl4LESACWQhoNTCp57NGBY8RASJQJgS06nm5hyQSBYkAKaQhqkjelsjLRiLRD1ithrUfOixFBIhAmRDQqu9oYJZpFPNaiAARyEJAq4FJPZ81KniMCBCBMiGgVc/LPSSRKEgESCENUUXythQSEZJEoh+wWg1rP3RYiggQgTIhoFXf0cAs0yjmtRABIpCFgFYDk3o+a1TwGBEgAmVCQKuel3tIIlGQCJBCGqKK5G2JvGwkEv2A1WpY+6HDUkSACJQJAa36jgZmmUYxr4UIEIEsBLQamNTzWaOCx4gAESgTAlr1vNxDEomCRIAU0hBVJG9LIREhSST6AavVsPZDh6WIABEoEwJa9R0NzDKNYl4LESACWQhoNTCp57NGBY8RASJQJgS06nm5hyQSBYkAKaQhqkjelsjLRiLRD1ithrUfOixFBIhAmRDQqu9oYJZpFPNaiAARyEJAq4FJPZ81KniMCBCBMiGgVc/LPSSRKEgESCENUUXythQSEZJEoh+wWg1rP3RYiggQgTIhoFXf0cAs0yjmtRABIpCFgFYDk3o+a1TwGBEgAmVCQKuel3tIIlGQCJBCGqKK5G2JvGwkEv2A1WpY+6HDUkSACJQJAa36jgZmmUYxr4UIEIEsBLQamNTzWaOCx4gAESgTAlr1vNxDEomCRIAU0hBVJG9LIREhSST6AavVsPZDh6WIABEoEwJa9R0NzDKNYl6LvPf94Ac/IBhEoAMCWg1M6vkOQ4E7iAARKCkCWvW83E4SiYJEgJSXR1SRvC2Rl41Eoh+wWg1rP3RYiggQgTIhoFXf0cDsnFE8ffp088knn5gZM2aYb775Ju5Et27dTO/evaOta9eu8X5mqiPw4osvmiuvvNJ8/fXXZuTIkQYv0yQUq+OmqYRWA5N6vnNG+bfffmug6z/66CPz+eefx/bpPPPMYxZccEHTq1evSNfjN5MfArDl77//fnPPPfeYHj16mH322cestNJKfpVZSgUCWvW83FwSiYJEgBTSEFUkb0vkZSOR6AesVsPaDx2WIgJEoEwIaNV3NDCbN4onT55sHnvsMXPrrbdGRmW1Mw8ePNhsvvnmZs011zQDBgyoVlz1cRjpO+ywQ4wrCMRLL73UDBkyRDUuvPhKBLQamNTzleOgkb9ga77++uvmL3/5S0R2+ZxrvfXWM8OHDzerrrpqRC761NFa5q233orIQ7n++eef39xxxx2me/fusotSOQJa9bzcdhKJgkSAFNIQVSRvS+RlI5HoB6xWw9oPHZYiAkSgTAho1Xc0MBs/isePHx95yo0bN67mk22wwQbm5JNPNnPPPXfNbZS54gcffGB2220389VXX0WXCSLx4osvNiuvvHKZL5vXFoiAVgOTej5woNRQHDbm008/bc4991zz6aef1tBCe5Wjjz7abLHFFjXXL3vFZ5991hx//PHxZc4777zm9ttvjzw7453MqEZAq56Xm04iUZAIkEIaoorkbYm8bCQS/YDValj7ocNSRIAIlAkBrfqOBmbjRjHeNS677LLIW6Les2y55ZbmyCOP5FTdFCDfffdds/vuu8dHQSReeOGFkYdPvJMZ9QhoNTCp5xs79EEcHnPMMWbChAl1n+jUU081+HDElIzAmDFjzBlnnBEfJJEYQ8HM9who1fMyAEgkChIBUkhDVJG8LYVEhCSR6AesVsPaDx2WIgJEoEwIaNV3NDAbM4rxnnHKKaeYJ554IvEEMH623nprs8IKKxjERUT64osvDO7H3//+d/PGG2/E9eCFeMMNN5jFFlss3sdMJQKIRXbIIYdEUwpxBPjeeOONZuGFF64syF+qEdBqYFLPN27Yg0TcY489Ur0QBw0aZH7xi1+YpZZaKvoQhNi3iI/79ttvm7FjxxqEvJDUs2dP86c//cl06dJFdlE6CADv7bbbLvY+X2655cyoUaMM40w6QCn+qVXPyy0nkShIBEghDVFF8rZEXjYSiX7AajWs/dBhKSJABMqEgFZ9RwMz/1GMdw0YNrfddluHxocOHWoOPfRQs+yyy2Z6F86cOdP861//Mn/84x8jsvGXv/xlZvkOJ1K4A4vWvPLKK9HiNcAXCxkwEQEbAa0GJvW8PQryy0Pn7L333gYe0W7aaqutzE477WQWWWQR91DFbyzE8tRTT0UxXX/961+bn/3sZxXH+aMjAiATESsRH9lWXHFFEq8dIVK9R6uel5tOIlGQCJBCGqKK5G2JvGwkEv2A1WpY+6HDUkSACJQJAa36jgZm/qPYjeEkZzj88MMNjMvQlYTx7hJaR85JSQSIwBwEtBqY1PNzxkCeuWuuucaMHj26okmQWxdddJHBRyMmIkAEmo+AVj0vSJNIFCQCpJCGqCJ5WyIvG4lEP2C1GtZ+6LAUESACZUJAq76jgZnvKIYn4a677tphmttJJ51kNtxww3xPxtaIABEIQkCrgUk9HzRMvAoj/MT+++9fURYhFeBFjmnMTESACHQOAlr1vKBNIlGQCJBCGqKK5G0pJCIkiUQ/YLUa1n7osBQRIAJlQkCrvqOBme8ovv76683VV19d0ehhhx1mttlmm4p9jfyBlYunTp1qpkyZYj777LP4VH369DFLLrmk6devX7CH45dffhlNGUZj8803X0U8KkzvQ5yv9957z8yaNSs6H+JV4VyLL764QUywtIS+YgyiPvI4D97TUPeHP/yhmX/++dOqdtiPGJPoCxI8OCX2ZIeCbTvssuifHV8L5//444/NxIkTDaYd4jf6hvbQr6WXXrrm1bPRFqblIT4a7hHeR4EnYqIhnuOAAQOi30l9xj70MwvPtHrc346AVgOTej7f/wD83x588MHmtddeq2gYi2sNGTKkYl8jf+DDFfQ8xrWtezGdGrq3lvAOs2fPju3oBRZYoOJZ8d///jfS1x988EEco7B79+7RuQYOHGjmmmuu1MtFX6H3UBcJ/YVOhT4dPHhwkE61+wgP0CydaJd1rwf6GM8t+1mJZxBwW2aZZeqOSzxt2jQzfvz4KCYmnkkgmvFMg55fdNFFK7B1gXOfs+5x/k5HQKueF0RIJAoSARLKQJLkbYm8bCQSBalsqdWwzkaFR4kAESgjAlr1HQ3M/EYzDKOdd965whsRC6SAXLSJqvzOWNkSyDjEZbz33nsrDzi/QCTutddeZpNNNvEy3kC64bpAriEhJhgWFwBp98ADD0SxvUC0paUdd9zRYOvdu3dcBGTaXXfd1WFaYFzg+8w+++wT1YUBlpVg4O6yyy5xH2GE3X777YmGtFtWrgfvhk8//XTkUZQU80zOj74cccQRZuONNw66r5MmTTJXXnmlGdu2wEKtCYvzXHrppV73rdZzlLmeVgOTej7fUY34fNBNdho5cqQ58sgj7V0Ny7/88svRAlzjxo3LPAemV0NXDxs2LJO0kkZAqu22227y01xyySVm5ZVXjp5pt9xyi7n11lvjY24GevGggw4yW2yxRYV+wtjD9O/HH3/crRL/Rl3Eh8Rq1dXCeLh9xAcnELggFN3klpXrAVmIZ9fll18eE6JuXfwGyYkPgauuumrS4dR9uD/nn39+YuzM1ErOAXkuObv50wMBrXpeoCGRKEgESCENUUXythQSEZJEoh+wWg1rP3RYiggQgTIhoFXf0cDMbxS/9NJLEcFkt3jqqadGxpG9L+883mtAysFICkkLLrhgZEjBcyUrgUjcYYcdYoIUBOQxxxwTGaj2iqNZbcALA4QqvO6wIApWWPZNqHvttddGHhxpdUAOgqwEQYlUjUi0y+J6jj32WIMFbZ5//vm0U3TYD4+S3//+95GHZ4eD1g68c4LghdFabyKRWB+CWg1M6vn6xo1bG/rouuuui3eDxLrhhhvq9mCLG0zJ4OPNWWedZR599NGUEsm711xzTXPaaadleu6hJsbJnnvuGTeCkBzQOdiX9bEortCWAekGEg0fz/Bcuvjii+3Dmfm1117b4JkJ/Z2W3D7ifBdccEEikeiWxfX8+Mc/zlxlO+m88oyo9kEQz8rzzjsv+P4knZNEYhIqfvu06nlBh0SiIBEghTREFcnbEnnZSCT6AavVsPZDh6WIABEoEwJa9R0NzPxGMYgieG1IAlEHAgmyUQnvNfDGgPddLQkG8BVXXBGtIp1W3/VIhPcIpvhOmDAhrUri/tVWWy2aDuh68iQWdnaC7IThnmbIuV6G1YhE23sRHpqYlgciWFKSV4y8U0oZyGr9QpkkYxrtw/sGK44ijxW6//a3v8Xvr6gnCcdxnwYNGmRACOy7776ZUwilHmVHBLQamNTzHcdCrXtgQ4JYs72WQYCdeeaZDf2/hB4+9NBDo6mytfQd3vGI35j1PHKJN+gchHf4/PPPg055wAEHRNN3Tz755KB6KLzddttlfmhy+5jlkeiWhYcmvBTlg1NI57bffvvo+ZVWB+Pi+OOPN0leoltvvXX0zMRzamybRzria6YlhCBZaKGFIg97ruCdhlL2fq16XlAhkShIBEj7BU/ytkReNhKJfsBqNaz90GEpIkAEyoSAVn1HAzOfUQwjb/fddzeIiSSpGVPd7r777miFUDmnSJB1eJmEQQIiClO5EJ8KpCM8Au0EYhBT1mDAJCWXSHTLwMDadttto/og+jDF+5lnnjGnn366W7TDb3g6Aid4KlarC0+PNdZYo0Mb2FEPkWg3CKwQrwvT2ZZffvnIg+fbb781M2bMME888USEtbxboh7Kn3HGGWadddaxm4nziAeGa7QTpgqecMIJBnHM7ISp47hGYCcJmNx8880dyspxyjAEtBqY1PNh4ySrtDtdFmUb7XkOnXPcccd1IKlkSvDqq68eE4SICYj3mbPPPrsDAbjccstFntFJ04BxHS7xhn12gif6euutZ3r27BnpPugshNJwV6626yCP82Hat113+vTp5p577qnw7ETZas8jt48hRCLat9OIESMi4nKJJZaInj/w+ARxig+A+ABkJ1wDPhS6elvKPPvssxGRKL8hoftBOiM2o50QNxFe8DahibiMf/rTn1I/ltn1mc9GQKueF1RIJAoSAdJ+sZO8LZGXjUSiH7BaDWs/dFiKCBCBMiGgVd/RwMxnFCeRbfDGGD58eD4nSGgFRhym6NpTzjANeNSoUamrhuI9KGkaNKZuYWoviDE3JV0bysCwuuiiiwy8PJISXub322+/CmNJysFYxLRgGIFJ6cMPP4w872xDCx6NmDKXZATnQSTi2mEo4yU8CQf0E8QgVmq1+5U1tQ4G9jXXXBNfIgxWTItM86wEaYlp3/YiDr/61a+ieJZxI8zUjIBWA5N6vuYh06GiS2RBH8FbGv/bjUp4PznqqKMqml9llVWijxhpHobQ20nTbDG9d8MNN6xoS3641yb7q4VxeOGFF8zRRx8txSskPsxg6rEdI9cukBQSBB6NO+20k10szrt9rIVIxPPnd7/7nVlppZXidt1M0jVB9yNesJvAK7iL74BERMzItIRnCDzjxdsT4+iqq66K4jKm1eF+PwS06nlBh0SiIBEghTREFcnbEnnZSCT6AavVsPZDh6WIABEoEwJa9R0NzHxGsWsUoNVGr+B54403Rot3yBWARLzppptSPQulHCQCzcPIlAQjJi3GVxqRCBKxWhD6MWPGRMaunEekDzYIzn/KKadIFQNvGpCkSSRcvUQiiEMQdlhApVp68sknzYknnhgXS5tGjXdNeCqN/X5xFZzjwgsvrIrZP//5T3P44YfH7TMuYgxF3RmtBib1fN1DJ27AJb6gdxFaokePHnGZPDNJJBVIRJBzSbrQPjfsXky5hh6WBG9CeL5hpXg3uSQdjlfzEEQZnAcekA8//DB+xskHG9Q999xzzUMPPRTXw4IvCOGQlNw+hhKJIYQd4g4DK0lpH43gBQriUz4wATOMiTTyVNpzn+GMiyjI1Ce16nlBjUSiIBEgoYgkSd6WyMtGIlGQypZaDetsVHQe/abt3+uVGV+Ylz790rz02RfmnVlfGfmPg//K0t3mNav27GpW7TWfWalHVzNPR6eWpgH3xXf/Z/75aVtfP2vra5uc9MXX8bnnbjPkll9Q+trVrNB9XtOJXY37xUznI6BV39HAzGfsuat4+hoStZ49idyDR+Gmm27q1STeg/Z04nxhJWfsc1PSuXxiA6IdTAmGgSVeF9iXZozhmJ3cVbCzMK2XSMS0sjvvvDPRuLb7hDyuBd4mck1pRKLbJ0xvg3HZvXt3t8mK3+51V5uOWFGZPzIR0GpgUs9nDougg5iOiw8CkrKILClTj3SJM7QFr2asKOyTkjzX0z4CJZ2rmmed9OH111838CS0U5ZnoV0OMQPh7ScpS+e5fczC3y2L9rO87+X8It1+pT273PPAex5E71xzzSVNJUr3vYFEYiJMwTu16nkBikSiIBEghTREFcnbUkhESBKJfsBqNaz90NFT6sU2Mm73f0wxr878yuuiV+w+nxk9bFGzWq+uXuXzLDTmP7PMPi9ObSMPv/Fqdv0+C5hr2/q61AIdv8x6NcBCpUFAq77DCzASYtQx1Y6Aa0iA9LrjjjsMCKpGpKTzZcU5TOqD6y2YRg4mEYmYxrbFFlskNVuxL6kuPGTSYgrald26WZi6pF0auYf23bLYh5iI22yzDbJVkzv9GOdC7Cw3xiTOY68ODY9EeKBgYZes5PYP7SNmVzXvlqw2eawdAa0GJvV8fv8BDz74YORBJy1mEVlSph7peo9nkWxJ54Hd63oLppGD7nMF7V155ZWRN3hS2/Y+ty70NfRdWkzBrLpphB3quOfJwt8ti/o+3vAoh+SSsGnYu+fBdHPEjqzmMerWy7qW9h7xrw8CWvW8YEMiUZAIkEIaoorkbYm8bCQS/YDValj7oVP+Ut+2uRye8eZH5rdt29fifuh52V3a3PxOXL6vOaFtm7sJLn+z2zp79CvTzOUTP/Xs4ZxiC7Z18HcrLWL2G9QYg3/OmZgrMgJa9R1eZJFIJNY3Ol2DIIv0qu9M7bUxheyss86Km8LqjojJWM0DIq7QlnG9BdHnpOlYLqGHNhDfMC02on2OpLqYLoYFR6olt24WpknkG64lich1y4Lgu/TSS82QIUOqdSk6jnfI0047zWDqNRLqX3zxxR2uyfUszCI3o4a+/+P2Dx6MICqreTLabTCfjIBWA5N6Pnk81LK3mUQi7FaERxBdg/7WEjP11VdfrYjX50uIZelcF7t6noFu3SxCrZ6yPlOt7etKegYlPSNdz8Ks/tvtu9eC1b+xeBemXzPVjoBWPS+IkUgUJAKkkIaoInlbIi8biUQ/YLUa1n7olL/UaW98ZH7TttWTTv1hX3Ny29botFubx+SN78+o6zQ3/XiA2XlgY2Lc1NUxVm4KAlr1HV5kkUgk1jfMXIMgxACr5czwUINnhSTfKWRSHhJGEjxTJK4T9iWRfK4xhXK+XipuXeDi6zmZVDfNy9Ml37JIO7dso4jEr7/+2mD17HfffReQRd4pwK3alMQJEyZUxAdjjMQIvlz+aDUwqedzGT5RIy6RmOU9V+9ZYa9itebnn38+birEo04q+T6f3HLwrIO+9vmI4dZNIyulT7Z062YRcfWUBZGI60n6wGT3R/K+z6Bp06aZXXfdNV74DLghtmLXrtkzs+6///5oATE5H54Xu+++u/ykrBEBrXpe4CKRKEgESCENUUXythQSEZJEoh+wWg1rP3TKXQrTmdd6YmKwJ6KLCjwTn11/UEOnOd89dabZ+rnJ7qmDf/fuMpf59/ClzYCu8wTXZYXWR0CrvsNLORKJxPrGsGvcoLVaDD6fXuA9Bl4pzzzzTFy8FgME70LuSpM+RGKIV4evIRZfiJUJqeuSgyFEYlZZqztxFrj5eCSiwuWXXx55E0rlrJWnUQZtY4GZJ554QqpEhiXuL1P9CGg1MKnn6x870oJLJEIf4gOHD9kmbfhKdxEP1EvS0dXawxRdEFQS1xUfdJI869znWAhJmmfdRhGJIdcDTH2fQdDbiC8sH41Q98ADD4xCWyCflHBvQT7i3kjCStLDhg2Tn5Q1IqBVzwtcJBIFiQAppCGqSN6WyMuGf3jkbYm8bIh/Y+c//PDD6DceHpqSVsNa0z1OulYsrLLKY+94x0RMasPeh5iJL/18qYYswPLxV9+aFR59x3zYJvNI/7PIguaBtbPjV+VxHrZRPAS06jsamPmMxSSDzzcWYGgP8P7iTncLWWhFzpfUTpKnoa8xJe3asll1i0okvvPOOwaL2NgJ09ARkxExD+ENiYR7gTF01VVXmbvuuisujhhb119/vVlsscXifczUjoBWA5N6vvYx49Z0p7GClPONBei2Ve23qz9RPmShFWnfbSfN09AlA7MIPWlbZLPqhpwnpKxchy1d3LJmGrjhRtAOVp5GnFx3hezJkyeb3/zmNwbe55KyVtOWMpR+CGjV84IOiURBIkDiJUyS5G2JvGw2gYh9QhqKJJHYjqRWw1rGkVaJVZlXe3xirpf/4s8GRas659poW2O3T55pdni+fm9E6RdMuk83W870mCd7pTUpT1keBLTqO7xoI9Ejsb6xjGmse+yxh4GBIGm33XarmKIq++uVeG+B19rYsWPjpkIWC5FKaMclJJO8KEOMKWlbZLPqFpVIBA7XXHONGT16tEASyw033NCstNJKBh6Rr732mrnvvvviY8iAZMR93XrrrSv280ftCGg1MKnnax8zbk3o+J133rli93nnnWfWWGONin15/Ej6QJX0safauVw9nOZVXg/x1qy6IecJKZuEoYtbFpEIDsH18EebiHe47bbbmqWWWsrgPeGFF16o8DiX844aNcr86Ec/kp+UdSCgVc8LZCQSBYkAiRdiSZK3JfKykUgUpLKlVsM6G5XyH73m3c/MPi9NTb3Qjfp1MyP6d2tbRKXdk+Lbtv+thz6YZR75cFZqnatXXdTsvWTP1OO1HvjVqx+asyfMmRZgt4NQxVsN6G7Wa1uZ+fuumi/bFmW5ffIM83zb1O209MR6S5ifttVh0oWAVn2HF20kEon1jXe8X7grYzbKwwDnwuIed999d9zpWqY2f/PNN2bvvfeumI6VNG0uxJiKO/R9JqnuPffcU7ECsbybuTKpbiNiJDZyajNgwDvnOeecY+Cx4ptAImJl7M022yz2WvSty3LpCGg1MKnn08dE6BFXL6H+iBEjzPHHHx/aVNXySR+oknR0tYbcGH4gxFw9jDbgQb3LLrvEzSE+K4hLn8U/mlW32nns5wi8RzHlWFKIhyXquPc6i0hE+ZkzZ0YfFO3pytifldAmpjTjoxJTPgho1fOCHolEQSJAQnFIkrwtbcVCIlGQypZaDetsVMp/9NCXp5k/vDM98UJBIo5ZZ/HEY7/4+/upZOIhS/c2vx+6SGK9enZu8vT75i//SSYwD1yql7ls5f4dmv+ubc+yY94278z+usMx7LiobQXnwwf3TjzGneVFQKu+o4GZ35hOmtpUi9Hn0yM3Tldei63U65EIgxMrR2ND/ssvvzQjR440H33UvnAXjKaHHnqoarB7vLPBG2ebbbapqNuKRCLuJ947McV54sSJ8e0FWSjvqdgp05yB10477WQWWST/Z2Z8cqUZrQYm9Xx+Ax7/s64nN/RaUszBes+adK4kHZ12HuhghEeA3sEUW0nwSMRCH+6iI2+//Xa0AJeUg4ccplL7EInNqhtyHrdso4lE4AbyceONNxYIUyUwxXMbH4sWWIDOC6lA1XBAq54XqEgkChIB0n4Zk7wtkZeNRKIfsFoNaz90ylvqf5553zw0LZmcu3Clhc0RgxdKvPiL3v7EHPnKfxKPjVikm3lw7WQCMrGC587lHnnbTJiVTAg+sNZA8z/9F0xs6ZB/TTOX/m8yWXpYG+l5cQNIz8SOcGdhENCq72hg5jcE4fWx/fbbVzRYbXGNisIBPx5//PFoerNUCQ0ij3rwmoBx+dVXX0XNpBnD1bwyYKhiSzI2UbcWIhEdSqoLL0wsaiDvd1HH2/4UeWoz+oq4hyCVkUAYbrLJJubnP/951G94HWHfoosuapZYYgmD+GVMjUFAq4FJPZ/veHr22Wc7eCDWEl6iWq+gO1zv8/3337/D1Gq3HXzIgT4XnTxu3Dhz0EEHxcXSCEKXeEsrFzdkZZpVN+Q8bll4WF566aUxLlb3E7PVnn1uJfALpziLZSFOIghMfBiDrke8ROj5xRdfPHpuum3wd/0IaNXzghyJREEiQNovlZK3JfKykUj0A1arYe2HTnlLjWgjEv+cQiRe0kawHdpGtCWl37d5MR7W5s2YlDZtIxIfagCRuGwbkfhWCpGI8+G8SQn9RH+TEq4P18mkCwGt+o4GZn7jHO8YMCLGWrEL0Xoj4me5pCUMRgT8HzBggPcFYWrbhRdeGJdfbrnlDOI0gRS0U5IxBWKsb9++Hcra9ZBPIgN9PBKr1UUsa0zNxoZUZCIRMbEwTVkSYmnCO1E8EGU/ZeMR0GpgUs/nO7aSYheCuGvEoitPPvmkOfHEE+MLQMgM6F9XT0sB9MNe3APPpSOPPNI89dRTUiQKaWETi3LAJd7KRiTierCgFQg9n5T07Evzikd78N687rrr4qbPOuss85Of/CT+zUxzENCq5wVdEomCRICEopQkeVsiLxuJREEqW2o1rLNRKf9REokkEss/yjteoVZ9RwOz41ioZ8/rr78eTVey2wDJd8UVV5hll13W3l1XHu8xe7bFfnr33XfjdkLiJMKQQiwsEJKS0jxdkoypPMhAOW+a9CEh8V4Hj0rEpsL1SGyqrLiHIaRjUt+A/WmnnWbgFYoEQhBeQyuvvHJScXPDDTdExisOYgobpkDCq5Kp+QhoNTCp5/Mfa/g/hnebnUDy3Xzzzbl6Fbue4zjfRRddZOCF7qauXbt28LbD4jBbbrllRVHEPUyqr4FIBNkHj008X6DLs1LSsy+NSERb8Ep95ZVXoiYxG+GCCy6IzpV1Dh7LHwGtel6QJJEoSARIIQ1RRfK2RF42/LMjb0vkZeOqze3AazWsA4ZdKYuSSCSRWMqBXeWitOo7GphVBkbgYbxbHHfccQZTyewEMhFGRZLxZpcLyY8ZM8acccYZcRWc4/LLLzfwLKyWbHILZVH3lltuSYzLB2MKJF1onEO060MGolxSCqkLDyGsbix9LAqRiPdKLMIg4wFEIoiG3r2TPfuTcOC+/BDQamBSz+c3hqSlWbNmRVOMP/30U9kVSYQmgNcbQhXkkfBMOffcc6PYstIeznHrrbdWfJBA3EMQZHaCx/YRRxxhMBVb0sCBA82dd96Z6NGohUjE8w644hkDHZ2WcBwrdMsHKnh7phGJ7nhoVFiTtL5y/xwEtOp5QYBEoiARIKEQJEnelsjLBqWBvC2Rl41EYjuSWg1rGUdaJYlEEokax75WfUcDM//RnuRBImfZaqutvBfSADmG+4N3kqFDh0oTsYSRuPvuuxt4nEiCgYQVgldffXXZVSHxnnP11VdHU/DsA/BYOeqoo+xdUR6GKeq4i54UxSNROgwvQ2BbNCIR/QO5C5JWEhZROfDAA82SSy4puyokPBxBCvTp06diimJFIf6oCQGtBib1fE3DpWql559/3hxzzDGJ5Q4//PAoDqq7oElS4enTp5vx48eb/v37J+oFN5QF2rAJyyRPRHhpQ8+88cYbFafE82H48OEV++SHJiIR1wwuAM/ZtBRCJOI5uaczS2DttdeOYgSnLZwFXd+tW7coTAhDXaTdhfD9WvW8IEUiUZAIkFAGkiRvS+Rlwz878rZEXjYSie1IajWsZRyVUU7+4hvz4qdfmIkpKxbjmke1xQ58/fP24PsuBrXGSFxhwXnNgSmxFd1zhPw+7Y2PzEdffZtYpdYYiT/tM7/ZdrEeiW3iW++ybdeyWq+upu+8cyeW4c7WRECrvqOB2Zjx+t577xlMNZaFTNyz9OvXz+BlD96DmOYKIwKeLXgBxnRlxNUTghBB2UePHt1hyhraxP2D8eImLOaxww47xDET0Y/XXnvNIGaT60ED0greLa7Bizhb8MAI8Qx0+9GsukUmErPIBhcv9/eIESOiBXyWWmop9xB/14CAVgOTer6GweJZ5W9/+5s56aSTUkvjI9BPf/pTM2jQIAPCDx+AZsyYYaZOnWpA3I1ti6krz4ldd93V7LfffoltPfzww5H+dg8iJMXmm28e6+/PP/88iof429/+1i0afWD6wx/+kPgsQWFtRCKuGTY/nlNJKYRIRH33o1FSm0n78AEQcXOxgjO91ZMQCtunVc8LSiQSBYkAKaQhqkjelsjLZhOI2CcEokgSie3AazWsA4ZdyxR97MPZZr+Xppp3MghEn4uplUj0aTvvMrUSib79GNZGJl6z2qJmaI/5fKuwXIER0KrvaGA2blDCiwQeITItqtYzVVuRuZohm3VeEIXwUMQqkpLcFT+bRQbK+UWGnDeJSHzggQciwx3vdnZqdoxEvGdiCvojjzxidyMoD1IYhAEMTqbaEdBqYFLP1z5mfGq6Cyr51EkqkxXnFnrksssui2KsJtWttm/55ZePdD3IzLSkkUgEFnjWwPZ3UyiRiGfNtttuW9cz/+STT071GHX7x9/JCGjV84IGiURBIkBCwUqSvC2Rlw3/6MjbEnnZSCS2I6nVsJZxVAaJ/4ojX5lmLnl7upnzH1L7lZFIrMRu3h8Yc9aQhc1RyyxUeYC/Wg4BrfqOBmZjhyq8T7CSJwK815qyPBKlzZdeeimKzSieLbI/Sw4ePNicf/75ZqGF5ugvrASK+IJ2wtQvTH3G9DskkI8PPvigl+dEs+oiPtXIkSPjPuIaQCTCuwMLy9i4uLGsUPa2227zuh5cP94VTz311MiTCL/hTZq22MoHH3wQLYzwzDPPoGicsqaxybtrXPj7DFZZBaHIVDsCWg1M6vnax4xvTXwwuuSSS2K94FvPLpflkYhy0A1YsRnnCUnbbbddtHJ82krP0pZWIhE6HR+Y3AQiETpXvPjx7MMiO0legy+//HL0PLUXQHPb8/0NwnjIkCG+xVnOQUCrnhcYSCQKEgHSfvGSvC2Rlw0KA3lbIi8bicR24LUa1gHDrvBFL24jEI9oIxLzSiQSk5F8YK2B5n/6L5h8kHtbAgGt+o4GZnOGJwwRLLiBBVIw1dUnwRNx/fXXN8OGDavwGEyrC9LyySefNFiRU6ZFJ5VF3CZ4TaBdm9CSqcxuHRBxMEQnTZoUHcJUaBCJPXokh4Cw6zerLohCGHx2H0EkSh+BzZdffhl1DWUxjUwwwvWASJSydv+T8nh/xOIHf/7zn6PD8BIcNWpUh0VuMJUcHql2Amm5xx57xGWBDxLuAzyFYLhiWvxjjz1m3nzzzehdVeqjLhbJSYu3JeUo0xHQamBSz6ePibyPQK889dRT5t577411TNY5oD+g59dZZ51IJyeRVG59PE8QpxYfqOyPJG45fFzZcccdzTLLLOMeSvwN/Yk6ktZdd91okTAfT+h6626//fbxtWSdN+Q8IWXxfMBzwk7Qx4hDjNkFSIhLiWcFpJ3uv//+iES09y299NJRbGHoa7SL5wYSnrMgdBHDEnEx7777boPp6HbCx8PrrrsucUEcuxzzyQho1fOCBolEQSJAyj8oqkjelsjLZhOI2CcEokgSie3AazWsA4ZdoYu+0RbncLXH/tf897s8fBHbL5VEYvIt7z/f3Obfw5c2fRg3MRmgFtirVd/RwGz+4ITBAkMQHn7wgkCMxM8++ywyMJCHkQJjspr3SFbP0TaMHxiZ8KKARAzEhRdeOCKs3LooAwOnzAnvdjAMm5FwP7HapxiIIArhUYhFa3yMcvRxwoQJUR0hCtBGmudjM66pDOfQamBSz3fO6IVH9ieffBLpe9iY0LPQ+dDt0PXQyT179qz4oOPbU+hrbNDzGNeyMBbq9+3bN9L19TxDfPtRlnL2x6aQa3r99dfNAQccEFeBfs9a8CwuaGUeffRRc/rpp8d7ME7SVoeOCzGTioBWPS+AkEgUJAKkkIaoInlbIi8biUQ/YLUa1n7oFL8UPBHhkZhnIpGYjubvhy5iDmnAgjLpZ+SRPBHQqu9oYOY5ilqzraQVP1vzSqr3Gu9/IBPl/bB6jdpKYPEaeClKworSRxxxhPz0lvBWueiii+Lyv/rVrwwW0mGqDQGtBib1fG3jpci1NOntZtwHPBOyVnBO6gOeJ8cff3w020COn3nmmZF3qfz2kTj3cccdF7cDMvKqq64y8GpkCkdAq54XpEgkChIB0n4plLwtkZeNRKIfsFoNaz90il9qvb+9a576pGPMj3p6TiIxHb29lugZLb6SXoJHioyAVn1HA7PIo7LxfWukMYp3LrxvYYM3oLyDQdoJnnaywasGGwwp7GtEwvnhFeT2I69z4Xp//etfG4mLWM+UZMTXxFR1SZhmhwUZmGpDQKuBST1f23gpcq1u3boVuXst2Tc8F6C/fROIx5122imOoVjrlGScE+E2Jk6cGJ/6d7/7XTTVPd7BjDcCWvW8AEQiUZAIkPYLoeRtibxs+IdF3pbIy8apze3AazWsA4ZdoYt2v/9N8/m3lQZbvR0mkZiO4Ko95zMv/myp9AI8UmgEtOo7GpiFHpYN7VwjpjPj3QpTxLDhnaqeBCIRU/OwgVzMM6FvMBobkdD2aaedZh5//PGoeVwHpqn169cv+HR27C20g9iMa6yxRnA7rNCOgFYDk3q+XP8B0AULLLBAuS6qAFcDb3VwAL4J5RHCAgvtIGGaOhbDCZ1SjufmKaecYsaOHRu1g2czvNr79OkT/eafMAS06nlBiUSiIBEg8U8oSfK2RF42vOQhb0vkZSOR2I6kVsNaxlGryx/c80bul0AiMR3SZbp1MRM2GpxegEcKjYBWfUcDs9DDsmGdQ2wtGCt5Jbw3IZYf3qMakUAkwjjLM44j+tyImInAwF7VGf3GIikDBgwIgmbGjBlmzz33jI1UkAeMkRgEYYfCWg1M6vkOQ6Gld0AfYpEopnwRSFpwJesMrkfiYostZq6//vpgIhHxcPfdd9/4VIyRGENRU0arnhewSCQKEgFSSENUkbwtkZcNL3nI2xJ52UgktgOv1bAOGHaFLkoicXGz6SLJUz8Oe3ma+f07+caPJJFY6H+Hqp3Tqu9oYFYdGqUrAGIL023zSI0mEN0+gkyTRQbcY7X8xqrJsphJLfWT6uD9EoQf4htK2mCDDcxJJ53kbWBisZZjjjkmWtVT2hg4cKAZPXq0dxtSj3IOAloNTOr5OWOgDDmEfkBYCqZ8EcCzAM8E34Sye+yxR8Xq3Icddli0qJZvG++884459NBD44W5UA8rZyOmLp53TOEIaNXzghSJREEiQOLFTZLkbYm8bDaBiH1CIIokkdiOpFbDWsZRq0sSiSQSW30MN7P/WvUdDcxmjrLOP1denix4d4L3Bt6XOiPhOmBI52FohXqh+Fzvs88+GwXht8sOHTo0Wt1zueWWi8hAu+/AE9PB33vvPfPYY48ZxEa0E8pyWrONSG15rQYm9Xxt46WotUgkNubOhBKJ6MVll11mbrvttooOYXGt7bbbLvJCt/W8FEJYjfHjx0cfmyQEhhzjtGZBonapVc8LYiQSBYkAiZcwSZK3JfKykUgUpLKlVsM6G5XWOdoIIvG4ZRcy5wxZOBGE41/9jzl3wieJxzpj55Wr9jf7Ltkr8dTbPDfZ3DV1ZuKxWnfSI7FW5IpRT6u+o4FZjPHXrF5gOhxIuHoS3qFAvkF2dspjsRi8G+a9+AraPPvss83DDz+cCNHaa68dG5kwXidPnmxEB7kVYIjusMMOEQmZZJS65fk7HQGtBib1fPqYaMUjJBIbc9dqIRLdOIl2z0AK/vSnPzW9erXbIjNnzjT4XwSJmJZqWfU5rS2t+7XqebnfJBIFiQCJlzZJkrcl8rKRSBSksqW81A4bNiy7II8WEoFGEIn95p3b3LPWQPOThSpjszzdtjr0yGcnmQ+/6hzvlKQbMKT7vOa2NRYzQ7rPmcIHLfHgB5+brZ6bZL6ZozKSqgfvI5EYDFmhKmjVdzQwCzUMG9oZGDX1xhiE1xxIxCKlPOI9wrMy73iJwApehGPGjIneP0MxA2mIe4Yp0euuu24u3pehfShbea0GJvV8uUaydiJR7Pu8P6zUQiRiZGGxlQMPPNBMmzat5oG2yiqrmIMPPtjAY52pPgS06nlBjUSiIBEgRamgiuRtibxsJBL9gNVqWPuhU/xSjSAS5ap7dZnLiE8LfFI+/brzPVOkb65cqK2vkr5uIw9nftOYvpJIFJRbU2rVdzQwW3O8hvY6jynNjZgCHHodaeXzmOrcqOtDDCxMffvLX/4Sd1/eT+MdbRnbKN50000NthVXXLFuD1L7HNrzWg1M6vlyjXytRKLrDQ+9j48twCOPVCuRiHNDp7/wwgvm2muvNa+++qpXd9DvXXfd1QwfPtwsueSSXnVYqDoCWvW8IEMiUZAIkPZLmeRtibxsJBL9gNVqWPuhU/xSjSQSi3/1ze8hicTmY57nGbXqOxqYeY6i4rZVz5RmvDvBWw/vTkVOIOKwiEytRiWuM+8pzjZeaHvKlCkGRs6sWbOimIhCXi6wwAKmT58+pn///tGUZyyIw5Q/AloNTOr5/MdSZ7aokUjE8wc6NCnlEeIC7dZDJNr9mj59eqTrP/nkk8iDXzz5Ibt162YWWWQRgxWe+/XrV/EByW6D+doR0KrnBTESiYJEgMQLoCTJ2xJ52UgkClLZUqthnY1K6xwlkdjce0Uisbl45302rfqOBmbeI6l47dW7SjOMt6KTiDbqIOVs7z77WLV8I1ZxrnZOHm8eAloNTOr55o2xZpxJG5GYRSIK3nmQiXkRidInys5BQKueF7RJJAoSAVJIQ1SRvC2FRIQkkegHrFbD2g+d4pcikdjce0Qisbl45302rfqOBmbeI6l47dVDrInHXPGuKr1H9U7jnj17dvwemX4WHmlFBLQamNTzrTha0/usiUj0IREFqXrJRBKJgmRrS616Xu4aiURBIkAKaYgqkrcl8rKRSPQDVqth7YdO8UuRSGzuPSKR2Fy88z6bVn1HAzPvkVSs9urxRmxl7zyt112s0Ve83mg1MKnnizcW6+mRFiIxhEQUPOshE0kkCoqtLbXqeblrJBIFiQAppCGqSN6WQiJCkkj0A1arYe2HTvFLkUhs7j0ikdhcvPM+m1Z9RwMz75FUrPZq9UZsxCrGzUamnlWq6ZXY7LvVnPNpNTCp55szvpp1Fg1EYi0kouBfK5lIIlEQbG2pVc/LXSORKEgESCENUUXytkReNhKJfsBqNaz90Cl+KRKJzb1HJBKbi3feZ9Oq72hg5j2SitNerV55eFdq5KIjzUSo1kVmWtkbs5n4ttq5tBqY1POtNlKz+1t2IrEeElGQq4VMJJEo6LW21Krn5a6RSBQkAqSQhqgieVsiLxuJRD9gtRrWfugUvxSJxObeIxKJzcU777Np1Xc0MPMeScVprxZDCr3HCs3wSCxDwqIrIBNDF1/B+yK8EpnKhYBWA5N6vlzjuMxEYh4kIu52LbFySSSW4/9Eq56Xu0ciUZAIkEIaoorkbYm8bCQS/YDValj7oVP8UiQSm3uPSCQ2F++8z6ZV39HAzHskFaM9EGeY1hyavvnmG4MFVsqUavXMbMWFZsp03xpxLVoNTOr5RoymzmuzrERiXiSi3JlQj3QSiYJca0utel7uGolEQSJACmmIKpK3pZCIkCQS/YDValj7oVP8UllE4oSNBhsQX7WmNZ+YaMZN/yKqvkbvrua59QfV2lRc76b3Z5hd/zEl/o020Xa9qc+D480nX38XNbPLwB7mxh8PqLnJP0+bZUY8835ifRKJibC0zE6t+o4GZssM0aCOdunSxSBGYGjClGa8I+Wd4B0CQg8Sm3gIyrsZPCBly/vcaK+WWJFlJFUbgW0rtanVwKSeb6VRWr2vZSQS8yYRgSKJxOpjqYwltOp5uZckEgWJACmkIapI3pbysgpJItEPWK2GtR86xS9FIrH9HpFILP5YLUIPteo7GphFGH359yHUgEIPGkGcgTwEoSnEYbUrxTsa4hNiyzPV6pU4a9asPLvBtjoZAa0GJvV8Jw+8nE9fNiKxESQipzbnPOhaqDmtel5uEYlEQSJACmmIKpK3JfKykUj0A1arYe2HTvFLkUhsv0ckEos/VovQQ636jgZmEUZfvn2odVpznt6IMOLmm2++yPuwlqvD+xqmFucZq7EWr0ROb67l7hW3jlYDk3q+uGOylp6ViUhsBIkITGuJEcypzbWMxuLV0arn5U6QSBQkAqSQhqgieVsiLxuJRD9gtRrWfugUvxSJxPZ7RCKx+GO1CD3Uqu9oYBZh9OXbh1q870DYYZGVPBKMXJCIvl6IWefMk8iDZySmfIekRnhphpyfZfNFQKuBST2f7zjq7NbKQiQWiUTEPSWR2NkjO5/za9Xzgh6JREEiQAppiCqSt6WQiJAkEv2A1WpY+6FT/FIkEtvvEYnE4o/VIvRQq76jgVmE0ZdvH0DigUwMSXkRdo0wcPMy7mqZ6tYoQzfk3rBsfghoNTCp5/MbQ0VoqRF6ttnX1SjdWosnolx7Xs8aaY+ycxDQqucFbRKJgkSAFNIQVSRvS+RlI5HoB6xWw9oPneKXIpHYfo9IJBZ/rBahh1r1HQ3MIoy+fPtQS3zE2bNnx+9OtfYGRB2MuDw8Ed0+5EV01jK9mXES3bvRur+1GpjU8607ZpN6njeRiJi08L6GnYy2Q+LaJvWv2r4ikojoM4nEaneuNY5r1fNyd0gkChIBUkhDVJG8LZGXjUSiH7BaDWs/dIpfikRi+z0ikVj8sVqEHmrVdzQwizD68u1Dt27dghrMa1pzLSRdSEfziOFYy/TmPM4bcp0s2zgEtBqY1PONG1Od0XKeRCJCWrixaPExCB+F8HEo71RUEhHXSSIx77vdOe1p1fOCNolEQSJACmmIKpK3pZCIkCQS/YDValj7oVP8UiQS2+8RicTij9Ui9FCrvqOBWYTRl18fapm+C28UGFD1JMQeBEnXyJRHvMJa4kfm5Q3ZSGzYth8CWg1M6nm/8dEqpfIiEpNIRMGgEWRikUlEXDeJRLn7rS216nm5ayQSBYkAKaQhqkjelsjLRiLRD1ithrUfOsUvRSKx/R6RSCz+WC1CD7XqOxqYRRh9+fWhs4iyRnsjCkL1egd2FtEq/afsXAS0GpjU85077vI+ex5EYhaJKP3Nk0wsOomIayaRKHe+taVWPS93jUSiIBEghTREFcnbUkhESBKJfsBqNaz90Cl+KRKJ7feIRGLxx2oReqhV39HALMLoy68PtXgG1kvO1UJe1nrFeXhPhpKeeU39rvWaWS8/BLQamNTz+Y2hIrRUL5HoQyLKdeZBJrYCiYjrJZEod721pVY9L3eNRKIgESCFNEQVydsSedlIJPoBq9Ww9kOn+KVIJLbfIxKJxR+rReihVn1HA7MIoy+/PtQSA7DexURqWSW61ivGexwWhqknhS5GQyKxHrSLVVergUk9X6xxWG9v6iESQ0hE6Wc9ZGKrkIi4VhKJcsdbW2rV83LXSCQKEgFSSMhX4cIAAEAASURBVENUkbwtkZeNRKIfsFoNaz90il+KRGL7PSKRWPyxWoQeatV3NDCLMPrC+/Dxxx+bqVOnmpkzZxp4BCKB0FtooYVMv379TO/evb1WT8Z7Ub3EXKiHX/jVVtaod4VpLCIAQ9w3VTOE5V1T2oPRzVRMBLQamNTzxRyP1XqFuLDTpk0zGLcgAEXXY0GthRde2PTp08csuOCC1ZqJj9dCIkrlWsjEarpT2g6VoTrct30Sib5IFbucVj0vd4VEoiARIO0XOcnbEnnZSCT6AavVsPZDp/ilSCS23yMSicUfq0XooVZ9RwOzCKPPrw+YgvzXv/7VjBo1ynz++eeZlUCUbbTRRtE2bNiwVGMT70X1Eomhq0RndtzjYL1TsUM9KLMwmjRpktlll10qen300UebLbbYomIffxQDAa0GJvV8Mcafby/woejee+81o0ePrlqlb9++ZpNNNjEbbLCBWXHFFWOy0a2YR1iIEDKx1UhE4JVFJD755JPmxBNPrID1yiuvNMstt1zFPv7ofAS06nlBnkSiIBEg8aInSfK2RF42EomCVLbUalhno9I6R0kktt8rEomtM2Y7s6da9R0NzM4cdf7nHjt2rPnNb37jX8EpecIJJ5itttrK2WuimNEg5mpNMCzhkdjMVO8qyqHTv/HumEa2vvPOO2avvfaquPx99tnH7L777hX7+KMYCGg1MKnnizH+qvUCHog33nijufbaa6sVTTyOD0ggH3/4wx92OF6vJ7c06EMmtiKJiOvLIhIfeOABc9555wkMkbzkkkvMyiuvXLGPPzofAa16XpAnkShIBEghDVFF8rZEXjYSiX7AajWs/dApfikSie33iERi8cdqEXqoVd/RwCzC6EvvA95bYFT6eKakt2Ii4zTJuKzX4KtlFeSsfvocazaRiD6lxZGcMGGC2XfffSu6TSKxAo5C/dBqYFLPF2oYJnYGJOKhhx5qXnvttcTjPjsxzfn+++833bt371A8TYd1KOixI4tMrPeZknb6Rk1nts9HItFGo3XzWvW83DESiYJEgBTSEFUkb0vkZSOR6AesVsPaD53ilyKR2H6PSCQWf6wWoYda9R0NzCKMvvQ+PPPMM+aXv/xlhwLwqtt5553NKqusYmBgwUj86KOPzHvvvWeeeOIJgym3kgYOHGjuvPPOxClveC9K87aT+lmyMzwS64nzhWvh1OasO1ruY1oNTOr5Yo9r6GGErLjttts6dHTQoEFm5MiRZvDgwVHcW4S1wNTnt956yzz44IORF51U2m677czxxx8vPytkvSEhKhpr+5FEJrYyiYjryyISObXZHQHF/a1Vz8sdIZEoSARIKGFJkrcl8rKRSBSksqVWwzobldY5mkUk9pxnLjN3HfHgP/v6O/Pt91AgZH3PLnPVDcyX3/2fmfXtnP/jHm19nKeOPkqHprf1VVqdt629BdvarTV93dbQzG++S6y+TLcuZsJGgxOPcWfxEdCq72hgFndsIqYV4u8h2L6djjnmGDNixIjEBUOEJJs+fbrBmL788sujeH1pU23xXlQPkYh+tVqMxFDPliyMYJzjHsGwR4Jxfemll5ohQ4ZEv/mnWAhoNTCp54s1Dt3eTJ48OfowZO/Hx6Jzzz3XrLrqqvbuKG+v2vzBBx9EH48uvvhic8UVV5iVVlqpQ3nsaMTq8zaZ2OokIjDKIhInTpxo9thjDxSL0vzzz29uv/1206NHD9lFWRAEtOp5gZ9EoiARIPGiJ0nytkReNhKJglS21GpYZ6PSOkeziMTWuYrW6SmJxNa5V0k91arvaGAmjYZi7HMNF/Tq5JNPNsOHD0/tYGj8PzRU75Q3GFSY4tysVG9/Q4nELAM8iUiEQc+4Wc0aDWHn0WpgUs+HjZNml3744YfNWWedFZ8WROF1111nllhiiXifnbGJRHt/tXyWLqtWN+04yEQ8dxByIu8UqqvrPX8WkYj/oT333DM+Ba75jjvuML169Yr3MVMMBLTqeUGfRKIgESCFNEQVydtSSERIEol+wGo1rP3QKX4pEonNvUckEpuLd95n06rvaGDmPZLya881LhdffPEoViKMyLTUGURiLedM63+1/XkYwlgcBsavb8o6J4lEXxSLUU6rgUk9X4zxl9QL2KVnn322gb6XtNtuu3WIvSrHIGslElE3S5/heFFSs0lEXDeJxKLc/fr6oVXPC2okEgWJACmkIapI3pbIy0Yi0Q9YrYa1HzrFL5VFJG7Rf0HTvY4pvg//Z5b5+Kv2yc195p3bbLJwt7oB+d/ZX5unP5mzeujGbW32bWu73nTH5Bnmq+8dlgct0MWss9D8NTc55YtvzOMfzU6sTyIxEZaW2alV39HALO4QRfwrTG2TtOWWW5ojjzwykwTr0qVL5B0idXxkUuwsGFRTp041U6ZMMZ999lncTJ8+fcySSy5p+vXrF/ej3gVXZs6cGcV0xBRuxP9Cmmeeecyiiy4ancv2+Mgy9OJOtmXgtSjvgJh6bROH8KB89913o3N++umnUTW027t3b7PssssaxJS0y2MRhDRvG2C34447GmkH9eiRaN+JYuW1GpjU88Uah3ZvoKdOOeUUM3bs2Hj3qaeeajbYYIP4t5uph0hEWzaZCP0LPY//DfH2hv5dZJFFDD5e2frX7UfIb1wnzvH+++9H8XylLqYGQ+cOGDAgjuMbQiJKn6F78ZHITtDbGPs4J/IIF4J+4Nmy3HLLGTzP7JT1fEE7rkcipjbjucFULAS06nm5CyQSBYkAKS+MqCJ5WyIvG4lEP2C1GtZ+6BS/VBaRiFh+IL5qTWs+MdGMm/5FVH2N3l3Nc+sPqrWpuN5N788wu/5jSvwbbaLtehMXW6kXQR31teo7GpjFHd/33HOPufDCC+MOrr322ubMM8/MnEZci4FpG0+I1YWA//fee2983qQMiMS99trLbLLJJrF3TJanZFIb//znP83VV19tsKBMVsKCMvvtt59ZffXVDYi7agkkocSEtIk9LNICchZxI3HNaWmZZZYxxx57rFlttdUiQhHGZ1r5JI9ExkhMQ7bz92s1MKnnO3/spfUAtqlLJB522GFmm222SasS69zUAh4H8M4D/Ttu3LjM0kOHDo1iAw4bNqziA0tmJesgiMr77rsvmqqdpkdRHM+PXXfd1ey0006mb9++Vgvp2YceeigK94ES8IzHbxCfWHjsxhtvjLb02sZstNFG5uCDD46ITJSzn4VuPSxkBk9RSfggdeutt+ZGtEq7lPUjoFXPC3IkEgWJACmkIapI3pbIy0Yi0Q9YrYa1HzrFL0Uisf0ekUgs/lgtQg+16jsamEUYfcl9wJg86qij4oM+U5uTvDLiBlIy8LgDyXbXXXeZSy65JKVU8u4FF1wwIubgpQjDyifhfDCc7al8PvXWWmstA08deKtkpXfeeSciOaXMSSedZGAEw5tEPAflWJbcbLPNzIknnhh576DPSQnvk6eddpp5/PHHo8NY7AZeKnl58SSdk/tqR0CrgUk9X/uYaUbNa665JgpbIedq5NTmWvXvmmuuGem6avpXrgHypZdeMkcccYS9yyt/0UUXmXXXXbdqWXzwOv300+Ny+PiG//H/9//+X7zPJ4MPR9tvv33ksYgPR0kJz8idd945XlgLi+BccMEFEQGaVJ77Og8BrXpeECeRKEgESCENUUXythQSEZJEoh+wWg1rP3SKX4pEYvs9IpFY/LFahB5q1Xc0MIsw+pL7gHsD8stOIMU23HBDe1eHfGgMQLwTnX/++REB1qExjx3wJMFqoVipGFOrsxKMsX333de88cYbWcVSjy222GLmj3/8owGBmZZcIhEeNfAmsUlEEK5ukndGez9WZN5///3j90r7GPIkEl1Eiv1bq4FJPV/scfnAAw+Y8847L+4kvOvgLZj3YivN0L9yEX/7298Mnle1pt/85jdm8803z6zuEok/+clPzNNPP51ZJ+3g7373O4OPVb5E4g9/+ENz2WWXkUhMA7QT92vV8wI5iURBIkDaL4CStyXyspFI9ANWq2Hth07xS5FIbL9HJBKLP1aL0EOt+o4GZhFGX3IfYNDsscceBtON7YTVPWEwpaWQ+FJoAx50dixGaXefffYxeCFdaKGFoiltiDH19ttvR8bTK6+8IsUiCcMX07xA9KVNccY7GKbsuVOZUReehpi6LQTh7Nmzoyl38FyUuIlyQsS2wvTktPO4RKLUgwSBuMUWW0TT5wYNGhTF5IKHzocffhhNgwMW8u6I8ogVdvPNN0fxwvDbTSQSXUSK/VurgUk9X+xxCR0Pbzc7wcP7yiuvjOIU2vuRh+4L8QxEnSz9C9IOISRs/Yt3IiwCE6p/cS58KMIHGDf9/Oc/jz6O4TkB3Qrdi9i48Ia/88473eKRnv/xj3/cYb/scIlE2S/y8MMPj6YvY6o0zodnGJ4P+HD2r3/9S4pFEnEaoett/W8XcD0SSSTa6BQrr1XPy10gkShIBEj7H1/ytkReNhKJfsBqNaz90Cl+KRKJ7feIRGLxx2oReqhV39HALMLoS+/Dk08+GU2vdUsgED/iBsL4cROIuWqegVIHsaRArNmxq2DAjho1yiy11FJSrELiXSppGjTiJf7yl7+MAt5jARY3IRbXQQcdVLEbcQjhCSIGbMXBth+IQYipw4888kjFoSzPzDQiEdOO4UGy8sorV7Rl/3juueeimFn2PhjErpEvx0kkChKtIbUamNTzxR6f0KlYpOnuu+/u0FF8TNp6660rwiXUQiRW07/2AizSCZBn8JR89NFHZVcks/QvdOKebZ70iFVrJ+jx9ddf394V5eXD1wsvvGAOOOCAiuM9e/aMQmCkPc/SiEQsmgU8F1544Yr25AfwxnRyPOfsBG/35Zdf3t4V510ikVObY2gKl9Gq5+VGkEgUJAIklIIkydsSedlIJApS2VKrYZ2NSuscJZHYfq9IJLbOmO3MnmrVdzQwO3PUVT833lvgFZIWTxBefAhOj2nF8LhACjEyr732WoPFQSSBRLzppps6rGYpx23pTsfDeW+44YbIKxGknfQHdfDetffee5t///vfcRMgEUHs2eXig9/XgfGGulhkZsyYMfFhxCCEB0uSgZlEJOIco0ePTjUS44bbMvBWgXelJPQT+3B9bkLf4E05duzY6BCuG4vVcCVPF6li/NZqYFLPF2P8ZfUCi5KANPz4448Ti4FMHDlyZDTdGfosxCPRV/8mkYl4Brn6FwTfn/70p0T9i0W04AloJywaBj3qJiERZf+bb75pEE7CTuecc44ZPny4vSvOJxGJ6BsW1aqGDzABppMmTYrbw4euHXbYIf5tZ/AswjEJkUGPRBudYuW16nm5CyQSBYkACUUnSfK2RF42KA/kbYm8bFCkdh5TXvAbiklT0mpYl+Uek0hsv5MkEssyoht7HVr1HQ3Mxo6rPFrH+8pVV12VuQIlSC6seLnxxhtHRJ5PnEQYRjBM4ZUoCR6Fm266qfzMlHgv2tPxPMFKztiHBGMX3pGYTowp0a6BBrIOKyQnJXelZBjXO+64Y+w5iTZhnMIrxE1JROKIESMiwi8pNqJb/9VXX40MetlfzfPk/vvvj4hGlIc3C7xckkhHaY+y8xDQamBSz3femAs5M0I6gIQbP358arV+/fpFq9JDT/su6hSif5PIRFf/onNYEMXVv3hW4cOKLD6Fcj/72c8Mpk67utclEVEWCQt+XX/99e0/2v6CsMNHoCSdmkQk/va3vzXwjvdJmMoMj3hJWKTFJTLlGK7tlLZQG/LRCB/GQPwyFQ8BrXpe7gSJREEiQOIfXJLkbYm8bHj5Rd6WyMtGIrEdSa2GtYyjVpckEtvvIInEVh/Jzem/Vn1HA7M54yuPsyC24MknnxyTaWltYnVNTBFbaaWV0opE+13jUuIc9unTJ7OefRBegmeccUa8CytLX3fddRVehvAaxIdYu1yScYj3MsTMAomIvJ3w2/XMBDHpTpVGHZdIhAGLWGOIAeaT8PF4yy23jHGuFpMR1yYxJrO8F33OzTKNRUCrgUk939hxlWfr0HW33HJLtIBVtXahA7HCc//+/TOLYjVjEGySkvSvHIN0yURf/QsiFB7y4rWHtkDUDRs2DNk4pZGIKIAp0dtss01cFs8lhNJIukaXSIRHPT7s+BKs7nRvhAvBB7mkBAxskhQxhHffffekotzXyQho1fMCO4lEQSJA4h9ckuRtibxsNoGIfUIgiiSR2I6kVsNaxlGrSxKJ7XeQRGKrj+Tm9F+rvqOB2ZzxlddZEDMQ05zhoegGwXfPgZfJ4447znTr1s09FP3G1GR4WEjaaKONIqIS70K+acaMGZHhKH2B0YcFS+ypvXjPsg0wtI0YW/AStN/Lqp0XnoI2cZhG8LlEIrwzca09evTwuixgvNVWW8WemtWmK9tE4gorrBBNFU/ynvE6OQs1FAGtBib1fEOHVUMal0VI7DALaSc64ogjojiuSbFpoWN//etfV8SZhd7fbLPN0pqL9rtkoo/+nThxYoWXHmLfYgq0Pc04i0TEifEcwKJczz77bNw/LK6VtOiKSySiDEJ1+OpfPCu23377+DxZ+tt9jpFIjGErXEarnpcbQSJRkAiQ+AeXJHlbIi8blBTytkReNhKJ7UhqNaxlHLW6JJHYfgdJJLb6SG5O/7XqOxqYzRlfeZ8F7zATJkyIguAjJl9agiEHQzTJm+PGG2+MpqdJXRhv8MYAkeab3LhRqIepafaCJni3AqH5/PPPx80iNiLiOoYkjFWZNo16IPhAWrreJ0lE4n333dehXNq5k4jEpPNIfZtIrDYNWupQdg4CWg1M6vnOGW95nBUrDSO2LHSYTKtNanfdddeNQiy4MWehf11iDrFxq3ms4xw2mejqX3w0uuOOOyr06iuvvGIOOeSQuHuuPqxGIqIinm0IsfHXv/41bufAAw80IO7c5BKJq6++uvnDH/7gTSS6XvnwnMTiMklEJPplfxAjkejejeL81qrn5Q6QSBQkAiT+wSVJ3pbIywalirwtkZeNRGI7kloNaxlHrS5JJLbfQRKJrT6Sm9N/rfqOBmZzxlcjzwLi66mnnopIQfEMtM8HMvHPf/6zwbQvSXgHOvLII6N6sk+MNTc+oRxPknhvOvjgg81rr70WH3aJxKTpbm6ZuHJGBnG6MJVMrjHNU9AlEkONy1AiEdMGEa8RiTESM25gAQ5pNTCp5wsw+HLoAnQgdDlCNSQleJUjhITtmQj9i1AN06dPj6ugvhvfMD7oZIRMdPVvkve5rQvRjL0giQ+JKKfGisr42CRJnk3yW6RLJB566KEVHpFSLk26RGI1j0TGSExDslj7tep5uQskEgWJAImXYkmStyXystkEIvYJgSiSRGI7kloNaxlHrS5JJLbfQRKJrT6Sm9N/rfqOBmZzxlczzoL4gvBYOf300zucDh4pdjwnvPu4090QEH/zzTeP6sILBu1VS2jH9tJAeRipmHYsCV6LO++8c8VqpPCIWXrppaWIl3Tb6d69exRLDNJOLpEIz0cYpkleJnY9yYcSia+//noUkxL10+I2StuUnYuAVgOTer5zx13eZ4d+hpc0Qly4yfU2TFpUK2uhK7c9/IZdjLiHth4Xb3db/9re2aiHhVYQ1xfhJXz1L+q5BOExxxwTLbaFY3Zyy6URjnYdOx9CJKIePDDh8YgEz8U11lgjyvNPsRDQquflLpBIFCQCJF5mJUnelsjLRiJRkMqWWg3rbFRa5yiJxPZ7RSKxdcZsZ/ZUq76jgdmZo64x537vvfeiaWBfffVVfAJ4Iz700ENGjD68D7nTx1xjDYQa3peyEtpxiUR32nKSR6JLNmadQ465RCKMU0zrdmMf1kskor+IkQgPHKS0KdTSL/t8nO4mqBRTajUwqeeLOR5r7RVIOXj4PfLII+ZXv/pVRTOY4owFTsQrMckjEWEt4C0YkmbNmmW23nrrWC/imQIy09a/iEULgk3S2muvHfUFC26FJDd+L2JAJi2C0mwi0SZKa/GqD8GAZWtHQKueF8RIJAoSARIvs5Ikb0vkZSORKEhlS62GdTYqrXOURGL7vSKR2DpjtjN7qlXf0cDszFHXuHMjUP3xxx8fnwDT0GAEySIoeB+CwQdDUJLrzYEyMEKzErwW995772ilTSnnGliYKr3HHnuYyZMnS5EOcRTjAxkZLD4AY1IIUt+pzaEeifC8gWchicSMm9Gih7QamNTzLTpgU7otRCIOQ99ef/31cUl3RWbo3+22285MmjQpLhMytVkqffDBBxGRKPo3aWrz448/XrGA149+9CMDD8kQb0Sc76KLLjIgOyW5zybZTyJRkKC0EdCq5wUDEomCRIDEC68kydsSedlIJApS2VKrYZ2NSuscJZHYfq9IJLbOmO3MnmrVdzQwO3PUNe7caV6Adlws1whzpz+jdyAKMY0uLcFLEKQbyDdJrkci3r2qeS1K3SyJsWovtgKPxFtuuaUi2D/qwyNzt912i5sKIRLRVxCIu+yyizeRiEVv9ttvv+h8IDr33Xff+NzMFAsBrQYm9XyxxmG9vbGJxPHjx0dTjqXNpI9GbhgLd/qz1M2S7jRgeCRiirS92JWro0NXUcb5oYPd/iY9m1DWfYalEY4om5Tca8qKkYj6d999d7xAGbw+sTgLU/EQ0Krn5U6QSBQkAiQUjyTJ2xJ52UgkClLZUqthnY1K6xwlkdh+r0gkts6Y7cyeatV3NDA7c9Q17tx4z7FXSobhedNNN5llllkmPumjjz4aTW+WHWlGHzxQ4NWSlEC67bjjjrGXYJKXCt69Lr744sgIkzb233//CuNX9mdJ/I8eddRRcZEkow/T+eD5iD5JCiESQZrOnDkziEgEaTtlypTodJg6vsgii8ipKQuGgFYDk3q+YAOxzu7YRCI+4owcOTJehKpnz56R9zmmPiNB/7re56GLkqCdcePGmYMOOgjZKNkLqcg+6F7EUZQEsvH++++vIBvlWJrEswte7lipWlKaB2WziUQ872TRmv79+xvEiWQqHgJa9bzcCRKJgkSAhKKUJHlbIi8biURBKltqNayzUWmdoyQS2+8VicTWGbOd2VOt+o4GZmeOusad240niDO5cbEwVW2zzTaLOwHj9K677jKLLbZYvE8yaSs5u6t0YpGVUaNGmXnmmUeqRvLJJ580J554YrwPxi7O5ZaLCzgZvL8hFtgzzzwTH8HiMYhJKAltYbrzW2+9VRORKKuTIjZkiEeinJ+y+AhoNTCp54s/NkN6aBOJiNG6/fbbx9VBboG8k3i4OIBFuBADVxL071/+8pcg/XvkkUeap556Spowe+21V4WHOA7Agx1hLOxp1Oecc44ZPnx4XK9aJsnD8r777jN9+/btULXZRGKHDnBHIRHQquflZpBIFCQCpJCGqCJ5WyIvG4lEP2C1GtZ+6BS/VBaReOjSvc1C885d80VcNfFTM/mL9hU9F+s6j9l3UK+a25KKr3z2pblr6kz5afZdspdZbP5KYzQ+GJA5d/zH5r/ftX9oWKnHfGbrAZUrfAY0Zd76/Ctz06QZiVWW6dbFTNhocOIx7iw+Alr1HQ3M4o/NWnroTu91p7uhTbwLwQCdOHFifIqsqWEoD4JS3q1ALoJwQ+xCSWmehq7nIsojDpY91VraSJLw+Ntpp53iQz/4wQ8iL8eVV1452gcCUUjJWolEWVymFiJRMEG/mIqLgFYDk3q+uGOylp7ZRKK74EpSXMKPPvrIbLHFFrHnOM55+eWXG3ih+yR4Gm655ZYVReElCP2L5wCeDfAGx3PmiiuuqFhNOqk/FQ1ZP6BHXe/JNE95VCORaIHHbIyAVj0vAJBIFCQCpLzEoYrkbYm8bCQS/YDValj7oVP8UllEYvF733o9JJHYevfM7rFWfUcD0x4F5cgnLYACT8E//vGPHaZiYSXnk08+Ob5wGKijR49OXdET71GY/gvvvRtuuKHCYERdxCxMmtqLeueee260crScDJ4ziLFle87IMVvierDC9PPPPx/vHjhwYNRPGK4gEWWFUhSohUjENeE8SKFE4nPPPRdNJcS7JWJmwWAHFkzFQ0CrgUk9X7yxWE+PhEh0F0BBm5gWbE9Bxj7o39NPP93As09SkueiHLMl9CJWTcYCXpKgf++88874443sh3z33XfNNttsY+8yJ5xwgtlqq60q9iX9wDkOOeSQikPnn3++2WCDDSr2yY9mEonQ7/D0xLsiVqHeaKONzFprrSVdoSwQAlr1vNwCEomCRICEkpQkeVsiLxuJREEqW2o1rLNRaZ2jJBKbe69IJDYX77zPplXf0cDMeyTl055MTR46dGhETIEI9InHhGluZ555psECIHYCEbfppptGHiMwgiTBSNx2220rpqLBSEVMwzQjCe9Ql156aUTkSTuQ8FixYxjax5CH56I9BQ/7cE1XXXWVWXTRRfGzQ0K8QrSJ6W52Ou2006LpciAR3RRKJMqUZmknhEh88cUXDab82QkLvXDBFRuR4uS1GpjU88UZg25PxHscU4LXXXdds/TSSycSdHY9fDh56aWXounKsoqyHMfHGTsWrux3Q1lgP/TvzTffbAYMGCDFKiT0L7zU33jjjYr91aYru6suozLISMRPtD/62I0+9thjUVxfe1+1KdjNJBKxQM11111ndy/ynlxjjTUq9vFH5yOgVc8L8iQSBYkAKaQhqkjelkIiQpJI9ANWq2Hth07xS5FIbO49IpHYXLzzPptWfUcDM++RlE97SashDx482Ky++upm2WWXNX369DEIZA8ibdasWRFxiBUl4Q3iJgTFB/EnU39Rzzbm3JUrpT7iJ2IVYnifIMFgfeWVV8wpp5wSB5yXskkreMoxWz788MPmrLPOsndFeRBvv/jFLwwMRyRcE+IhYpqbm+D1B6JTFhNwj4cQiXgnBHEo74toK4RITDIul19++ShOJL0S3TvT+b+1GpjU850/9tJ6gHuz5557Vhxee+21I6/wpZZayvTu3TvS9dDfWFjl5ZdfNrfffnu8uIpd8YADDsj8iPHAAw9E+tuugzw8GEeMGBEvivL5559H8RB/+9vfukWjZ9Af/vCHTK9rLEC19dZbG0ypthOeXfjwgunOuB7Y43hmYTq0HX9R6uAj0yqrrCI/O8hmEYno58EHH2xee+21ij4kxYmsKMAfnYKAVj0vYJNIFCQCpP0SKHlbIi8biUQ/YLUa1n7oFL9UFpH4/AaDzNILzPFKCb2aXzz9vvnHp19E1Yb16mrG/GTx0CY6lL9jykxzwD8/iPejTbRdb1rmkbfN9K+/i5rZti0+4hWr9K+5yUc/nG12eH5yYn0SiYmwtMxOrfqOBmYxh6h4JCK2YD0JC6e4U5oRxw/Enx3P7/HHHzfHHntsTafC9GIQakI4ZjWC97DLLrssMoSzyqUdg2fmNddck0oiol4IkQjSEO+EdgohEtEXTAW3E+I+XnDBBZmGtl2e+eYhoNXApJ5v3hgLPVMSkRjaBspvvvnm0YJWWR8woH/hLXjTTTfVcgqDjyRXX311pv6VhuFpCTKx1nThhRea9dZbL7N6ZxOJWOwLi34xFQsBrXpe7gKJREEiQEI5SpK8LZGXjUSiIJUttRrW2ai0ztEsIhGLgoD4qjWt+cREM256O5G4Ru+u5rn1B9XaVFzvpvdnmF3/MSX+jTbRdr2JqzbXi6CO+lr1HQ3MYo7vJI/E0J7CywTTlpMMS3gkwqPPJhNfeOEFc9hhh1UE5K92TniYwDsFHpKYJo0NU4WzEt7FsGLzJZdcklWsw7HtttvOHH300bFnZYcC3+/wJRLtuIh2WyASd9xxx8j7B/vh9XnbbbdFnkF2OeSxEjYWHbATPRJtNIqV12pgUs8XaxzavamXSMSHHISzWH/99Sv0uX0OOw/9C32G2IMhyVf/2m1ikRbobOhk34TrGTVqVLSQS7U699xzj7G9JrMWC0tqy/XGX2GFFSLvffeZCd4Az0Z45NsJ8SgxJZ2pWAho1fNyF0gkChIBEopRkuRtibxsJBIFqWyp1bDORqV1jpJIbL9XJBJbZ8x2Zk+16jsamJ056rLPjWls48aNM2PGjKlYaCSrVr9+/aKVlDfccMOqi5jAWHKnB4MIHDt2bEQOTpo0KfVUiOWFVZQRH8omI1EB71ogE2WTdzG3MVzfgw8+GMWdcuN82WVHjhwZEXtJcb/scpJ///33Kzxh0FcYzbZxiPNhtdGkBCIRUw1lNWrEEUPcsaQYlYhFud9++0XXjLaABQxneAcxFQ8BrQYm9XzxxqLdIxBumNr76KOPdogHa5ez86uttloUc3CdddaJFv+wj/nkoX9BxMFjPU/9654b+v9f//pX5MmIcBVpCbEhEUpjk002iWL5ppWz9+NZdcwxx8S7kMdHIN/kLgzz85//3Jx00kkVoT+kLUwLd0Nt4CMSvOSZioWAVj0vd4FEoiARIO0XVcnbEnnZSCT6AavVsPZDp/ilSCS23yMSicUfq0XooVZ9RwOzCKOveh9AyiFuFWJPffbZZxEJBk85/AYhBpKrf//+iV5zWa0jTlXSgiWoM336dDN16tTIyISXCIxNxOvCqswuAZl1Drx74b0LG5K8iyEvJCRIO8TTQn9wHKlv375m4YUXruqBGBUO+AO8sgzngKaioiABoD9wLZhKDgOfqZgIaDUwqeeLOR6TegVPaeh1xInFYif43aNHD/PJJ59EH0N69epl8MEIulH0Z1I7vvugb6F/8b8BT3XR043Qv7iuKVOmRM+w7t27R9eH68G5JD6ub78bUQ79k+dPUvuITwl9j49NiNW75JJLJhXjvk5GQKueF9hJJAoSAdL+x5e8LZGXjUSiH7BaDWs/dIpfikRi+z0ikVj8sVqEHmrVdzQwizD6OrcPSZ6Jndujxp09yxOxcWdly0VBQKuBST1flBGYXz/wcadLl9pDFOXXk3K0BG4ABCFT6yOgVc/LnSORKEgESCENUUXythQSEZJEoh+wWg1rP3SKX4pEYvs9IpFY/LFahB5q1Xc0MIsw+jq/D0kxEzu/V/n2IC0mYr5nYWtFRkCrgUk9X+RRWVvfNH0Aqg2hsFp5e6qHnZ2l80RAq54XDEkkChIBUkhDVJG8LZGXjUSiH7BaDWs/dIpfikRi+z0ikVj8sVqEHmrVdzQwizD6itEHTJNzV3MuRs/q6wXe/bB4Dd79mHQjoNXApJ4v57hfYIEFcpneXE50wq4K3oh8RoRhVtTSWvW83A8SiYJEgBTSEFUkb0vkZSOR6AesVsPaD53ilyKR2H6PSCQWf6wWoYda9R0NzCKMvmL1AfEP7YVJitW7sN7gfQ+eiDQQw3Ara2mtBib1fDlHdFaM23JecWOuCouM4TnBVA4EtOp5uXskEgWJACmkIapI3pZCIkKSSPQDVqth7YdO8UuRSGy/RyQSiz9Wi9BDrfqOBmYRRl/x+gADFTG48gjm31lXx3iInYV8cc+r1cCkni/umKy3Z/RKrBdBEy1uI5xB/a2xhc5GQKueF9xJJAoSAdJWAJK3JfKykUj0A1arYe2HTvFLkUhsv0ckEos/VovQQ636jgZmEUZfMfsAEhErOreadyK9EIs5norQK60GJvV8EUZfY/qA+LYIScFUGwKMnVsbbkWupVXPyz0hkShIBEghDVFF8rYUEhGSRKIfsFoNaz90il+KRGL7PSKRWPyxWoQeatV3NDCLMPqK3YdW8U7E+x0C5mNjIgJJCGg1MKnnk0ZDefZxinNt95ILrNSGW9FradXzcl9IJAoSAVJIQ1SRvC2Rl41Eoh+wWg1rP3SKX4pEYvs9IpFY/LFahB5q1Xc0MIsw+lqjD0UlFPFuRwKxNcZQZ/dSq4FJPd/ZI6/x5+/SpUsUjqLxZyrHGRgXsRz3MekqtOp5wYJEoiARIIU0RBXJ2xJ52Ugk+gGr1bD2Q6f4pUgktt8jEonFH6tF6KFWfUcDswijr7X6UBRCEe90JBBba+x0dm+1GpjU85098ppzfnom+uHM+Ll+OLVqKa16Xu4XiURBIkAKaYgqkrcl8rKRSPQDVqth7YdO8UuRSGy/RyQSiz9Wi9BDrfqOBmYRRl9r9gGxuWC4YmvWoix4j/v2228NvEkgmYhACAJaDUzq+ZBR0tploZcR2xaSqRIBPD9AIuL5wVReBLTqebmjJBIFiQAJ5SBJ8rZEXjYSiYJUttRqWGej0jpHSSS23ysSia0zZjuzp1r1HQ3Mzhx15Tm3kIpYmCVvAxbvbiANhUAsD2q8kmYjoNXApJ5v9kjr/PMVxXO885FodzCi93oR7kRz+qBVzwu6JBIFiQAppCGqSN6WyMtGItEPWK2GtR86xS+VRSSO32iwWaZbl5ovYq0nJppx07+I6q/Ru6t5dv1BNbclFW96f4bZ7R9T5GfUJtquN/V9cLz55OvvomZ2GdjD3PDjATU3+edps8z/PPN+Yn3gOaENV6bWRECrvqOB2Zrjtei9BpmITYhF8VgU6fbffV8DaYh3NXlfc8vzNxGoBQGtBib1fC2jpRx17I880L9pOrgcVzvnKvBMEc91eq/PwUVDTquel3tLIlGQCJDyEooqkrcl8rLJi6kt5YUV0n6BRf7DDz+MXmYffPDBgB61flGthnXr37n2K7A98dxrWnL+eUyXuX7g7vb+/f5/vzFfftfuBTxfWzuLt7VXb5r5zXdm2pdzpqoN7DqP6Tp37X2U/rwz62vTTiMa032eucwi880th4Ll7G//z0z5InlKxJo5EarBnWKFXBDQqu9oYOYyfNhIIAJizMp7WmB1FicCNSGg1cCknq9puJS2UpkJRdjxTLoR0Krn5a6TSBQkAqT9Mip5WyIvm00gYp9NIpJInAO6VsN6DgKtndvo7++ZRz+c3doX0UK9P2BQLzNqlf4t1GN21UZAq76jgWmPAuaJABEoMwJaDUzq+TKPal4bESACNgJa9bxgQCJRkAiQQhqiiuRtibxsJBL9gNVqWPuhU/xSv3z1Q3POhI+L39GS9PCqVfubfZbsVZKr0XcZWvUdDUx9Y51XTAS0IqDVwKSe1zried1EQB8CWvW83GkSiYJEgBTSEFUkb0shESFJJPoBq9Ww9kOn+KWmtk3BHfrY/5qPvpozXbj4vW7NHq6w4LzmHz9bysyfw1Ts1kSg9XutVd/RwGz9scsrIAJEwA8BrQYm9bzf+GApIkAEWh8BrXpe7hyJREEiQAppiCqStyXyspFI9ANWq2Hth05rlLp98kyz4/OTzZw1zVuj363Uyy5tYRz//tNBZvUcFoZppesuW1+16jsamGUbybweIkAE0hDQamBSz6eNCO4nAkSgbAho1fNyH0kkChIBUkhDVJG8LYVEhCSR6AesVsPaD53WKXXpO9PNcf/+j5n9/eIordPz4ve037xzmyvapjRvtWj34neWPcxEQKu+o4GZOSx4kAgQgRIhoNXApJ4v0SDmpRABIpCJgFY9L6CQSBQkAqSQhqgieVsiLxuJRD9gtRrWfui0Vqnxn39lDn95mnnq49lmVtvKw0z1IdC7y1zmFwt3MxcN7V/XKtD19YK180RAq76jgZnnKGJbRIAIFBkBrQYm9XyRRyX7RgSIQJ4IaNXzgiGJREEiQAppiCqSt6WQiJAkEv2A1WpY+6HTmqW+a+s2SMWJs77mdOcabuFcbdOYl2uLh7jUAl1qqM0qRUZAq76jgVnkUcm+EQEikCcCWg1M6vk8RxHbIgJEoMgIaNXzck9IJAoSAVJIQ1SRvC2Rl41Eoh+wWg1rP3RYiggQgTIhoFXf0cAs0yjmtRABIpCFgFYDk3o+a1TwGBEgAmVCQKuel3tIIlGQCJBCGqKK5G0pJCIkiUQ/YLUa1n7osBQRIAJlQkCrvqOBWaZRzGshAkQgCwGtBib1fNao4DEiQATKhIBWPS/3kESiIBEghTREFcnbEnnZSCT6AavVsPZDh6WIABEoEwJa9R0NzDKNYl4LESACWQhoNTCp57NGBY8RASJQJgS06nm5hyQSBYkAKaQhqkjelkIiQpJI9ANWq2Hthw5LEQEiUCYEtOo7GphlGsW8FiJABLIQ0GpgUs9njQoeIwJEoEwIaNXzcg9JJAoSAVJIQ1SRvC2Rl41Eoh+wWg1rP3RYiggQgTIhoFXf0cAs0yjmtRABIpCFgFYDk3o+a1TwGBEgAmVCQKuel3tIIlGQCJBCGqKK5G0pJCIkiUQ/YLUa1n7osBQRIAJlQkCrvqOBWaZRzGshAkQgCwGtBib1fNao4DEiQATKhIBWPS/3kESiIBEghTREFcnbEnnZSCT6AavVsPZDh6WIABEoEwJa9R0NzDKNYl4LESACWQhoNTCp57NGBY8RASJQJgS06nm5hyQSBYkAKaQhqkjelkIiQpJI9ANWq2Hthw5LEQEiUCYEtOo7GphlGsW8FiJABLIQ0GpgUs9njQoeIwJEoEwIaNXzcg9JJAoSAVJIQ1SRvC2Rl41Eoh+wWg1rP3RYiggQgTIhoFXf0cAs0yjmtRABIpCFgFYDk3o+a1TwGBEgAmVCQKuel3tIIlGQCJBCGqKK5G0pJCIkiUQ/YLUa1n7osBQRIAJlQkCrvqOBWaZRzGshAkQgCwGtBib1fNao4DEiQATKhIBWPS/3kESiIBEghTREFcnbEnnZSCT6AavVsPZDh6WIABEoEwJa9R0NzDKNYl4LESACWQhoNTCp57NGBY8RASJQJgS06nm5hyQSBYkAKaQhqkjelkIiQpJI9ANWq2Hthw5LEQEiUCYEtOo7GphlGsW8FiJABLIQ0GpgUs9njQoeIwJEoEwIaNXzcg9JJAoSAVJIQ1SRvC2Rl41Eoh+wWg1rP3RYiggQgTIhoFXf0cAs0yjmtRABIpCFgFYDk3o+a1TwGBEgAmVCQKuel3tIIlGQCJBCGqKK5G0pJCIkiUQ/YLUa1n7osBQRIAJlQkCrvqOBWaZRzGshAkQgCwGtBib1fNao4DEiQATKhIBWPS/3kESiIBEghTREFcnbEnnZSCT6AavVsPZDh6WIABEoEwJa9R0NzDKNYl4LESACWQhoNTCp57NGBY8RASJQJgS06nm5hyQSBYkAKaQhqkjelkIiQpJI9ANWq2Hthw5LEQEiUCYEtOo7GphlGsW8FiJABLIQ0GpgUs9njQoeIwJEoEwIaNXzcg9JJAoSAVJIQ1SRvC2Rl41Eoh+wWg1rP3RYiggQgTIhoFXf0cAs0yjmtRABIpCFgFYDk3o+a1TwGBEgAmVCQKuel3tIIlGQCJBCGqKK5G0pJCIkiUQ/YLUa1n7osBQRIAJlQkCrvqOBWaZRzGshAkQgCwGtBib1fNao4DEiQATKhIBWPS/3kESiIBEghTREFcnbEnnZSCT6AavVsPZDh6WIABEoEwJa9R0NzDKNYl4LESACWQhoNTCp57NGBY8RASJQJgS06nm5hyQSBYkAKaQhqkjelkIiQpJI9ANWq2Hthw5LEQEiUCYEtOo7GphlGsW8FiJABLIQ0Gpg/v/27p7HdrNqA/A+CfkAgkIEJKICCRRaUKiQqGloKfgn0ECggX/CH4CCGokKBC0RBTSgcEAJSiJCouh9WXNyh4Xj7fH2mcnx+Lm25LOWH/vZe3zZOPjOnhP3+aWrwjYCBI4kMOp9PudQkBiJC2pCw5qSvtfqswgS18GO+mC9TsdeBAgcSWDU+50HzCNdxY6FAIElgVEfMN3nl64K2wgQOJLAqPf5nENBYiQuqAkNa0r6XhMiVhUkroMd9cF6nY69CBA4ksCo9zsPmEe6ih0LAQJLAqM+YLrPL10VthEgcCSBUe/zOYeCxEhcUBMa1pT0vVafRZC4DnbUB+t1OvYiQOBIAqPe7zxgHukqdiwECCwJjPqA6T6/dFXYRoDAkQRGvc/nHAoSI3FBTWhYU9L3mhCxqiBxHeyoD9brdOxFgMCRBEa933nAPNJV7FgIEFgSGPUB031+6aqwjQCBIwmMep/PORQkRuKCmtCwpqTvtfosgsR1sKM+WK/TsRcBAkcSGPV+5wHzSFexYyFAYElg1AdM9/mlq8I2AgSOJDDqfT7nUJAYiQtqQsOakr7XhIhVBYnrYEd9sF6nYy8CBI4kMOr9zgPmka5ix0KAwJLAqA+Y7vNLV4VtBAgcSWDU+3zOoSAxEhfUhIY1JX2v1WcRJK6DHfXBep2OvQgQOJLAqPc7D5hHuoodCwECSwKjPmC6zy9dFbYRIHAkgVHv8zmHgsRIXFATGtaU9L0mRKwqSFwHO+qD9TodexEgcCSBUe93HjCPdBU7FgIElgRGfcB0n1+6KmwjQOBIAqPe53MOBYmRuKAmNKwp6XutPosgcR3sqA/W63TsRYDAkQRGvd95wDzSVexYCBBYEhj1AdN9fumqsI0AgSMJjHqfzzkUJEbigprQsKak7zUhYlVB4jrYUR+s1+nYiwCBIwmMer/zgHmkq9ixECCwJDDqA6b7/NJVYRsBAkcSGPU+n3MoSIzEBTWhYU1J32v1WQSJ62BHfbBep2MvAgSOJDDq/c4D5pGuYsdCgMCSwKgPmO7zS1eFbQQIHElg1Pt8zqEgMRIX1ISGNSV9rwkRqwoS18GO+mC9TsdeBAgcSWDU+50HzCNdxY6FAIElgVEfMN3nl64K2wgQOJLAqPf5nENBYiQuqAkNa0r6XqvPIkhcBzvqg/U6HXsRIHAkgVHvdx4wj3QVOxYCBJYERn3AdJ9fuipsI0DgSAKj3udzDgWJkbigJjSsKel7TYhYVZC4DnbUB+t1OvYiQOBIAqPe7zxgHukqdiwECCwJjPqA6T6/dFXYRoDAkQRGvc/nHAoSI3FBTWhYU9L3Wn0WQeI62FEfrNfp2IsAgSMJjHq/84B5pKvYsRAgsCQw6gOm+/zSVWEbAQJHEhj1Pp9zKEiMxAU1oWFNSd9rQsSqgsR1sKM+WK/TsRcBAkcSGPV+5wHzSFexYyFAYElg1AdM9/mlq8I2AgSOJDDqfT7nUJAYiQtqQsOakr7X6rMIEtfBjvpgvU7HXgQIHElg1PudB8wjXcWOhQCBJYFRHzDd55euCtsIEDiSwKj3+ZxDQWIkLqgJDWtK+l4TIlYVJK6DHfXBep2OvQgQOJLAqPc7D5hHuoodCwECSwKjPmC6zy9dFbYRIHAkgVHv8zmHgsRIXFATGtaU9L1Wn0WQuA521AfrdTr2IkDgSAKj3u88YB7pKnYsBAgsCYz6gOk+v3RV2EaAwJEERr3P5xwKEiNxQU1oWFPS95oQsaogcR3sqA/W63TsRYDAkQRGvd95wDzSVexYCBBYEhj1AdN9fumqsI0AgSMJjHqfzzkUJEbigprQsKak77X6LILEdbCjPliv07EXAQJHEhj1fucB80hXsWMhQGBJYNQHTPf5pavCNgIEjiQw6n0+51CQGIkLakLDmpK+14SIVQWJ62BHfbBep2MvAgSOJDDq/c4D5pGuYsdCgMCSwKgPmO7zS1eFbQQIHElg1Pt8zqEgMRIX1ISGNSV9r9VnESSugx31wXqdjr0IEDiSwKj3Ow+YR7qKHQsBAksCoz5gus8vXRW2ESBwJIFR7/M5h4LESFxQExrWlPS9JkSsKkhcBzvqg/U6HXsRIHAkgVHvdx4wj3QVOxYCBJYERn3AdJ9fuipsI0DgSAKj3udzDgWJkbigJjSsKel7rT6LIHEd7KgP1ut07EWAwJEERr3fecA80lXsWAgQWBIY9QHTfX7pqrCNAIEjCYx6n885FCRG4oKa0LCmpO81IWJVQeI62FEfrNfp2IsAgSMJjHq/84B5pKvYsRAgsCQw6gOm+/zSVWEbAQJHEhj1Pp9zKEiMxAU1oWFNSd9r9VkEietgR32wXqdjLwIEjiQw6v3OA+aRrmLHQoDAksCoD5ju80tXhW0ECBxJYNT7fM6hIDESF9SEhjUlfa8JEasKEtfBjvpgvU7HXgQIHElg1PudB8wjXcWOhQCBJYFRHzDd55euCtsIEDiSwKj3+ZxDQWIkLqgJDWtK+l6rzyJIXAc76oP1Oh17ESBwJIFR73ceMI90FTsWAgSWBEZ9wHSfX7oqbCNA4EgCo97ncw4FiZG4oCY0rCnpe02IWFWQuA7297///em99947vfTSS+sm2IsAAQJ3UKDuc3W/e/zxx09f/epX7+ARbP+R//znP1/9M/H555/f/iZmEiBAYOcC9f//79+/f3rsscdOX/jCF3b+097sj+c+f7Oe3o0AgX0KjHyfzxkRJEbigloXTl7pe60+iyAxUsv1D3/4w+nNN988vfjii6dPfepTyzvbSoAAgTsq8MYbb5xeeeWV0zPPPHP6yle+ckePYtuP/de//vX09ttvn5577rnTE088se1NzCJAgMDOBd59993Ta6+9dnr66adPn//853f+097sj+c+f7Oe3o0AgX0KjHyfzxkRJEbigprQsKak7zUhYlVB4jrYf/zjH6c//elPp09/+tOnL33pS+sm2YsAAQJ3TKBCxAoTv/jFL54+85nP3LGf/uF+3Druv//976ennnrq9Oyzzz7cm5lNgACBnQq8/vrrp3feeef02c9+drh/Oe4+v9OL0o9FgMCNCox8nw+kIDESF9SEhjUlfa/VZxEkrofNtxIrTHzhhRdOH//4x69+/W/9O9iTAAEC+xSob1z/5S9/uQoRR/w2Ys5Kvq1SYeInPvGJ08c+9rHTvXv3slklQIDAnRWob6i89dZbVyHiiN9GzIlzn4+ESoDA0QTc5/97RgWJ/7VY3SU0rAnpe02IWFWQuJr16u9I/OMf/3j1K87rZ9mTAAECd0egQsQvf/nLw/5Lkvpn4quvvnr1K85356z5SQkQILBeoELE+hfi9Xckjvhynx/xrDtmAmMJjH6fr7MtSNxwzSc0rKnpe60+iyDxcuD6Nef69bd//etfV+Hi5e9gBgECBPYjUP9hlfqGdf2a22i/znzuLNSvv9W3NOvX/+qfk14ECBC4ywIVGj755JNXf/+tv+v7wZl0n7/LV7SfnQCBqYD7/P+KCBL/12PVWkLD2jl9rwkRqwoSV5HaiQABAgQIECBAgAABAgQIECBAYOcCgsQNJyihYU1N32v1WQSJG4BNIUCAAAECBAgQIECAAAECBAgQ2J2AIHHDKUloWFPT95oQsaogcQOwKQQIECBAgAABAgQIECBAgAABArsTECRuOCUJDWtq+l6rzyJI3ABsCgECBAgQIECAAAECBAgQIECAwO4EBIkbTklCw5qavteEiFUFiRuATSFAgAABAgQIECBAgAABAgQIENidgCBxwylJaFhT0/dafRZB4gZgUwgQIECAAAECBAgQIECAAAECBHYnIEjccEoSGtbU9L0mRKwqSNwAbAoBAgQIECBAgAABAgQIECBAgMDuBASJG05JQsOamr7X6rMIEjcAm0KAAAECBAgQIECAAAECBAgQILA7AUHihlOS0LCmpu81IWJVQeIGYFMIECBAgAABAgQIECBAgAABAgR2JyBI3HBKEhrW1PS9Vp9FkLgB2BQCBAgQIECAAAECBAgQIECAAIHdCQgSN5yShIY1NX2vCRGrChI3AJtCgAABAgQIECBAgAABAgQIECCwOwFB4oZTktCwpqbvtfosgsQNwKYQIECAAAECBAgQIECAAAECBAjsTkCQuOGUJDSsqel7TYhYVZC4AdgUAgQIECBAgAABAgQIECBAgACB3QkIEjeckoSGNTV9r9VnESRuADaFAAECBAgQIECAAAECBAgQIEBgdwKCxA2nJKFhTU3fa0LEqoLEDcCmECBAgAABAgQIECBAgAABAgQI7E5AkLjhlCQ0rKnpe60+iyBxA7ApBAgQIECAAAECBAgQIECAAAECuxMQJG44JQkNa2r6XhMiVhUkbgA2hQABAgQIECBAgAABAgQIECBAYHcCgsQNpyShYU1uwSnpAAAU2UlEQVRN32v1WQSJG4BNIUCAAAECBAgQIECAAAECBAgQ2J2AIHHDKUloWFPT95oQsaogcQOwKQQIECBAgAABAgQIECBAgAABArsTECRuOCUJDWtq+l6rzyJI3ABsCgECBAgQIECAAAECBAgQIECAwO4EBIkbTklCw5qavteEiFUFiRuATSFAgAABAgQIECBAgAABAgQIENidgCBxwylJaFhT0/dafRZB4gZgUwgQIECAAAECBAgQIECAAAECBHYnIEjccEoSGtbU9L0mRKwqSNwAbAoBAgQIECBAgAABAgQIECBAgMDuBASJG05JQsOamr7X6rMIEjcAm0KAAAECBAgQIECAAAECBAgQILA7AUHihlOS0LCmpu81IWJVQeIGYFMIECBAgAABAgQIECBAgAABAgR2JyBI3HBKEhrW1PS9Vp9FkLgB2BQCBAgQIECAAAECBAgQIECAAIHdCQgSN5yShIY1NX2vCRGrChI3AJtCgAABAgQIECBAgAABAgQIECCwOwFB4oZTktCwpqbvtfosgsQNwKYQIECAAAECBAgQIECAAAECBAjsTkCQuOGUJDSsqel7TYhYVZC4AdgUAgQIECBAgAABAgQIECBAgACB3QkIEjeckoSGNTV9r9VnESRuADaFAAECBAgQIECAAAECBAgQIEBgdwKCxA2nJKFhTU3fa0LEqoLEDcCmECBAgAABAgQIECBAgAABAgQI7E5AkLjhlCQ0rKnpe60+iyBxA7ApBAgQIECAAAECBAgQIECAAAECuxMQJG44JQkNa2r6XhMiVhUkbgA2hQABAgQIECBAgAABAgQIECBAYHcCgsQNpyShYU1N32v1WQSJG4BNIUCAAAECBAgQIECAAAECBAgQ2J2AIHHDKUloWFPT95oQsaogcQOwKQQIECBAgAABAgQIECBAgAABArsTECRuOCUJDWtq+l6rzyJI3ABsCgECBAgQIECAAAECBAgQIECAwO4EBIkbTklCw5qavteEiFUFiRuATSFAgAABAgQIECBAgAABAgQIENidgCBxwylJaFhT0/dafRZB4gZgUwgQIECAAAECBAgQIECAAAECBHYnIEjccEoSGtbU9L0mRKwqSNwAbAoBAgQIECBAgAABAgQIECBAgMDuBASJG05JQsOamr7X6rMIEjcAm0KAAAECBAgQIECAAAECBAgQILA7AUHihlOS0LCmpu81IWJVQeIGYFMIECBAgAABAgQIECBAgAABAgR2JyBI3HBKEhrW1PS9Vp9FkLgB2BQCBAgQIECAAAECBAgQIECAAIHdCQgSN5yShIY1NX2vCRGrChI3AJtCgAABAgQIECBAgAABAgQIECCwOwFB4oZTktCwpqbvtfosgsQNwKYQIECAAAECBAgQIECAAAECBAjsTkCQuOGUJDSsqel7TYhYVZC4AdgUAgQIECBAgAABAgQIECBAgACB3QkIEjeckoSGNTV9r9VnESRuADaFAAECBAgQIECAAAECBAgQIEBgdwKCxA2nJKFhTU3fa0LEqoLEDcCmECBAgAABAgQIECBAgAABAgQI7E5AkLjhlCQ0rKnpe60+iyBxA7ApBAgQIECAAAECBAgQIECAAAECuxMQJG44JQkNa2r6XhMiVhUkbgA2hQABAgQIECBAgAABAgQIECBAYHcCgsQNpyShYU1N32v1WQSJG4BNIUCAAAECBAgQIECAAAECBAgQ2J2AIHHDKUloWFPT95oQsaogcQOwKQQIECBAgAABAgQIECBAgAABArsTECRuOCUJDWtq+l6rzyJI3ABsCgECBAgQIECAAAECBAgQIECAwO4EBIkbTklCw5qavteEiFUFiRuATSFAgAABAgQIECBAgAABAgQIENidgCBxwylJaFhT0/dafRZB4gZgUwgQIECAAAECBAgQIECAAAECBHYnIEjccEoSGtbU9L0mRKwqSNwAbAoBAgQIECBAgAABAgQIECBAgMDuBASJG05JQsOamr7X6rMIEjcAm0KAAAECBAgQIECAAAECBAgQILA7AUHihlOS0LCmpu81IWJVQeIGYFMIECBAgAABAgQIECBAgAABAgR2JyBI3HBKEhrW1PS9Vp/luiCxtr/33ntXgWPV+/fvX/W/+MUvNvxkphAgQIAAAQIECBAgQIAAAQIECBC4HYG5IPHxxx8/PfbYYx9a7t27dzXWa/VZ6iesvtdpf7XxBv+49/LLL//fDb7fqrdKaFg7p+81IWLVBInpa326CBJXsduJAAECBAgQIECAAAECBAgQIEDgEQpcEiRWuJjQsPcZq8MQJLZvIyZQTJg4DRCzniCx1v/2t7/5RuIj/B+EjyZAgAABAgQIECBAgAABAgQIEJgXSJD4/PPPf/ANxHPfSEx4mJoAMbU+QZAoSJy/0owSIECAAAECBAgQIECAAAECBAjcaQFB4obTV980zCt9r/kmYup130is7flWYn0jseb9/Oc/z0eoBAgQIECAAAECBAgQIECAAAECBB65wLe//e2rbxHmG4lL30bMNxFT803E1DoY30ic+UZiBYP5NeaEigkO+3iNCRIf+f8m/AAECBAgQIAAAQIECBAgQIAAAQIzAj1InAsRa6zCwQoPsyQ4nNZ6e0HiNUHiNFScBoqvvvqqbyTOXKiGCBAgQIAAAQIECBAgQIAAAQIEHq1AgsQXXnjhg6CwAsNpqNjDxGmAmPU6kmGDxDr4/CrzXM03D6dBYo33MPH+/ftX31782c9+dnrmmWfqbb0IECBAgAABAgQIECBAgAABAgQIPFKBN9988/Td7373KkD83Oc+90GQOA0R86vM130jMSFiHdS5/qYP+N7LL7/837+w8Kbf/cz7VRiY17SfCxETHqYmVJzWChRfe+210zvvvHP68Y9/fPra176Wj1EJECBAgAABAgQIECBAgAABAgQIPDKB3/3ud6cf/OAHpyeffPL03HPPfehbiAkOUyscTKhY/dySgxkmSKwDTpg4DRFrW4WFCRBTpwFiX3/jjTdOb7311ukb3/jG6fvf/369hRcBAgQIECBAgAABAgQIECBAgACBRyrwk5/85PTrX//66jdo67doExieqz1IrH3qNQ0TM3a18f0/eqjYx2+if+TfSKyDmAsSM54gsYeIva/t/Veb69uIr7/++tXYj370o9NLL710E07egwABAgQIECBAgAABAgQIECBAgMAmgd/+9renH/7wh1ffQqxvIz7xxBMfBInTX21OgNi/jZi+PryHiVnvP9RwQWIdfIWFWRIm9lr9uaV+57y+lfjUU0+dvve9752+/vWvd089AQIECBAgQIAAAQIECBAgQIAAgY9E4De/+c3ppz/96enf//736ZOf/OTV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vj1jt1l3HSTWgfcgb67PWK+97+9xbjzA2X5uPeMqAQIECBAgQIAAAQIECBAgQIDAWALT0O7cesaX6tK2qGafWu99ti+N931ust99kFgH2wO+uT5j19X+Xtm3j1WfV9+eMZUAAQIECBAgQIAAAQIECBAgQGBcgblAr4+lTy2p9GtrnzPta72/8p597Db73QSJdZBL4V3fdl2f7an9vftYH6++XtPtD0Y//Ofa/T480wgBAgQIECBAgAABAgQIECBAgMAeBdYGc9P9zq338fTTWg4ZW+qnXn3OdNttre8qSKyDPBfQTcfPrffxNf0ln3lbJ8H7EiBAgAABAgQIECBAgAABAgQI7FvgXHA3He/r1/V9ex39desRmu6X8duuuwsS64B7ADgFmG7r672fvk/f1vu8/9xYtp2rW+acey/jBAgQIECAAAECBAgQIECAAAECj05gSzg3N6ePnevrKNdum4r0edNtt72+yyCxDnoppJvb1sd6f+69pvuc26/GvQgQIECAAAECBAgQIECAAAECBAh0gblAb81Y36f3ee+5sTXbss9t1t0GiXXQc2FfMOa2PczY0vtmm0qAAAECBAgQIECAAAECBAgQIEDg0rBvbv+1Y9Ge2z/bPqp6Z4PEAM2Fh7VtbnxuLO9zbk7fridAgAABAgQIECBAgAABAgQIECBQAtcFe3Pb58bWvNfafWq/23ztOkjMgV8XANZ+S/ssbbtubn4GlQABAgQIECBAgAABAgQIECBAgMBU4Fw4mP2Wti9tWzM/+3xU9U4EiYVxXRjYwa7b97rt/b30BAgQIECAAAECBAgQIECAAAECBNYKXBcOXre9f84l+/Z5t9XfmSAxAJeGgJfuv/VzMk8lQIAAAQIECBAgQIAAAQIECBA4psDWYO/SeZfu/1Fp37kgsWC2hoMPO/ejOik+hwABAgQIECBAgAABAgQIECBA4O4KPEwQ+DBzb1vsTgaJHeVhQsX+Pulv+v3yvioBAgQIECBAgAABAgQIECBAgMAxBG467Lvp97st5TsfJHYYIWDX0BMgQIAAAQIECBAgQIAAAQIECOxV4K6Eh93vUEFiPzChYtfQEyBAgAABAgQIECBAgAABAgQIPGqBuxgedrPDBon9IHsvYOwaegIECBAgQIAAAQIECBAgQIAAgZsWuOuB4TmP4YLEcxDGCRAgQIAAAQIECBAgQIAAAQIECBA4LyBIPG9jCwECBAgQIECAAAECBAgQIECAAAEC7wsIEl0KBAgQIECAAAECBAgQIECAAAECBAhcKyBIvJbIDgQIECBAgAABAgQIECBAgAABAgQICBJdAwQIECBAgAABAgQIECBAgAABAgQIXCvw/2958uRvjrpYAAAAAElFTkSuQmCC\" data-filename=\"Screen Shot 2016-02-28 at 8.20.34 PM.png\" style=\"width: 1035px;\"><br></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2016-02-29T00:54:28.660Z","status":"published","modified":"2016-06-21T03:32:10.529Z","order":201,"modified_at":"2020-08-10T14:04:22.001Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}},{"_id":"56c9fb03c0958c285a000030","slug":"install-and-deploy-content-ready-apps","title":"Install and Deploy Content-Ready Apps","content":"<p style=\"text-align: left;\"><span style=\"line-height: 1.42857;\">In an effort to make it easier to&nbsp;</span><span style=\"line-height: 1.42857;\">create <a href=\"https://www.cosmicjs.com/apps\" target=\"\">content-ready applications</a> as well as</span><span style=\"line-height: 1.42857;\">&nbsp;manage content, you can now install and deploy applications using Cosmic. &nbsp;It's the fastest and easiest way to go from 0 to content-ready web app (about 2 minutes!) without any server or configuration hassle. &nbsp;It's really cool and only requires a few steps:</span><br></p><p><span style=\"line-height: 1.42857;\">1.&nbsp;<a href=\"https://www.cosmicjs.com/login\" target=\"\">Sign in to your Cosmic account</a><br>2. Choose a bucket then navigate on the left sidenav to Settings &gt; Apps<br>3. Select your app and click \"Install\"<br></span><span style=\"line-height: 1.42857; text-align: center;\">4. Go to Settings &gt; Deploy Web App and click \"Deploy Web App\"<br><br></span></p><p style=\"text-align: center;\"><img src=\"https://www.cosmicjs.com/uploads/fffcf1c0-d97b-11e5-b608-d73fce26bef8-apps.png\" style=\"width: 100%; max-width: 600px; height: 405px\"><br><br></p><p><span style=\"line-height: 1.42857;\">In about 2 minutes your application will be deployed and connected to your Cosmic bucket. &nbsp;Add and edit content easily and review from the deployed location.&nbsp;<a href=\"https://www.cosmicjs.com/apps\" target=\"\">&nbsp;Choose from one of the provided apps</a>&nbsp;or add the link to the public git repo to clone your own app into deployment.</span></p><p>You can deploy your applications from any GitHub, BitBucket or any other public repo. Your application will be deployed to it's own isolated Docker container using&nbsp;<a href=\"http://dokku.viewdocs.io/dokku/\" target=\"_blank\">Dokku</a>, a Docker-powered mini-Heroku.&nbsp;<span style=\"line-height: 1.42857;\">This means that y</span><span style=\"line-height: 1.42857;\">ou can build your app in any language and easily deploy it from Cosmic! &nbsp;</span><span style=\"line-height: 1.42857;\">You can find out more about how to make apps Dokku compatible by reading&nbsp;</span><a href=\"https://devcenter.heroku.com/start\" target=\"_blank\" style=\"line-height: 1.42857; background-color: rgb(255, 255, 255);\">Heroku documentation</a><span style=\"line-height: 1.42857;\">.&nbsp;</span></p><p><span style=\"line-height: 1.42857;\">If you would like to contribute apps to be available on Cosmic, please contact </span><a href=\"http://mailto:support@cosmicjs.com\" target=\"_blank\" style=\"line-height: 1.42857; background-color: rgb(255, 255, 255);\">support@cosmicjs.com</a><span style=\"line-height: 1.42857;\">. &nbsp;Happy building!</span></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2016-02-21T17:59:31.599Z","status":"published","modified":"2016-06-21T03:32:51.486Z","order":202,"modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}},{"_id":"56c0e57617ae3b4447000003","slug":"new-feature-save-objects-as-draft","title":"New Feature:  Save Objects As Draft","content":"<p><span style=\"line-height: 1.42857;\"><a href=\"https://www.cosmicjs.com/signup\"><img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAvgAAABaCAYAAADNaSIvAAAKqGlDQ1BJQ0MgUHJvZmlsZQAASImVlwdQFFkax193Tw6kASQz5CQ5g+Q4ZMlgYpghDGEcZhhQREVlUcE1ICICiqJLEAXXAMgaEFFMi4Ai5h1kEVDWxYAJlW3kGG7v6u7q/lVf9a++fv29r1+/V/VvACjXmDxeGiwFQDo3kx/q406Pjoml40UAAhggAeyBKZMl4LmFhAQAVHPXv+v9PXQ0qjvGM7X+/f5/lTQ7QcACAApBOZ4tYKWjfBqNEywePxMAhI3mtbIzeTO8BWVZPtogypUznDTLJ2Y4fpY7v48JD/VA+T4ABAqTyU8CgPw7mqdnsZLQOhQMymZcNoeLshXKzqxkJjoPBb0HFqanr5zhgyjrx/9TnaS/1YwX12Qyk8Q8+y7fRfDkCHhpzNX/53L8b6WnCefm0ESDksz3DZ2ZD12zutSV/mLmxgcFzzGHPdvTDCcLfSPmmCXwiJ1jNtPTf46FqRFuc8zkzz/LyWSEzzF/Zai4PjctKEBcP4Eh5gSBV9gcJ3K8GXOckxweNcdZnMigORakhvnPj/EQ5/nCUHHPiXxv8TumC+Z7YzHn58pMDved7yFa3A87wdNLnOdGiMfzMt3FNXlpIfP9p/mI84KsMPGzmegGm+MUpl/IfJ0Q8foADggETMDKTFg1s6+Ax0reaj4nKTmT7oaekgQ6g8syWUi3MDO3AWDmzM1+0rf3v58lSJ4wnxPcBcBBF01y53PLCwBoswWA9sd8TjsX3YeHATjfxxLys2ZzM1sdYAEJSAJZoAjUgBbQB8bAAtgAR+AKvIAfCAbhIAYsByyQDNIBH2SDXLABFIAisBPsAeWgChwGdeA4OAlawDlwCVwFN0EP6AePgAgMg5dgArwHUxAE4SEqRIMUIXVIBzKCLCA7yBnyggKgUCgGioOSIC4khHKhTVARVAyVQ4egeuhn6Cx0CboO9UIPoEFoDHoDfYYRmALLwqqwLmwK28FusD8cDi+Dk+AMOAfOh7fDZXA1fAxuhi/BN+F+WAS/hCcRgJAReUQDMUbsEA8kGIlFEhE+sg4pREqRaqQRaUO6kDuICBlHPmFwGBqGjjHGOGJ8MREYFiYDsw6zDVOOqcM0YzoxdzCDmAnMNywVq4I1wjpgGdhobBI2G1uALcXWYM9gr2D7scPY9zgcTh6nh7PF+eJicCm4NbhtuP24Jlw7rhc3hJvE4/GKeCO8Ez4Yz8Rn4gvw+/DH8Bfxffhh/EcCmaBOsCB4E2IJXMJGQinhKOECoY8wQpgiShF1iA7EYCKbuJq4g3iE2Ea8TRwmTpGkSXokJ1I4KYW0gVRGaiRdIT0mvSWTyZpke/JiMoecRy4jnyBfIw+SP1FkKIYUD8pSipCynVJLaac8oLylUqm6VFdqLDWTup1aT71MfUr9KEGTMJFgSLAl1ktUSDRL9Em8kiRK6ki6SS6XzJEslTwleVtyXIoopSvlIcWUWidVIXVWakBqUpombS4dLJ0uvU36qPR16VEZvIyujJcMWyZf5rDMZZkhGkLTonnQWLRNtCO0K7RhWZysnixDNkW2SPa4bLfshJyMnJVcpNwquQq583IieUReV54hnya/Q/6k/D35zwtUF7gtSFiwdUHjgr4FHxSUFVwVEhQKFZoU+hU+K9IVvRRTFXcptig+UcIoGSotVspWOqB0RWlcWVbZUZmlXKh8UvmhCqxiqBKqskblsMotlUlVNVUfVZ7qPtXLquNq8mquailqJWoX1MbUaerO6hz1EvWL6i/ocnQ3ehq9jN5Jn9BQ0fDVEGoc0ujWmNLU04zQ3KjZpPlEi6Rlp5WoVaLVoTWhra4dqJ2r3aD9UIeoY6eTrLNXp0vng66ebpTuZt0W3VE9BT2GXo5eg95jfaq+i36GfrX+XQOcgZ1BqsF+gx5D2NDaMNmwwvC2EWxkY8Qx2m/UuxC70H4hd2H1wgFjirGbcZZxg/GgibxJgMlGkxaTV6baprGmu0y7TL+ZWZulmR0xe2QuY+5nvtG8zfyNhaEFy6LC4q4l1dLbcr1lq+VrKyOrBKsDVvetadaB1putO6y/2tja8G0abcZstW3jbCttB+xk7ULsttlds8fau9uvtz9n/8nBxiHT4aTDn47GjqmORx1HF+ktSlh0ZNGQk6YT0+mQk8iZ7hznfNBZ5KLhwnSpdnnmquXKdq1xHXEzcEtxO+b2yt3Mne9+xv2Dh4PHWo92T8TTx7PQs9tLxivCq9zrqbemd5J3g/eEj7XPGp92X6yvv+8u3wGGKoPFqGdM+Nn6rfXr9Kf4h/mX+z8LMAzgB7QFwoF+gbsDHwfpBHGDWoJBMCN4d/CTEL2QjJBfFuMWhyyuWPw81Dw0N7QrjBa2Iuxo2Ptw9/Ad4Y8i9COEER2RkpFLI+sjP0R5RhVHiaJNo9dG34xRiuHEtMbiYyNja2Inl3gt2bNkeKn10oKl95bpLVu17PpypeVpy8+vkFzBXHEqDhsXFXc07gszmFnNnIxnxFfGT7A8WHtZL9mu7BL2WIJTQnHCSKJTYnHiaJJT0u6ksWSX5NLkcY4Hp5zzOsU3pSrlQ2pwam3qdFpUWlM6IT0u/SxXhpvK7VyptnLVyl6eEa+AJ8pwyNiTMcH359cIIMEyQWumLGpubgn1hT8IB7OcsyqyPmZHZp9aJb2Ku+rWasPVW1eP5Hjn/LQGs4a1piNXI3dD7uBat7WH1kHr4td1rNdan79+OM8nr24DaUPqhl83mm0s3vhuU9SmtnzV/Lz8oR98fmgokCjgFwxsdtxctQWzhbOle6vl1n1bvxWyC28UmRWVFn3Zxtp240fzH8t+nN6euL17h82OAztxO7k77+1y2VVXLF2cUzy0O3B3cwm9pLDk3Z4Ve66XWpVW7SXtFe4VlQWUte7T3rdz35fy5PL+CveKpkqVyq2VH/az9/cdcD3QWKVaVVT1+SDn4P1DPoeaq3WrSw/jDmcdfn4k8kjXT3Y/1dco1RTVfK3l1orqQus6623r64+qHN3RADcIG8aOLT3Wc9zzeGujceOhJvmmohPghPDEi5/jfr530v9kxym7U42ndU5XnqGdKWyGmlc3T7Qkt4haY1p7z/qd7WhzbDvzi8kvtec0zlWclzu/4wLpQv6F6Ys5Fyfbee3jl5IuDXWs6Hh0Ofry3c7Fnd1X/K9cu+p99XKXW9fFa07Xzl13uH72ht2Nlps2N5tvWd8686v1r2e6bbqbb9vebu2x72nrXdR7oc+l79IdzztX7zLu3uwP6u+9F3Hv/sDSAdF99v3RB2kPXj/Mejj1KO8x9nHhE6knpU9Vnlb/ZvBbk8hGdH7Qc/DWs7Bnj4ZYQy9/F/z+ZTj/OfV56Yj6SP2oxei5Me+xnhdLXgy/5L2cGi/4Q/qPylf6r07/6frnrYnoieHX/NfTb7a9VXxb+87qXcdkyOTT9+nvpz4UflT8WPfJ7lPX56jPI1PZX/Bfyr4afG375v/t8XT69DSPyWd+twIIGnBiIgBvagGgxqDeoQcAksSsJ/4uaNbHfyfwn3jWN38X6lxq2wGYsWb+eQAcRK+6M5YUjRBXAMJdAWxpKY5/SJBoaTFbi9yCWpPS6em3qBfEGwDwdWB6eqplevprDdrsQwDa38968Rnh0D+URmQv60Ls7aDteeBf9BdcHwHcipHvPAAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAAZxpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NzYwPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjkwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CpMmY2sAAAAcaURPVAAAAAIAAAAAAAAALQAAACgAAAAtAAAALQAAGNkw61qVAAAYpUlEQVR4AeydB5QURbfHL+DCsiw5LjkJCooIIiqCYFZMmAMKhmd6PsM55vcMR49+6jOdY/7M6agYwCxiAFGUpyIG0pKWjAvIImlJy+tfYS21vT2zM9uzs7Mz9x6Wnu6pul31r+6q/711q6bWTk9ERRFQBBQBRUARUAQUAUVAEVAE0gKBWkrw06IdtRKKgCKgCCgCioAioAgoAoqAQUAJvj4IioAioAgoAoqAIqAIKAKKQBohoAQ/jRpTq6IIKAKKgCKgCCgCioAioAgowddnQBFQBBQBRUARUAQUAUVAEUgjBJTgp1FjalUUAUVAEVAEFAFFQBFQBBQBJfj6DCgCioAioAgoAoqAIqAIKAJphIAS/DRqTK2KIqAIKAKKgCKgCCgCioAioARfnwFFQBFQBBQBRUARUAQUAUUgjRBQgp9GjalVUQQUAUVAEVAEFAFFQBFQBJTg6zOgCCgCioAioAgoAoqAIqAIpBECSvDTqDG1KoqAIqAIKAKKgCKgCCgCikBUgr9hwwbhb8uWLVJSUqJoKQKKgCKQFgjUrl1b6tWrJ7m5ueavKiq1Zs0a4W/Tpk2yY8eOqriF6lQEFIEABOrUqSM5OTnSvHlz8xeQJPSllxevk5e8v+nriqVom/Kj0ICqgogINMmqLX0bZ8vojo1llPcXqwQSfMh8YWGhbN68OVY9mk4RUAQUgRqJQP369aVVq1YC6U+EQObnz58v69evT4Q61aEIKAIhEGjYsKF069ZNIP2JEMj8iKlLZeLqTYlQpzoUgbgQGNoiR8YObC+Q/ookkOCvXLnSkHss4EaNGhlPV6IGv4oKpN8rAoqAIpAMBHBgFBUVSXFxsUDy27Rpk5Db5ufnG3LfpEkTYzjQjyaKXCSkgKpEEcgABDCwly9fbqIQIPk9evRISK2Hfbt4F7nfuVOkVi1PJ3/eZxVFoKoR4DHzHjdI/teHdqzwbuUIPi/F6tWrzfRW69atK1SgCRQBRUARqMkIrFixwpD8Fi1aCEQgjBCSU1BQIJB7vIYqioAiUL0IzJkzx5D8zp07hw7XISTnwmkrPD5vyX311k3vnoEI/EPyX+yXZ0J2oiFQjuDbwQ5vFl4tFUVAEVAE0hkBPPnMWmZnZ0teXl6oqloygbcwrLEQqiCaWRFQBAwCOC2ZVWO9Tc+ePUOhMnTyYpm0RkNzQoGomROCwGHNc2Ti4Ohe/HIEf9GiRWZBbZcuXRJSCFWiCCgCikAqI8CaI/o9whA7deoUqqjTp083C2r79+8fSo9mVgQUgcQgwJoY3kvC5Pr27RtKadOP83VBbSgENXN4BHaFhBGDv3Z49LCzcgR/4cKF5v5K8MM3g2pQBBSBmoFAovq9n3/+2VRYCX7NaHctZWYgkKj3sta42ZkBmNayRiCw85S9opZTCX5UePRLRUARyAQElOBnQitrHTMVASX4mdry6V1vJfjp3b5aO0VAEUgAAkrwEwCiqlAEUhQBJfgp2jBarFAIKMEPBZ9mVgQUgUxAQAl+JrSy1jFTEVCCn6ktn971VoKf3u2rtVMEFIEEIKAEPwEgqgpFIEURUIKfog2jxQqFgBL8UPBpZkVAEcgEBJTgZ0Irax0zFQEl+Jna8uldbyX46d2+WjtFQBFIAAJK8BMAoqpQBFIUASX4KdowWqxQCCjBDwWfZlYEFIFMQEAJfia0stYxUxFQgp+pLZ/e9VaCn97tq7VTBBSBBCCgBD8BIKoKRSBFEVCCn6INo8UKhYAS/FDwaWZFQBHIBASU4GdCK2sdMxUBJfiZ2vLpXW8l+Ondvlo7RUARSAACSvATAKKqUARSFAEl+CnaMFqsUAgowQ8Fn2ZWBBSBTEBACX4mtLLWMVMRUIKfqS2f3vVWgp/e7au1UwQUgQQgoAQ/ASCqCkUgRRFQgp+iDaPFCoWAEvxQ8GlmRUARyAQElOBnQitrHTMVASX4mdry6V1vJfjp3b5aO0VAEUgAAkrwEwCiqlAEUhQBJfgp2jBarFAIKMEPBZ9mVgQUgUxAQAl+JrSy1jFTEVCCn6ktn971VoKf3u2bNrUrKiqSsWPHypYtW+Tkk0+WvLy8uOsWi45t27ZJVlZW3LqDMsybN08mTZokderUkbPPPluys7ODkqXEtZkzZ8qUKVMMrscdd5zUrl07JcqVKoWoSQT/xx9/lDvvvFP+/PPPSsGXm5sr/fv3l6uuukq6dOlSKR2aSRHwI7Bs2TJ57rnn5MMPPzR9Is9W9+7d5corr5S2bdv6kyf1PJ0IPj33qI6NZXDzHNm/Sbb0yK0ryzZvk/wNW+XVJevk7WXrpSSp6OrNqguBGkXwly9fLjNmzDADV0lJiSEhDRs2lDZt2kjHjh3NsVatWtWFZVred+fOnTJ//nzZuHFjufrtscceUr9+fWnSpIk0btzYdNrlEiXowooVK+SJJ54w2i655BLp3Llz3Jqj6dixY4c888wzwjN27LHHyqGHHhq3fn8GiNb7779vcLnxxhulQYMG/iQpc/7TTz/JuHHjpF27dnLZZZcpwfe1TE0i+Nddd51MnjzZV4P4T+vWrSsPPvigHHLIIfFnTkCO9evXm3r88MMPsmrVKtPX5OTkmL5+7733ln333df0PQm4VUqrwDHx7bffCv2tX7Zv324uMQZClumLU1FoQwzGIHnzzTdN2YO+S9a1dCH43Rtkycv928ohzepHhA6if+5Py+XnouKIaarzi36Ns+XuXi2kn2ec5NapLTt2inj/5O/tJbLEM1S+Wb1J/pW/RtZ75yrREagRBH/16tXy3nvvyeLFi6PWBs/rDTfcIAwCKolBAIL/6quvSn5+flSFeHxPPPFEOeCAA6QqjCy8kY899pgpQ2UJfjQdmzdvNmSGGQK8SZdffnloksugwawDHvxUJ/i2rErwgx/zmkTwMdBoTwxWPPH23F+zBx54QA4//HBzGQP3/PPPN+/5/fffL99//70x+OhTH3rooaSSfPqct956y7yP/jL7z6+//nozO+a/nk7n9L3nnntuTFU66aST5NJLLzXOrpgyJCFRcXGxnHLKKcI4jlx00UXSr18/mTt3rvz+++9y7733BhovSSha6S3SgeAPa5EjHx3cQXLqVOzk3OCR41OnLpMJq8o77kpBqYYPHx3UXo5rkysVzR9D9gdMLDCzEtVQzBpzy5Qn+HiOGYgYgKy0bt1amjZtasI17MDLd/Xq1ZObb765TIgFIRePPvqokGfkyJGhSZstg//466+/yttvv20G0w4dOvi/rrHndrD9448/YqpDjx49qgTnaOQ8poJ5iaLpgNjznHHca6+95LzzzgttqFjSrAQ/1haKnK5kZ4lMmTVFCtcWyqDeg6R1k9aRE1fBN7afCRuykigiEa2KltBXRPDt91aXPx/vw5gxY0x/mkyS/+KLL5bO1lE23p+DDz7Y9N2EvTHLZoVQpBNOOMGepuWRGdSzzjorrrph+Jx55plVNt7FUxjGxosvvthkiWSQMc7cfffd8tVXX5kQHmbmkymJei9rjZudzGKX3qvRHrXljyO6Sof65Wd5ShP5PkCSe06YLyu37OZWviRJPX3jgLZydvtGZe650XPfby/ZKfU8oyW79m7DZdXWHdLt8/nqxS+DVvmTlCf43333nXz66aem5IRlnH766WWmIQnV+fvvv03oDokGDRpUppY2LKMqPZOul7uy3uUyhU6hE5fg49mGBDDgIhhPTB/TOTKFbAVP/sCBA+1pQo7RyHmsN6hIBx6mNWvWmBAAQo/CihL8sAjuyg+5f2/KWJmxeIa5kJ2VLecfPlLaNkte3G4mEnzATjbJpy/HC71hwwbT1nh3mWVww1M2bdoks2fPNsYHhLFFixYmbbr+5xL8J598Ug488MAyVSWU6bfffpNHHnlECgoKSr8bPny43HHHHdVO8t955x257777hJAvQhZbtmxZWkb7AUceXn6OH3/8sXHg2e+ScazpBP+F/fPkwk6N44aKmPxJXsjLNd2aSdcGdWWuF77zxIK18tyiorh1hcnQPnsPmXlkV2noGSrIwk3b5I5Zq7w1A3+Xqj2qZQMZ0bahnJyXK9+t2Sxn/ris9Dv9EIxAShN8lzjjnb/ppptMJxFcleCr33zzjXz++efStWtXufDCC0N7ZYPu4np/IcDp6sHHewmGQQsw8ay99NJLBp5mzZrJNddcU2oIBGEW77WKyHks+hKhI5b72DRK8C0SlT9C7sdOGSd/LC47gwTJH3XEBdKmaZvKK48jZ6YSfCByST5e/z59+sSBXHxJ3XCUW2+9VU499dT4FKRhapfgP/vss7L//vsH1pLxkgWsd911V+n3hFsdccQRpefV8eGTTz6R22+/3ayhGD9+fGAILaE6jC04ViKlqcqy12SCX9/zbK8/sadEi8zZ6nnBIfPnd2gsdb30Fcn/zv1LbpxRWFGyhH1/hkfc3xjQztThL887v99XC2Vp8a71JQm7SQYqSmmCj4f44YcfFjwUEPTRo0cHksugdiMvO4MQu094D17nESNGlBJ84sR79epVxjOEHhZzLV26VPD840WCzLI4ktATyuCPLyc904p0UMiAAQPMgiEWPzG7QGiQ3SEAnStXrjRGCovEgogyOvBi2Jh3wkX83mTqs2jRIpkzZ47xOFMm1h00b95cOnXqZHZCwVtihY6fTpYFynvuuafxkFkvvE0T6eh68KPNgpDulVdeMXGV6HZjzhNRb5ecY0S1b9/eLP5l+hccwYRdavbbb7+IBparwz/TQvnBh+fGbTMXF2YrwHzJkiVCXCkY82xQFow6wsbc58Ml+ISOkZ7BGmPIeigbNWokvXv3jlhm//2nT59unk+ucy+eSQhXRQt4wWfWrFnmOeUz9cSTRiwsz6cta7Q2dsuSjM+RyL2995553eXcobHFJts8lT1mMsEHM4giIYg8b4TtVJV89NFHQtgNQqgOC2krI/S/9KH0y7xzeP1xErEYddiwYWUWdZL2iy++MLdhNoB1RNGEfsI+D8wu+Nd8MbuAp5r+BuH7oUOHmvvG2u+694+V4Ns87oJWNj/47LPPyoSt2sXLjE9HHXWUwQXPP2WmX9q6dasZ784555wyYxRjHXXnr7CwUOgz6XPpQw477LBy4xS40ldilOBkQ6699lpp1aqVGRspGzO99OH33HOPUAZ/GnSQJsjrbxIn6L+aTPAPbJotUw/rHBEJyP0Z/7dMPli5QU7y4tvfPrBdhSSf5at9vlwgM9Zvjag3kV883qe1/GfXpkblLO+evbx7V0ZYoPtf3ZqaBbqt6tWRLG+MZJEu4UgTCjfKlb+uLFXLbAFhQU3r1pEtHkaXT18ZNab/f3o2lxPa7Aod++zPDXLn7F1rSqzC23q2kJEdGknrervCpFgYzKLgfxcUyePerEh1SEoTfDoQVtjToUBer7766pi8wpAXdn+AKEcSSCEzApYYQeoZUPDGRxI80yy+tB263XkkUnquDxkyRI4++miTZOrUqaVbhLkE2J/fhhVxHa9Gt27dSpMQf/r8889HLaefYLvEFkXxbEtGG7DgjRj8isgfoVSEVDGQstjZbguZiHq7dWDgYVDAgAuSvn37GmPOP5i6OvwE352FcdsM/WBA3dhGMprgKYM8WLGkmYWKlPndd9+N+Ex29sLPWCNiMbM6OHJ/njUG4EjCAsmePXsGfo1hgueVgT1IeD4xItFfURsH5a+KaxWRe+55QPf+MnzA8Kq4fTmdltClUww+nvmgRbb+2HzAgGgROgOxY7cljNqqEJfMsqie2Pt4xTUSIuU944wzhPAe+gjGC8IKCdFji1AIcdB7iC5IMbMKjBe8MzhObLw4GGEIsbA+SEj/+uuvmxDAoO8jXXMxiebBt/npL3AofPnll+YS5PmYY46xXxvDh0W7OBzwltO38Sy4wkJYxglk7dq1Biv63EiCLrbAxGmG4IA67bTTIiU319nxB2PKGleREgeFJUVKW9nrNZngX9a5iTzdN3gm0yX3FptYST6E9xmPnCZDXA/+ks3bpeP4eXHf9gfPyBnoGTvRZIU3K3Dkd4tlpmdEQPDnHdVNMASQpxcWyRWOAeDXs+iY7tLxnzUOr3uhQyN/3rUWCD0TD+1ojAp/Hns+3jMujp2yxJ4m7ZjyBJ/Octq0aQYQOqnBgwdXCA4eSqYq8URgHHCO7LPPPqUeCa7h0bcduUv+IP90VOy1jucH0moFjxKLl/CeLliwwOw2Qdwoe/wieGTxcjEQMHCQ3k5pW8LnJ+BWtz26ZXGJKCSUBcOWqOEJoU6UBeKPhxbxx8ozcJHPiqvTXot0jJXgu+n89Qtbb8rmYuKWFe8RRhq74ECCrUDERnszPi7Jd3X4MaCt7GzRkUceKUM9j5uVX375xZBze8498fTh7YL4YZAhfmPM1tvm48izRQwtzwlkCY+8FabeIQ/uLAC4MlBPnDjRJjMeM+7PvdmJwgoGAjM+rmDkUi9ruIIHBgxGKh5ONz/5qpLgb9vh/cZAnSy3eIGfIffjvLCc331hOW7i9s3by8hh50m9rHru5Sr7XJMJfrzbZr722mvlniOA9S/CrQqwXWIIIcYopp+LR1yCD/E8/vjjjUGCZ90lk+4CXWYlLMl9+umnI3rxXbLN+4ZHGoHc06fYzQh4zyDRvGeQaOudpjzMKjOTEKu494yF4KMXMm4Xtl5xxRWln/nO6qMso0aNMh52rlNm1rAx3uJMs+FR/l1wIOX0VaTnWbGzka5xxEw1Tja89PSDGEQIzhdbd2ZK6ccYo8EtKA3OCZ5f18llFCX4P8qIsOtUGKmORbaP7NtKrvVi6P0SRO5tmlhIPltpvrF0dwy8zVsVx+Gtc+V9bwcdG2Y0dsV6s8tPPPf6fkgnOeif7UHxnhd6i4fXbtthPOpNs3bF9qNv6tpiOWhSAR/lpX555jcD+Dxv4zbZ01t0HCRu+bZ5yg+aWCDT1hUbI2H6sC7e+oXd45q9b1tvXYFdU4BOZhCOTjLJT2mCDyiuN5tzQmXYpzyWTt8lnZBuCJhLntBnhbQTJkwwISzsqU/nZQUC/9RTTxlizXW/990l0NFi8C3hC9Jh78UxEhF1scDIsIaDzYvRAtFHvw0L4juX5OFNxnNlZy5s3khHF8No5M81Pvwx+GHrTdlcTDjH+MJrDVG2wmDAALhu3TpziQHWepS44OqIleBTfxt6xD3xbEE8XAFfjD3u5T43tt42LYYBC9+Y4bDCtDeEAvzIS9tYjyBp3DbH48WgTSiQFe77wgsvmFP0+neRsrMqJODdYSaBZ8AKhIr81giO1sY2T7zHdRvXyZhvx0jhulUypPdgGez9RZJUJPeUtSYT/Fh/+ArjE+OWha1BkgyCz/sGobOL9nknbrnlFuOB9r93QWXkGg4QvL7sPEPIotvn4wRgFhbhfWXWlntASO1uPBxZnOrmMxm8/5jdoI9BXEPILiTlOmEvt912W+lML3XCc2+dLMyY4VUP0k9+v1hCzvVYCT6knFkJvO/8pge7INm+ydVn70W/w6yGTWOv2yMLXxFCcSDyVjBsWCtBmCoSVD4bg49BgYFlZ8CtDo6xpHHTJ/pzTST4TTzSiuf+rHa7x0CLSzRyb9NEI/mEtbT8JN8jyCU2eZUff/GIct/Gu8dGPPmPL/hLHvDWA8Qio70f97q3V0sZ4/2Q123eAl13n/x3vbCkU704f2SzV7m+Xy804Thdc7JktufFz/KWJVDToZMXyWRvAa9fMD7AC/nFI/b9vi4wn//t4f8f3gwKst3D7F/5q+X2WbtDd94b2E5G5O26L/pP+WGpfOiFSiVLUp7gA4T9wSAXFKx/vKzElFsvvPs9n+lYbYhPWOJCLCehKnSAfhIWjTi6ZbKEDx1+I8FNF0mf9SSTHyIX64CHbjzcEF9IYiS83DLYz2BoQ3QiGUnoxitlZxCY9rdT/+gJW290uJhEM1IwxhjMIKz+mQxXR6wEP5pnn3JFE1tv0kRboGyfLdK55QJ7cKXdIV94CzGe/ELMLV5L5IILLjBEns/u3v5B5J80CAM+RAcJ+54YJc5/kPuXv3xZ1m4sKr06pPcQGdZnaOm5/ZCq5J7y1WSCb/ENe0wGwaeMGOp4xyHdrmDQYyDzg06VFd4ptmP84IMPzCwFGwOwQw/XrWEBEYVw+n80yvVk4wTC609eZnnxduPoCYp5p6zoxyvO7wvE68V3CXkQgQ7Cwi2ra8iQ1tXHuTuTwXm8Qpw9s+FIUDgNoX9gTr0j7ZATS5p4yxVP+ppG8CGk4wd1FPa+90ss5N7miUTy8VI/s3Ct2VFntrezTjKEnXSmHd5FWnox8a6w6BbSzaJffqSrMuKG4xR78faDJi0yHnh0uYYFv/Lr352HvPOP7mbK5cEit8xYJffPXWO88/Y6eu71fnzrv2eu4mMZwcO/3z+Gy6d/bpTjv09eqE5FBP//AQAA//+qxSNIAAAdtUlEQVTtnQeYVcXZx196Z5civTcVUBHshWKLJdbYokbR2I3G+EVjEvXzsyRGYzeWzwb2aIzYGyi2x44oRgGRJmHBAMtSl7ZkfrPOZe7Zc+69u/fc3bPJ+z7P7mlT3vnPOTP/eeeduQ02GxFP5syZY6/69u3r3S386bx58+Shhx6SdevWVcls9OjRsvfee0uzZs3SnqH6X//6V/nyyy+le/fuctZZZ0nDhg3TwuR6sWzZMrnpppts8NNPP1369OmTirp48WK5/fbbQ5+lApmTTz/9VJ555hlp1KiRXHLJJdKqVSv/ceo8Kr2SkhL5y1/+YsMNGjRIjjnmGGnRokUqXiFOfAybNGkiJ598ssWQMpSVlcmMGTNkypQpqaypg4svvliaN2+eupdvuUnIx2SXXXaRww47LJW+f4K+f//73+Wzzz6rgrOfRrAON2zYYOt35cqVst9++wnvFEJ6Dz/8sMycOdOW+4QTTpBtttnGPsv2z5WbcMcff7wMHTo0NMr3338vt912m33m64VOf/7zn2X16tWy6667yqGHHhoan3q44YYb7LN9991XxowZY8/99+WQQw6R3XffPTQ++dxyyy22PvP9TvwMNm7aKHe+dJeUrir1b9vzkUNGypjtR6fuV2yukAnvT5Bp875M3Que9OjQQ04ac6I0a5L+nQfDFeI6rnaPdwIZMWJEIdS0adLOkc8999wTaz6FSjcMCNp52tQnnniiyuMBAwbY9nP48OFVnuVy45VXXpHLLrtMmjZtKi+++KK0a9fORnvvvffkl7/8pT3/05/+JHxLvtDOnXnmmfbW7373OznqqKPs+bfffivHHXecPaePGDlypB8tdT558mT59a9/ba/vvvtu2WmnnVLPMp346d97772y4447Zgpun61Zs0YOP/xwKS0tlb322ktuvPFG2x7y0E+Ptmz8+PGpZ1kTDgmwadMmoX1ZsmSJnHPOOfLzn/88LdSzzz4rV199tcX7pZdekuLi4rTnXOQSpkqkGG/E9V02mDA9Rq2ik7pq245y+dYdQwOMn18mY6eUhD4LuzlueFc5pVdR2CPZYNjfaVMWyiPfrQh9HvfNNo0byqQ9e8nO7bbwB5cHRPTDZWvlmI/+KQvKN7rbOR/fG9lb9mjfQkjngi8Wyx2zK/slcARPpMSk2+2VWfbc/Tu3b7HcvkMXgTmWbaiQoZNm2/wP6dxant2thzRqEB7Pxb9s6w5y9bZb2ctZqzfIwNe/dY8Kftx8RGau0sAQHPBISVwdXSrBapzQkMydO1c+/vhjS9r9qBDO8847Tzp16pS6jeo1IfiQvBUrVsj69euFPDdu3GgJ5uuvv27T9kkYNzIRx5Qy5sQRvpoSfDo9iCCEzglElI4irNF0YfI5+hhmS6d3797y05/+VFq3bp0WNN9yk5iPMR3XzjvvnJaHf+HnR4fapk0b+9hPI1iHUQSfiF988YU8+eSTqSy6dOkiBxxwgPTv3z9jx+j0YFB5wQUXSMeO4Q1ylF50mBBvhAHlPvvsY9/JlCLmpHHjxrJ27Vr7nnPfH5x88sknMmHCBBscctazZ097Hvzn13GcBH/O4jny0BsPB7NLXY8yJH+0IflJJ/coHFe7xzuBKMG3MGT9x7dBu3vffffJqlWr0sKfdNJJ9ruKMtrQdjN4xjjDN1JeXm4H7G+++aY899xzVQgnA+kjjjjCkmLalzvuuCP1ffONQFJdPI7ue3755Zfl8ssvt7qdeuqptj2m7/AF48isWbNS33OuRJ00fEKeazzKSlloQwYPHiwPPvhgqix+erSPGB9yFfrGRYsWCQMIMKXdpD/6wx/+YNsmJfiFJ/itDKP87sCB0q5JbsbK/5u+RK40f06u3Kaj/K/5y1UggEd8sECeW5T+/eUavybhjunWRi4c0F52LGouLWDQnqzetFnO/KxEHlsQPugY3KapHNe9rfRp2URamwFDy0YNpaFJYphJq1OzRpbgn/f5IrlrznKbaqemjWT6/v0tnpT1dJP2A/O2cKzJe/WSUR1b2rAvGgx+bLBAbhzaSS4yOiLo9Pr3q01e6bpuqNgsbZs0kr07VBpiv1m1XgZNnG3j1Ma/ekXwfUBojOksX3vttdRtGlEs486qXR3iQmeApZ+GO2yWIJWJOQmSwyiC5sfh3BG+mhJ80qCBHTdunCW8XDvp3Lmz/OhHP5KBAwdKgwbpL5kLU5Ojj2FYfDpXLEpYmLt16xYWJJZy+xhnIqsogPX+6aeftrr4deWn4d8nYCaCz3MGlViZgsLMEWUPG2C5+g6+l8E0ovTy7wfjRF37BN/ln+19o46xlP7jH//Ie6bL1yuTBd+Fg+QvW10q0+ZOc7eqHOvScu+UUYIvdgaUdyrumQGHcaYj7+jnn38ut956q0ybtuVdCSOotJF/+9vfBDIcJNp+HljwgxZlDCjMFPPN8L0zmEcw+DBryCBj//33l2uvvTY1G+ysz37a2c5zJeqk4xPyXOP5BD84WPHTY+A0bNiwbOoKxgJmj33swyIpwS88wT+4cyt5cfdwY01YneRL8EkTy/OQid/K+jRzb1hu8d+7bshWcmqvYkvOXeorNlbIzpPnykxDmJ2MNbMQlw7qIINaN5VMDIgi+ASf+C8ZPA8yuCIT/7Va9n/vO3veo3lj+Wq/fsLMQoW5c/SHC+SZksqBzh3bd5bz+rWz4XL9pwQ/V6R+CAfRv/POO1NWbd8VwSenmSyTWCJo2OkYnNDADxkyxLrRQNCWLl1qCRDPg+TQJ2LBZy49jrkSrmzpUS4IxzvvvCPffPONn4UUFRVZ/dy0c9rDGlz4GLZv397OkpBMRUWF7eDoJLMNKOIodzZM/KLhTkMnjfj1kSmNbASftNygctKkSXZmh3tODjzwQNlzzz3TsMi33L6+DKSYncJyFiXohx7OFSfX/Klj3BZwUcj0nUTlm+l+2eoyGT9pvJSurrSWZAob9iwJ5B696jPBZ3B65ZVXVjEKhOHt3+OdY8CIdRapTRcdX4/g+QsvvGDLw31mC59//vnULB0ugyeeeGJalH79+sn2229vDT/M5mEUYiY4jODTduCGh/iDB9+9hv4GN0EnPsHHqk+6zPpGCX3J/fffH+myF4znE/JcCb4fJ0i6/WfZ0qOdv+qqqwTMndA30sYwI+jK+uijj9rHwby46fAJw9ulmUsYF7YQR9pKJN+Ztdpw0bnAkMpbDbnMVeIg+OQ15t35MnlJdP+Tqz41DTfeuBKd7LkSPWis7KcZazty745d5PTexWlJrzfW81LjUrPR9G/lxsLes0VjaWpM+WEEnxmDx3fubt1tfDcc331nzpoN0u+1Le41QYK/zuTXKINxFeP+tBXrZIc35qTpWciLemvB90FhChbLDlZ434Lpk9Mo4kIY/OKdHzm+7QcddJCdfvWJa2364DtiRhl9guqX2Z0zKEF35z7E/TA/eBe+ukcfQ9ZdMAUdNSUelbYrTzZLsgtHOsFy+2T3lFNOsTMV2fLj+fnnny/MbiB+GsH0cyH4NhHzj/ds/vz5lih8913lSJ9nQdchV55s5Y7Sy/ehZ73FDjvs4FTI6ehcdMj/V7/6VegsAwlRx4Ww4Dsla0ryk0LuKUd9JvjUPcaAmsojjzxi150kheBTDlzX0AvS6PzosVofffTR1oWEMJBNvknnSsM9xPfBD1rwIbTHHnusHQD06tXLuua57+fdd9+1Awri+2uMmC247rrrrNUfVz5cFeOU6hByl6/Dh+tLL73U4uKeVSc9+pXf/va3NiqzGQz2cPnBNdAJ7aH64FeiURsE/6w+xXL3sMqZJVcHmY5xEXys3nf+4NaSKb9CPsM/f5+tKt1lnvrnSjn2439ay/tzu/WUxj+Y7bGS3zN3udw4a1maKr4PftCCT8C5B/SX3sathwHAlV8vkatmLJHPxvQ1rj3NbDp3zik1lv/F9px//2/q4AxTF8h7Zm3AXm/Ps+dJ+vcfQfCjyJlPTqMIPu44LIzC+omFmkVWNOhBYWoSf34kSA6jCFowjVwJ34cffmitUmF5BdN01+hPR4e/OMJiWAYr+UouGGbLI45y+xiPGjXKTpNH5fvGG28If0Fi7acRrMOodygqD3d/+vTp8vjjj1vS36FDB+sT7N6fXMsdpReDNzpq3lFmBxh4Vke++uoreeyxx2wUBmasGQiTQhN88qwuyU8SuUf/+kzwa0rMg/GC1+BSVwIxv+KKK9IIvm99h+hDbIPCu+770gcJPuGdNZlzyDuzohBY3H1OO+00Offcc3mUEr5zsEEyLbJNRajmSXUIOUmzIcVPfvITmwsDIH+9ADdzTQ+sGBwysKFNY/MC+tGg+PmpBb/wLjq7mAWoH47qE6yGyOu4CP7ZUxdZ4hyZUS088P3eHcH3iXbYIlnUwsVmlvGzD/PBd2r7Fvkpy8vlcONr/60h/Vj9y411fsSbc+SrlVtcgv7H+N9fb/zwWQmxYO1G6flq+uJcl25dHv8jCD4uNuw2AhHydxHxySnTtGPHjq1iffaJHT7s+FQHhXR8K3+QHPoEjYY+ajFjLoSPvPBxXbCgciFHMK+gbv41JP/666+3ZJMGPpfdFvz4Yec+hlGDpLB4/r04yu1jHCTSfl5Yk+hkWfjFTAbT7G5Nhp9GEFf/PfBngfy0o86Zvp84caLND1KBSxeSS7kJF6UXZeG9hugHByvEyyb+It1MOw/5309N6zibLjzPleQnjdyjuxL8EYlx0aE+WDSKT7hvwfeJK8+32247gqYJ3/mRRx5prfxRLiN8N/jbQ+j5njH8sLYLgfCz4N0Xn+AGF7T64Wp67pcrm0sN/QZtG2VA6I/OOOOMtKxzTY+2n92CsOIH/fj9BH0rf74En7YaQ1Xbtm39LAp+TluN1AcXnRaGcC45ZFCVBZ1RIN1udoth1xgntxn3nvOr6TtO3F3fmisflZa7ZOrk+PhO3eT4HpXvhiP4PjF/1Oz2c9KnC6votqfZPWfy3r2tlT/MRYcI/Yz1/mvjbw+hx03n4e/K5Bc/4ES5Kb8vpPmWSRPXG9L0d+bxw9XleaIJPo0x23xttdVWab7NPmA0QiyonDp1qr3tu2/wzG1xGCR7Lg3fgh81CGD3Axa2OgmSQ9+Vwl8D4MK7o2+ZD7pzuDC+1ZV7fl74dUL6KEuYLF++XG6++WYbxt+WERwgoSyi3Hbbbe02irm62RC3JjsR+frlW27S8kkw12xRF7ZNHtYmptCRoKXfT8PHlbCZCD4Dp5YtW0a+g5B78A3OAOVL8NHLX9zLjAy7FLkBBM99gajjOuBcy6g7XNdcZ09HH3QfIAxrCtAfKSTBJ/1sJD+J5B69leDXDsGHoOInj9U8SmjHaOcR50aDy4hvwWcm9mc/+1laErzr+L6zRSUSRfAJ54gtfQLfFO1y1JaShGcgwHeEQHKx9Lvv0N70/tGeRG2R7AVLnfqEnP6MNjwoGAEwQrntdnnO+gR2+HEGDhfHTy/TgMEvF2mw1iG4mQA76tDXuB2OakrwnZsTOjqXMKdvbRzrE8EHDwg6RL22ZK7xP9/G7P6Cn3khhK0oOzZtbN1iotKHbN+yXecUob7i63/JNTOWprnKfG0s7IMnpe9Sg/X+09F9ZKBZfItEEXyefWRmRtiikzCQ/GKzUxHnF3/5fRWXH8J/YtIdUVy5pScLf481W3i+anbTCRMWAT+9cKWsNOFqSxJN8B1xpsHH/xjLCQ0/BAeyS2dAAwZJR2iEaGidiwT3IC4QMIQdZiDWdAY0sixEJS2fBGHpZB9jGn8IEwQL0uhLkBz6lnOIMw0eHY8j5FicEd+iyjWWYiwG6Ete77//vnzwwQc8Somfl8ODfY1p5NEfso+lCV9wBjpggQ4XXnihJZwk5O+zzrXvl851JqGRz5fg51tu9PPJudOX3WtwXaEDBuu33347hR+YBv3O/TR8XEkviuBTfkgB9cPsTo8ePVJkn501PvroI2EAgwSt5HEQfF8v8qBcuB+gB4M96pv6xTVr9uzZVX5fIThg5P3n3eEdgRS8+uqrlhiRNlJogk8eUSQ/qeQenZXgF57g861hcWZNEW0cf7T5rp2GTOJS4y/4xPeddhShnXGWd675PQ6e0d4vXLjQzoz6bXkUwScu33XQFeeaa66xi9h5HhTfis8z+hryx2+dtglDFbu0PfXUU/bb4+j3U8H0/GufkB988MGyxx572DTp75ippM/AJdEX2gfaLdf3+M/89DIRfOIwGGKnHYQyseCWxf60S/St4O9LTQk+baVzc2Jgctddd9m1U7SxXAfXUfh5xnFe3wh+A1PoiXtu8UePA4OoNCC4+xR4ge1U4+u+g/F1ZwDBYGKW8aMvWbdRlq+vkG5mcexu7VpIv1aVM+Po+a/1m6S/WfAKWb5kYHu5bkin1M45X5iFrOPMAtxV5tkeZnvKo8wC2raG5DvJRPBxu7nBuN2ArxM/L3fPHf298LlH2u8sXSNvm8XIzU0f29Fsy7mNGVgMadvMbtlZ21b+ekHwHZiZjjSWZ599tnTt2jUtGFZt3BzCxPkl0zjT0GUSdidhoRpkPkgOicdAg11IgkIDizUJQkUH5nYrCYbzr7HUYo1C/LwcwffDhp0HLddBgu3KHRY3eC8Ogp9vudHJkXPqGSLNYCiTYEHD+uaLS4N7Pq5c+zM5vosOurtZIMJFCXoFBxRxEHzyg4izcwfHTIIOwR9QQ3/fQh8Wn3jsGMUgoTYIPjoESX6SyT36KsGvXYIP5tmEffAxVvD+OnGuO+46eIQU008w0wnBdwt0g+H8bSZ5limsi8s2nsEfeXLP/CPGn5oSfD+dsHOwYFEsP4rn4+KHrQ7Bp/9kP31noffTcefsOsRaJAZm2Qh+FN4sbmZW1rmmurQ50l/xGzeFlPpG8MGC/fBvGNpZzjHW70IJJPnCaYvlfm9f+ELk5Qh+LmnjD/8Ls+DX12m6ca3Z+gcLfVgaEO+vVq6TIW2aWRIeRbSx9rPYtr3ZG9+JcwVy18HjxWaA8cfBnezMQvCZf40OUfn64eI8TzTBh3RhHcWaQkMTJvjq4TuPvyUkOkwgdiyEhOj64vvLOwt4MAw7sGD1xK+erRfZlhLLTnDPd4gUP6AStKQE3X4Ih1WVBUuUzxfywkLDbjX8MimEzs8LKzKzEc5i7MflHGsXaxCCvzJMOgxysPjS6AdJYDAd/xp9nQWfgQedahTOfrzgeT7lJi03SAFPGnw6KRaPsbuRL7ig0FGEWa5cGoT3655rLFIsaMUixmAO66ETOi8sh8G8eA4WDKiwqkEefHELs5klYi1A1LR8Jr1cetQdu+KgB+dBwVKIzmwHGFY/uJnxDQTfOeqUGQHu82uXNd0pKahPLtcr1qyQt758y/wybXMZNXRknfxCbS56EkYJfuEJPjjjasnC8GA7yjMnWOlxvwm2czynnWFWCktzcA989q+/6KKL7AwcpJVv3t9i06Xvjg888IAdWHPNN/Kb3/wm0u3GxaGtJR5GgTDhG2Ubz0w/1BeM5xPy4DOuadOZyaTv4Bhsh4Jx/NmGqLUKfhzaJ3bPYYbUFwY9v//97+0CZOqMtU/MWrhf9XVh3bamwS1N3XN3pI9nRsDNuLv7/nal7l7cx/pI8B0G+5pdZU7oUSQ7FjezBBYf8nyE7SVZTPrJ8rXyR+MCM9tY1Ast1w5mr/si6WL2nY/S3v2Y1MnGxz7o5gIxf3mPnvaXaoPxlxlr/w3fLDPlWC+P7dTdfMP8Om+J8Iu/YfLULt3laGP1R/gl333fnWes8mvDgqbuDTc/onXf8C72x7SC+ROImQkW7vILw/7e/akECnSSaILvl5nGmAabI1OuEBIaMnyjcxUaEMgPvpG4dYT5MtNA00lgUaABq0766IGOWDuIS17oGOaLSR7k5YQy5ZoXukH2fSwgj5QpSsiLhpqpTvfLrlFhC3k/n3KH6cWMCoQXTMCQTqRQwjvnCDL5Ub9gGVa/hdKBfJm2BkdnoeMdC3uXgzoQhwEMevPu4N5VSLyC+dfn6/pE8PPdFjNbPdWGjzTfNN82lnS+Lzeopf3iO88muMXQ3vGuExc3n0ztY7b0qvucdgLXOb4xvlm+T9xLc9G9unnVVnjcjKgP2h3+WHNUiLaPfOjfqC/wizKMxFnu+kzw48QhCWmxJ32/Vk2tRdxsX29cWxrY/eOfNNtiZpPtjSsMLjkQ6uZmoPOJIdXP1+Iv8PIruseYX9Fly841RnnI/mdl5fLy4nC//Gzlyfd5vSH4+RZU4ysCioAiUFME6hPBr+kPW2XDBrKM+5r74ats4fW5IlBfEFCCX19qSvWsDgJK8KuDloZVBBSB/0oE6hPB/6+sIC20IpAHAkrw8wBPoyYWASX4ia0aVUwRUASSgoAS/KTUhOqhCMSPgBL8+DHVFOseASX4dV8HqoEioAgkHAEl+AmvIFVPEcgDASX4eYCnUROLgBL8xFaNKqYIKAJJQUAJflJqQvVQBOJHQAl+/JhqinWPgBL8uq8D1UARUAQSjoAS/IRXkKqnCOSBgBL8PMDTqIlFQAl+YqtGFVMEFIGkIKAEPyk1oXooAvEjoAQ/fkw1xbpHQAl+3deBaqAIKAIJR0AJfsIrSNVTBPJAQAl+HuBp1MQioAQ/sVWjiikCikBSEFCCn5SaUD0UgfgRUIIfP6aaYt0joAS/7utANVAEFIGEI6AEP+EVpOopAnkgoAQ/D/A0amIRUIKf2KpRxRQBRSApCCjBT0pNqB6KQPwIKMGPH1NNse4RUIJf93WgGigCikDCEVCCn/AKUvUUgTwQUIKfB3gaNbEIKMFPbNWoYoqAIpAUBJTgJ6UmVA9FIH4ElODHj6mmWPcIKMGv+zpQDRQBRSDhCCjBT3gFqXqKQB4IKMHPAzyNmlgElOAntmpUMUVAEUgKAkrwk1ITqociED8CSvDjx1RTrHsElODXfR2oBoqAIpBwBJTgJ7yCVD1FIA8ElODnAZ5GTSwCSvATWzWqmCKgCCQFASX4SakJ1UMRiB8BJfjxY6op1j0C1Sb48+bNk4qKCunbt2/da68aKAKKgCJQYARo72j3GjZsKL17984rt6lTp8qmTZtkxIgReaWjkRUBRSAeBPge+S4bNWokw4YNyyvR4hdmStnGirzS0MiKQH4INDDRN0tR44ay/MeDMibVYLMRP0RJSYmUl5dLly5dpEWLFv4jPVcEFAFF4D8OgbVr18qiRYukefPm0rVr17zKN2PGDFm1apUMGjRI2rRpk1daGlkRUATyR2DlypUyc+ZMad26tWy99dZ5JTj6nfny1tI1eaWhkRWBOBAY1aGlTN67V8akqhB8PoYlS5ZIy5YtpXPnzhkj60NFQBFQBOo7As6o0bFjx7xJ+dKlS2Xu3LlSXFws/fv3r+/QqP6KQL1HAHIPr+nTp4906NAhr/KMm18mp04pMWlgF8WSqqII1A0CDw7vKmN7FWXMvArBJ7Tr8CD5RUVF0rRpUzt9nTElfagIKAKKQD1CgJnK0tJSO2MZh/XeFd1Z8SH5GEmYCcU9QEURUARqDwFm0hYuXGjJfRzWe6f5Fiu+I/mVLhPuuR4VgUIjkIv1Hh1CCT4+qYsXL7YdX6EV1fQVAUVAEahLBCD3EHF88OMQfH5nzZplXXXiSE/TUAQUgZojALkfMGBAbIPs5Rsq5IgPFqirTs2rRGPmgQDkfsJuPaS4Sfb+KpTgu7yZ1mIUvH79ervw1t3XoyKgCCgC9RkByDwzk3T+hfKVx10Hd0d8/CH9KoqAIlA7CDBjxswZbnf5uuVEaYy7zrh5ZTK1rFwX3kaBpPdjQYAFtcOKmsvY3kVZ3XL8DDMSfD+gnisCioAioAgoAoqAIqAIKAKKQPIRUIKf/DpSDRUBRUARUAQUAUVAEVAEFIGcEVCCnzNUGlARUAQUAUVAEVAEFAFFQBFIPgJK8JNfR6qhIqAIKAKKgCKgCCgCioAikDMCSvBzhkoDKgKKgCKgCCgCioAioAgoAslHQAl+8utINVQEFAFFQBFQBBQBRUARUARyRkAJfs5QaUBFQBFQBBQBRUARUAQUAUUg+QgowU9+HamGioAioAgoAoqAIqAIKAKKQM4IKMHPGSoNqAgoAoqAIqAIKAKKgCKgCCQfASX4ya8j1VARUAQUAUVAEVAEFAFFQBHIGYF/AwrbLtMC+GXvAAAAAElFTkSuQmCC\" data-filename=\"Screen Shot 2016-02-14 at 3.09.34 PM.png\" style=\"width: 378px; height: 44.7632px;\"></a></span></p><p><span style=\"line-height: 1.42857;\">Cosmic is on a mission to be the easiest way to manage content for your websites and applications, the latest update includes the ability to save your Cosmic objects as a draft. &nbsp;This means you can continue to perfect your content privately and when it's ready to publish, simply click \"Save\" and the object will then be published and available on your bucket's API endpoints. &nbsp;</span></p><p><span style=\"line-height: 1.42857;\">This is another feature we've added in response to feedback we're getting during the Cosmic private beta release. &nbsp;</span><span style=\"line-height: 1.42857;\">We'll keep rolling out updates in response to feedback, so please keep the feedback coming!</span><br></p><p>If you have not signed up,&nbsp;<a href=\"https://www.cosmicjs.com/signup\" target=\"\">sign up now for Cosmic</a>&nbsp;and join us during the private beta release as we continue to build out the best content management platform to handle needs for your websites and applications.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2016-02-14T20:37:10.799Z","status":"published","modified":"2016-06-21T03:33:00.784Z","order":203,"modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}},{"_id":"568acdf86cfdd5ce3e000043","slug":"easy-cosmic-js-browser-example","title":"Easy Cosmic Browser Example","content":"<p>It's now faster and easier to make the content on your webpages dynamic. &nbsp;The <a href=\"https://www.npmjs.com/package/cosmicjs\" target=\"_blank\">Official Cosmic JavaScript Client</a>&nbsp;now comes with a minified browser version that allows you to add the power of Cosmic cloud-hosted content into your HTML page with a single file. &nbsp;<a href=\"https://raw.githubusercontent.com/cosmicjs/cosmicjs-node/master/cosmicjs.browser.min.js\" target=\"_blank\">Download the Cosmic browser file</a> then copy and paste this real-working browser example into an html file to check it out:</p><pre class=\"prettyprint prettyprinted\" style=\"line-height: 1.42857;\"><span class=\"dec\">&lt;!DOCTYPE html&gt;</span><span class=\"pln\">\r\n</span><span class=\"tag\">&lt;html&gt;</span><span class=\"pln\">\r\n</span><span class=\"tag\">&lt;head&gt;</span><span class=\"pln\">\r\n  </span><span class=\"tag\">&lt;title&gt;</span><span class=\"pln\">Cosmic Easy Browser Example</span><span class=\"tag\">&lt;/title&gt;</span><span class=\"pln\">\r\n</span><span class=\"tag\">&lt;/head&gt;</span><span class=\"pln\">\r\n</span><span class=\"tag\">&lt;body&gt;</span><span class=\"pln\">\r\n</span><span class=\"tag\">&lt;h1</span><span class=\"pln\"> </span><span class=\"atn\">id</span><span class=\"pun\">=</span><span class=\"atv\">\"title\"</span><span class=\"tag\">&gt;</span><span class=\"pln\">If you see this, something isn't working...</span><span class=\"tag\">&lt;/h1&gt;</span><span class=\"pln\">\r\n</span><span class=\"tag\">&lt;div</span><span class=\"pln\"> </span><span class=\"atn\">id</span><span class=\"pun\">=</span><span class=\"atv\">\"content\"</span><span class=\"tag\">&gt;&lt;/div&gt;</span><span class=\"pln\">\r\n</span><span class=\"tag\">&lt;div</span><span class=\"pln\"> </span><span class=\"atn\">id</span><span class=\"pun\">=</span><span class=\"atv\">\"metafields\"</span><span class=\"tag\">&gt;&lt;/div&gt;</span><span class=\"pln\">\r\n</span><span class=\"tag\">&lt;script</span><span class=\"pln\"> </span><span class=\"atn\">src</span><span class=\"pun\">=</span><span class=\"atv\">\"cosmicjs.browser.min.js\"</span><span class=\"tag\">&gt;&lt;/script&gt;</span><span class=\"pln\">\r\n</span><span class=\"tag\">&lt;script&gt;</span><span class=\"pln\">\r\n</span><span class=\"kwd\">var</span><span class=\"pln\"> config </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"pun\">{</span><span class=\"pln\">\r\n  bucket</span><span class=\"pun\">:</span><span class=\"pln\"> </span><span class=\"pun\">{</span><span class=\"pln\">\r\n    slug</span><span class=\"pun\">:</span><span class=\"pln\"> </span><span class=\"str\">'easy-browser-example'</span><span class=\"pln\">\r\n  </span><span class=\"pun\">},</span><span class=\"pln\">\r\n  object</span><span class=\"pun\">:</span><span class=\"pln\"> </span><span class=\"pun\">{</span><span class=\"pln\">\r\n    slug</span><span class=\"pun\">:</span><span class=\"pln\"> </span><span class=\"str\">'home'</span><span class=\"pln\">\r\n  </span><span class=\"pun\">}</span><span class=\"pln\">\r\n</span><span class=\"pun\">};</span><span class=\"pln\">\r\n</span><span class=\"typ\">Cosmic</span><span class=\"pun\">.</span><span class=\"pln\">getObject</span><span class=\"pun\">(</span><span class=\"pln\">config</span><span class=\"pun\">,</span><span class=\"pln\"> config</span><span class=\"pun\">.</span><span class=\"pln\">object</span><span class=\"pun\">,</span><span class=\"pln\"> function</span><span class=\"pun\">(</span><span class=\"pln\">err</span><span class=\"pun\">,</span><span class=\"pln\"> res</span><span class=\"pun\">)</span><span class=\"pln\"> </span><span class=\"pun\">{</span><span class=\"pln\">\r\n  </span><span class=\"kwd\">var</span><span class=\"pln\"> object </span><span class=\"pun\">=</span><span class=\"pln\"> res</span><span class=\"pun\">.</span><span class=\"pln\">object</span><span class=\"pun\">;</span><span class=\"pln\">\r\n  document</span><span class=\"pun\">.</span><span class=\"pln\">getElementById</span><span class=\"pun\">(</span><span class=\"str\">'title'</span><span class=\"pun\">).</span><span class=\"pln\">innerHTML </span><span class=\"pun\">=</span><span class=\"pln\"> object</span><span class=\"pun\">.</span><span class=\"pln\">title</span><span class=\"pun\">;</span><span class=\"pln\">\r\n  document</span><span class=\"pun\">.</span><span class=\"pln\">getElementById</span><span class=\"pun\">(</span><span class=\"str\">'content'</span><span class=\"pun\">).</span><span class=\"pln\">innerHTML </span><span class=\"pun\">=</span><span class=\"pln\"> object</span><span class=\"pun\">.</span><span class=\"pln\">content</span><span class=\"pun\">;</span><span class=\"pln\">\r\n  </span><span class=\"kwd\">var</span><span class=\"pln\"> metafields </span><span class=\"pun\">=</span><span class=\"pln\"> object</span><span class=\"pun\">.</span><span class=\"pln\">metafields</span><span class=\"pun\">;</span><span class=\"pln\">\r\n  </span><span class=\"kwd\">var</span><span class=\"pln\"> images </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"str\">''</span><span class=\"pun\">;</span><span class=\"pln\">\r\n  metafields</span><span class=\"pun\">.</span><span class=\"pln\">forEach</span><span class=\"pun\">(</span><span class=\"kwd\">function</span><span class=\"pun\">(</span><span class=\"pln\">metafield</span><span class=\"pun\">){</span><span class=\"pln\">\r\n    images </span><span class=\"pun\">+=</span><span class=\"pln\"> </span><span class=\"str\">'&lt;h2&gt;'</span><span class=\"pln\"> </span><span class=\"pun\">+</span><span class=\"pln\"> metafield</span><span class=\"pun\">.</span><span class=\"pln\">title </span><span class=\"pun\">+</span><span class=\"pln\"> </span><span class=\"str\">'&lt;/h2&gt;'</span><span class=\"pun\">;</span><span class=\"pln\">\r\n    images </span><span class=\"pun\">+=</span><span class=\"pln\"> </span><span class=\"str\">'&lt;img width=\"300\" src=\"https://www.cosmicjs.com/uploads/'</span><span class=\"pln\"> </span><span class=\"pun\">+</span><span class=\"pln\"> metafield</span><span class=\"pun\">.</span><span class=\"pln\">value </span><span class=\"pun\">+</span><span class=\"pln\"> </span><span class=\"str\">'\"/&gt;'</span><span class=\"pun\">;</span><span class=\"pln\">\r\n    images </span><span class=\"pun\">+=</span><span class=\"pln\"> </span><span class=\"str\">'&lt;br&gt;&lt;br&gt;'</span><span class=\"pun\">;</span><span class=\"pln\">\r\n  </span><span class=\"pun\">})</span><span class=\"pln\">\r\n  document</span><span class=\"pun\">.</span><span class=\"pln\">getElementById</span><span class=\"pun\">(</span><span class=\"str\">'metafields'</span><span class=\"pun\">).</span><span class=\"pln\">innerHTML </span><span class=\"pun\">=</span><span class=\"pln\"> images</span><span class=\"pun\">;</span><span class=\"pln\">\r\n</span><span class=\"pun\">});</span><span class=\"pln\">\r\n</span><span class=\"tag\">&lt;/script&gt;</span><span class=\"pln\">\r\n</span><span class=\"tag\">&lt;/body&gt;</span><span class=\"pln\">\r\n</span><span class=\"tag\">&lt;/html&gt;</span></pre><p><a href=\"https://www.cosmicjs.com/login\" target=\"\">Sign in to your Cosmic account</a> and connect this example to one of your buckets to see how easy it is to create powerful CMS-powered websites and app<span style=\"line-height: 1.42857;\">&nbsp;</span><span style=\"line-height: 1.42857;\">with Cosmic.</span></p><p><span style=\"line-height: 1.42857;\"><br></span></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2016-01-04T19:54:32.580Z","modified":"2016-06-21T03:33:11.067Z","status":"published","order":204,"modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}},{"_id":"568a94306cfdd5ce3e000041","slug":"new-add-user-roles-to-your-cosmic-js-bucket","title":"New! Add User Roles to Your Cosmic Bucket","content":"<p><img src=\"data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/4QMvaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzA2NyA3OS4xNTc3NDcsIDIwMTUvMDMvMzAtMjM6NDA6NDIgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0QUIyMjM3REFBOEMxMUU1ODdFOEFENTlFNEYzODZEOSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo0QUIyMjM3RUFBOEMxMUU1ODdFOEFENTlFNEYzODZEOSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjRBQjIyMzdCQUE4QzExRTU4N0U4QUQ1OUU0RjM4NkQ5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjRBQjIyMzdDQUE4QzExRTU4N0U4QUQ1OUU0RjM4NkQ5Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJ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O21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AO21ukvuu9ADttbpL7rvQA7bW6S+670AUXccjJN5Pc3m7FBzoqf+sk85YROY32UAmGcxRkAAAAAAAAAwk5gIXJ+ypBFbL/dt78Ez7ZwlV9IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQNz/vR/wCCg+0kLCJrG+ygEwzmKMgAAAAAAAAGEnMBC5P2VIIrZf7tvfgmfbOEqvpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogO4vogfW4Pl9kDsrYbRU9UCbo0ODTkAmq8XCiFHWnMAAAAAAAAAAAMHN1A0SV0d5AOd9Fq+Qg1rj2+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YB3e3zAO72+YAmPb5gNjKLU8hR0R10aB0NboBkAAAAAAAAAAAADRAPnCgDgQBwIA4EAcCAOBAHAgDgQBwIA4EAcCAOBAHAgDgQBwIA4EAcCAOBAHAgDgQBwIA4EAcCAOBAHAgDgQBwIA4EAcCAOBAHAgDgQBwIA4EAcCAOBAHAgDgQBwIA4EAcCAOBAHAgDgQBwIA4EAcCAOBAHAgDgQBwIA4EAcCAOBAHAgDgQBwIA4EAcCAOBAHAgDgQBwIA4EAcCAOBAHAgDgQBwIA4EAcCAOBAHAgDgQBwIA4EAcCAOBAHAgDgQBwIA4EAcCAOBAHAgDgQBwIA4EAcCAOBAHAgDgQBwIA4EAcCAOBAHAgDgQBwIA4EAcCAOBAHAgDgQBwoA4UA+6IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//Z\" data-filename=\"user-roles.jpg\" style=\"width: 553.597px; height: 325px;\"><br></p><p>Cosmic now gives you the ability to add different user roles to your bucket. &nbsp;The different roles available are:</p><p><span style=\"font-weight: bold;\">Admin</span><br><span style=\"line-height: 1.42857;\">Has access to settings, users and developer features.</span></p><p><span style=\"line-height: 1.42857;\"><span style=\"font-weight: bold;\">Developer</span><br></span><span style=\"line-height: 1.42857;\">Has access to developer features and editor features.</span></p><p><span style=\"line-height: 1.42857;\"><span style=\"font-weight: bold;\">Editor</span><br></span><span style=\"line-height: 1.42857;\">Can add, edit and delete content with developer features hidden.</span></p><p><span style=\"line-height: 1.42857;\">As an Admin or Developer, this makes it easier to share Cosmic with the Editor on your team. &nbsp;For the Editor role, the powerful developer features are hidden and allows them to focus on their job of managing content. &nbsp;</span><a href=\"https://www.cosmicjs.com/login\" target=\"\">Sign in to your Cosmic account</a><span style=\"line-height: 1.42857;\"> to add your team and collaborate on building something great, now even easier.</span></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2016-01-04T15:48:00.083Z","order":205,"modified":"2016-06-21T03:33:59.930Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}},{"_id":"56820f43ddcf72c93b000019","slug":"building-a-cms-powered-app-in-the-browser-in-2-minutes","title":"Building a CMS-Powered Browser App in 2 Minutes","content":"<p>In this short tutorial I'll show you how easy it is to add a CMS to a simple browser app using<span style=\"line-height: 1.42857;\">&nbsp;the&nbsp;</span><span style=\"line-height: 1.42857;\">Cosmic API. &nbsp; It will literally take you 2 minutes to build. &nbsp;Our app will consist of just 3 files:<br></span></p><p><span style=\"line-height: 1.42857;\">1. index.html<br></span>2. app.js<br>2. package.json</p><p>Let's get started shall we? &nbsp;In your terminal of choice run the following commands:<br></p><pre>mkdir easy-browser-example<br>cd easy-browser-example<br>npm install cosmicjs<br>npm install browserify -g</pre><p></p><p>Now let's build our index.html file. &nbsp;Run the following command in your terminal:<br></p><pre>vim index.html</pre><p></p><p>Add the following to our index.html file:</p><pre class=\"prettyprint prettyprinted\"><span class=\"dec\">&lt;!DOCTYPE html&gt;</span><br><span style=\"line-height: 1.42857;\"><span class=\"tag\">&lt;html&gt;</span><br></span><span style=\"line-height: 1.42857;\"><span class=\"tag\">&lt;head&gt;</span><br></span><span style=\"line-height: 1.42857;\"><span class=\"pln\">&nbsp; </span><span class=\"tag\">&lt;title&gt;</span><span class=\"pln\">Cosmic Easy Browser Example</span><span class=\"tag\">&lt;/title&gt;</span><br></span><span style=\"line-height: 1.42857;\"><span class=\"tag\">&lt;/head&gt;</span><br></span><span style=\"line-height: 1.42857;\"><span class=\"tag\">&lt;body&gt;</span><br></span><span style=\"line-height: 1.42857;\"><span class=\"pln\">&nbsp; </span><span class=\"tag\">&lt;h1</span><span class=\"pln\"> </span><span class=\"atn\">id</span><span class=\"pun\">=</span><span class=\"atv\">\"title\"</span><span class=\"tag\">&gt;</span><span class=\"pln\">If you see this, something isn't working...</span><span class=\"tag\">&lt;/h1&gt;</span><br></span><span style=\"line-height: 1.42857;\"><span class=\"pln\">&nbsp; </span><span class=\"tag\">&lt;div</span><span class=\"pln\"> </span><span class=\"atn\">id</span><span class=\"pun\">=</span><span class=\"atv\">\"content\"</span><span class=\"tag\">&gt;&lt;/div&gt;</span><br></span><span style=\"line-height: 1.42857;\"><span class=\"pln\">&nbsp; </span><span class=\"tag\">&lt;div</span><span class=\"pln\"> </span><span class=\"atn\">id</span><span class=\"pun\">=</span><span class=\"atv\">\"metafields\"</span><span class=\"tag\">&gt;&lt;/div&gt;</span><br></span><span style=\"line-height: 1.42857;\"><span class=\"pln\">&nbsp; </span><span class=\"tag\">&lt;script</span><span class=\"pln\"> </span><span class=\"atn\">src</span><span class=\"pun\">=</span><span class=\"atv\">\"app.browser.js\"</span><span class=\"tag\">&gt;&lt;/script&gt;</span><br></span><span style=\"line-height: 1.42857;\"><span class=\"tag\">&lt;/body&gt;</span><br></span><span style=\"line-height: 1.42857;\"><span class=\"tag\">&lt;/html&gt;</span></span></pre><p><span style=\"line-height: 1.42857;\">We could just as easily use jQuery and Ajax to render our content, but for this example we will use the <a href=\"https://www.npmjs.com/package/cosmicjs\" target=\"_blank\">official Cosmic Node.js package</a>. Now create a file called app.js:</span></p><p><span style=\"line-height: 1.42857;\"></span></p><pre>vim app.js</pre><p></p><p><span style=\"line-height: 1.42857;\">And add the following to app.js:<br></span></p><pre class=\"prettyprint prettyprinted\"><span class=\"com\">// app.js</span><br><span class=\"kwd\">var</span><span class=\"pln\"> </span><span class=\"typ\">Cosmic</span><span class=\"pln\"> </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">require</span><span class=\"pun\">(</span><span class=\"str\">'cosmicjs'</span><span class=\"pun\">)</span><br><span style=\"line-height: 1.42857;\"><span class=\"kwd\">const</span><span class=\"pln\"> bucket </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"pun\">{</span><span class=\"pln\"> slug</span><span class=\"pun\">:</span><span class=\"pln\"> </span><span class=\"str\">'easy-browser-example'</span><span class=\"pln\"> </span><span class=\"pun\">}</span><br></span><span style=\"line-height: 1.42857;\"><span class=\"kwd\">const</span><span class=\"pln\"> </span><span class=\"kwd\">object</span><span class=\"pln\"> </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"pun\">{</span><span class=\"pln\"> slug</span><span class=\"pun\">:</span><span class=\"pln\"> </span><span class=\"str\">'home'</span><span class=\"pln\"> </span><span class=\"pun\">}</span><br></span><span style=\"line-height: 1.42857;\"><span class=\"typ\">Cosmic</span><span class=\"pun\">.</span><span class=\"pln\">getObject</span><span class=\"pun\">({</span><span class=\"pln\"> bucket </span><span class=\"pun\">},</span><span class=\"pln\"> </span><span class=\"kwd\">object</span><span class=\"pun\">,</span><span class=\"pln\"> </span><span class=\"pun\">(</span><span class=\"pln\">err</span><span class=\"pun\">,</span><span class=\"pln\"> res</span><span class=\"pun\">)</span><span class=\"pln\"> </span><span class=\"pun\">=&gt;</span><span class=\"pln\"> </span><span class=\"pun\">{</span><span class=\"pln\">\r\n  </span><span class=\"kwd\">var</span><span class=\"pln\"> </span><span class=\"kwd\">object</span><span class=\"pln\"> </span><span class=\"pun\">=</span><span class=\"pln\"> </span></span><span style=\"line-height: 1.42857;\"><span class=\"pln\">res</span><span class=\"pun\">.</span><span class=\"kwd\">object</span></span><span style=\"line-height: 1.42857;\"><br></span><span style=\"line-height: 1.42857;\"><span class=\"pln\">&nbsp; document</span><span class=\"pun\">.</span><span class=\"pln\">getElementById</span><span class=\"pun\">(</span><span class=\"str\">'title'</span><span class=\"pun\">).</span><span class=\"pln\">innerHTML </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">object</span><span class=\"pun\">.</span><span class=\"pln\">title</span><br></span><span style=\"line-height: 1.42857;\"><span class=\"pln\">&nbsp;&nbsp;document</span><span class=\"pun\">.</span><span class=\"pln\">getElementById</span><span class=\"pun\">(</span><span class=\"str\">'content'</span><span class=\"pun\">).</span><span class=\"pln\">innerHTML </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">object</span><span class=\"pun\">.</span><span class=\"pln\">content</span><br></span><span style=\"line-height: 1.42857;\"><span class=\"pln\">&nbsp; document</span><span class=\"pun\">.</span><span class=\"pln\">getElementById</span><span class=\"pun\">(</span><span class=\"str\">'metafields'</span><span class=\"pun\">).</span><span class=\"pln\">innerHTML </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"str\">'&lt;pre&gt;'</span><span class=\"pln\"> </span><span class=\"pun\">+</span><span class=\"pln\"> JSON</span><span class=\"pun\">.</span><span class=\"pln\">stringify</span><span class=\"pun\">(</span><span class=\"kwd\">object</span><span class=\"pun\">.</span><span class=\"pln\">metafields</span><span class=\"pun\">,</span><span class=\"pln\"> </span><span class=\"kwd\">null</span><span class=\"pun\">,</span><span class=\"pln\"> </span><span class=\"lit\">2</span><span class=\"pun\">)</span><span class=\"pln\"> </span><span class=\"pun\">+</span><span class=\"pln\"> </span><span class=\"str\">'&lt;/pre&gt;'</span><br></span><span style=\"line-height: 1.42857;\"><span class=\"pun\">})</span></span></pre><p>Notice that in our app.js file we are returning content from the Cosmic API, and then attaching our content to the DOM elements at \"title\",\"content\" and \"metafields\".</p><p>Next we'll add a package.json file that will allow us to add some simple scripts to \"browserify\" our app.js file:</p><pre>vim package.json</pre><p>Add the following to a new file titled package.json:</p><pre class=\"prettyprint prettyprinted\"><span class=\"pun\">{</span><br><span class=\"pln\">&nbsp;&nbsp;</span><span style=\"line-height: 1.42857;\"><span class=\"str\">\"name\"</span><span class=\"pun\">:</span><span class=\"pln\"> </span><span class=\"str\">\"easy-browser-example\"</span><span class=\"pun\">,</span><br></span><span style=\"line-height: 1.42857;\"><span class=\"pln\">&nbsp; </span><span class=\"str\">\"main\"</span><span class=\"pun\">:</span><span class=\"pln\"> </span><span class=\"str\">\"app.js\"</span><span class=\"pun\">,</span><br></span><span style=\"line-height: 1.42857;\"><span class=\"pln\">&nbsp; </span><span class=\"str\">\"scripts\"</span><span class=\"pun\">:</span><span class=\"pln\"> </span><span class=\"pun\">{</span><br></span><span style=\"line-height: 1.42857;\"><span class=\"pln\">&nbsp; &nbsp; </span><span class=\"str\">\"browserify\"</span><span class=\"pun\">:</span><span class=\"pln\"> </span><span class=\"str\">\"browserify app.js -o app.browser.js\"</span><br></span><span style=\"line-height: 1.42857;\"><span class=\"pln\">&nbsp; </span><span class=\"pun\">}</span><br></span><span style=\"line-height: 1.42857;\"><span class=\"pun\">}</span></span></pre><p><span style=\"line-height: 1.42857;\">Now let's run our our scripts to bundle our code into the browser. &nbsp;Run the following script which will bundle the new file to app.browser.js:<br></span></p><pre>npm run browserify</pre><p></p><p><span style=\"line-height: 1.42857;\">Now view the index.html file in your browser and you will see that the content from our example bucket \"</span><span style=\"line-height: 20px;\">easy-browser-example\" can be seen and the metafields data is rendered to a string to show you what data is available. &nbsp;</span><span style=\"line-height: 1.42857;\">Taking this a step further, you can see how powerful this can be if you add React or Angular into the mix.</span></p><p><span style=\"line-height: 1.42857;\">I hope you enjoyed this short tutorial. &nbsp;If you have not already, you can </span><a href=\"https://www.cosmicjs.com/signup\" target=\"_blank\" style=\"line-height: 1.42857; background-color: rgb(255, 255, 255);\">sign up for a Cosmic account</a><span style=\"line-height: 1.42857;\">, and begin playing with this example using content from your own bucket. &nbsp;Thanks and happy building!</span></p><p><br></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2015-12-29T04:42:43.159Z","modified":"2016-06-21T03:34:16.729Z","order":206,"status":"published","modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}},{"_id":"5640c5ddadbc98b75b00004c","slug":"new-starter-buckets","title":"New Starter Buckets!","content":"<p>It's now easier to get started using Cosmic as your content platform. &nbsp;After signing in, click \"Add new bucket\" and you will see that you now have the option to install a starter bucket. &nbsp;</p><p>After you click \"Install\", your starter bucket will be imported to a new bucket and your app zip file will be downloaded to your machine. &nbsp;At that point you can extract the files and configure your new app to connect to your new Cosmic bucket. &nbsp;</p><p>This is meant to help familiarize you with how to set up your bucket to best manage content for your websites and apps. &nbsp;<a href=\"https://www.cosmicjs.com/login\" target=\"\">Sign in and enjoy</a>!</p><p>Screenshot:<br><img src=\"data:image/png;base64,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IpCPBGSE5aNUlScREAEREAEREAEREAEREIHYEpARFlvRKGEiIAIiIAIiIAIiIAIiIAL5SEBGWD5KVXkSAREQAREQAREQAREQARGILQEZYbEVjRImAiIgAiIgAiIgAiIgAiKQjwRkhOWjVJUnERABERABERABERABERCB2BKQERZb0ShhIiACIiACIiACIiACIiAC+UhARlg+SlV5EgEREAEREAEREAEREAERiC0BGWGxFY0SJgIiIAIiIAIiIAIiIAIikI8EZITlo1SVJxEQAREQAREQAREQAREQgdgSkBEWW9EoYSIgAiIgAiIgAiIgAiIgAvlIQEZYPkpVeRIBERABERABERABERABEYgtARlhsRWNEiYCIiACIiACIiACIiACIpCPBGSE5aNUlScREAEREAEREAEREAEREIHYEpARFlvRKGEiIAIiIAIiIAIiIAIiIAL5SEBGWD5KVXkSAREQAREQAREQAREQARGILQEZYbEVjRImAiIgAiIgAiIgAiIgAiKQjwRK8zFTmebp9OnT1tbWZolEIlMvBe+uoqLCamtrbfr06ddkIa7XRJP2RiZ80wYiB7EloLqRvWgyqRPimj3XyEcmfCO3+hx/BFQ3spdZJnVCXLPnGvnIhG/kNt8/C9YIYwXq6Oiw+fPnW2VlZb7L+brlr7u721paWjy8oQwxcR0Z6nR8Rxa6fN9IAqobudFPVyfENTeuka90fCN3+hx/BFQ3cpNZujohrrlxjXyl4xu5K4TPgp2OyBGw2bNnywDLspTTYCU38hvqENehqGR+LR3fzEOSy7gRUN3ITSLp6oS45sY18pWOb+ROn+OPgOpGbjJLVyfENTeuka90fCN3hfBZsEYYpyCyIOjIngC5XWsKp7hmz/NKH8PxvdKtvo8fAqobuctquDohrrlzjXwOxzdyo8/xR0B1I3eZDVcnxDV3rpHP4fhGbgrhs2CNsEIQrvIoAiIgAiIgAiIgAiIgAiIQPwIywuInE6VIBERABERABERABERABEQgjwnICMtj4SprIiACIiACIiACIiACIiAC8SMgIyx+MlGKREAEREAEREAEREAEREAE8piAjLA8Fq6yJgIiIAIiIAIiIAIiIAIiED8CMsLiJxOlSAREQAREQAREQAREQAREII8JyAgbgXCff/55W7Jkif/xXIcIiIAIjCYB6ZzRpKuwRUAE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iIAIiIAIZEdARlh2vORaBERABERABERABERABERABEZEQEbYiPDJswiIgAiIgAiIgAiIgAiIgAhkR0BGWHa85FoEREAEREAEREAEREAEREAERkRARtiI8MmzCIiACIiACIiACIiACIiACGRHoGCNsIqKCuvu7s6Ollw7AXIjv6EOcR2KSnbXhuObXUhyHScCqhu5S2O4OiGuuXONfA7HN3Kjz/FHQHUjd5kNVyfENXeukc/h+EZuCuGzYI2w2tpaa2lpkSGWZSlnxSE38hvqENehqGR+LR3fzEOSy7gRUN3ITSLp6oS45sY18pWOb+ROn+OPgOpGbjJLVyfENTeuka90fCN3hfBZWgiZHCqP06dP98snTpywRCIxlBNdG4IAe4CogCJ+VzqJrovrlWQy+56Ob2ahyFUcCahu5CaVdHVCXHPjGvlKxzdyp8/xR0B1IzeZpasT4pob18hXOr6Ru0L4LFgjjMJlRYoqUyEIe6zyKK5jRVrxjDcCqhujIzFxHR2uCnX8E1DdGB0ZiuvocC20UAt2OmKhCVr5FQEREAEREAEREAEREAERiAcBGWHxkINSIQIiIAIiIAIiIAIiIAIiUCAEZIQViKCVTREQAREQAREQAREQAREQgXgQkBEWDzkoFSIgAiIgAiIgAiIgAiIgAgVCQEZYgQha2RQBERABERABERABERABEYgHARlh8ZCDUiECIiACIiACIiACIiACIlAgBGSEFYiglU0REAEREAEREAEREAEREIF4EJARFg85KBUiIAIiIAIiIAIiIAIiIAIFQkBGWIEIWtkUAREQAREQAREQAREQARGIBwEZYfGQg1IhAiIgAiIgAiIgAiIgAiJQIARkhBWIoJVNERABERABERABERABERCBeBCQERYPOSgVIiACIiACIiACIiACIiACBUJARliBCFrZFAEREAEREAEREAEREAERiAcBGWHxkINSIQIiIAIiIAIiIAIiIAIiUCAEZIQViKCVTREQAREQAREQAREQAREQgXgQkBEWDzkoFSIgAiIgAiIgAiIgAiIgAgVCQEZYgQha2RQBERABERABERABERABEYgHgYyMsIqKCuvu7o5HipUKERCBcUeA+oN6JNNDOidTUnInAiIwFAHpnKGo6JoIiMBoEchW5zAdGRlhtbW11tLSIkNstCSncEUgjwlQMVF/UI9kekjnZEpK7kRABK4kIJ1zJRF9FwERGE0CuegcpqdoAEcmCTt9+rS1tbVZIpHIxLnciIAIiIAT4KgWjarp06dnRUQ6JytcciwCIpAkIJ2joiACIjCWBHLVORkbYWOZGcUlAiIgAiIgAiIgAiIgAiIgAvlKIKPpiPmaeeVLBERABERABERABERABERABMaagIywsSau+ERABERABERABERABERABAqagIywgha/Mi8CIiACIiACIiACIiACIjDWBGSEjTVxxScCIiACIiACIiACIiACIlDQBGSEFbT4lXkREAEREAEREAEREAEREIGxJiAjbKyJKz4REAEREAEREAEREAEREIGCJiAjrKDFr8yLgAiIgAiIgAiIgAiIgAiMNQEZYWNNXPGJgAiIgAiIgAiIgAiIgAgUNAEZYQUtfmVeBERABERABERABERABERgrAnICBtr4opPBERABERABERABERABESgoAn8P5LBT0BBpZn9AAAAAElFTkSuQmCC\" data-filename=\"Screen Shot 2015-11-09 at 10.07.36 AM.png\" style=\"line-height: 1.42857; width: 865px;\"></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2015-11-09T16:12:13.924Z","order":207,"modified":"2016-06-21T03:33:29.281Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}},{"_id":"5625cf1a2047fbdf4500001f","slug":"helpful-resources-and-examples","title":"Helpful Resources and Examples","content":"<p>Did you know that we have some great resources available over on <a href=\"https://github.com/cosmicjs\" target=\"_blank\">our GitHub page</a>? &nbsp;Use these packages, examples and clients to help you build your next big project or contribute to an existing one.</p><h3>Tools</h3><h3><img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVQAAAFUCAIAAAD08FPiAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDY3IDc5LjE1Nzc0NywgMjAxNS8wMy8zMC0yMzo0MDo0MiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MUI1MjE0RDQ2QTM3MTFFNThGOENCRUNBMzgxMThCRTAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MUI1MjE0RDU2QTM3MTFFNThGOENCRUNBMzgxMThCRTAiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxQjUyMTREMjZBMzcxMUU1OEY4Q0JFQ0EzODExOEJFMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxQjUyMTREMzZBMzcxMUU1OEY4Q0JFQ0EzODExOEJFMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pu3R5MkAADH8SURBVHja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\" data-filename=\"npm.png\" style=\"width: 123px; height: 123px;\"></h3><h4>1. <a href=\"https://github.com/cosmicjs/cosmicjs-node\" target=\"_blank\">Cosmic Node Package</a></h4><p>- This is a great package for your Node.js app. &nbsp;<br><span style=\"line-height: 1.42857;\">Easily add this to your JS setup with </span><code>npm install cosmicjs</code></p><h4><span style=\"line-height: 1.42857;\">2. <a href=\"https://github.com/cosmicjs/cosmicjs-browser\" target=\"_blank\">Cosmic Browser Package</a></span></h4><div>- This is a great package for your your browser-based apps. &nbsp;<br>Easily add this to your JS setup with&nbsp;<code style=\"font-size: 12.6px;\">npm install cosmicjs-browser</code></div><h4><span style=\"line-height: 1.42857;\">3. <a href=\"https://github.com/cosmicjs/cosmicjs-php\" target=\"_blank\">Cosmic PHP Client</a></span></h4><div><span style=\"line-height: 1.42857;\">- This is the official PHP client that makes adding a CMS to your PHP app a breeze.</span></div><div><span style=\"line-height: 1.42857;\"><br></span></div><h3><span style=\"line-height: 1.42857;\">Example Websites</span></h3><h4><span style=\"line-height: 1.42857;\">1. <a href=\"https://github.com/cosmicjs/cosmicjs-examples\" target=\"_blank\">Astral (PHP)</a></span></h4><div><span style=\"line-height: 1.42857;\">- This is a really cool PHP single page application built using the PHP client on an <a href=\"http://html5up.net\" target=\"_blank\">html5up.net</a> frontend.</span></div><div><img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVQAAAFUCAYAAAB7ksS1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDY3IDc5LjE1Nzc0NywgMjAxNS8wMy8zMC0yMzo0MDo0MiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgTWFjaW50b3NoIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjZGQkRCMTMxNkEzNDExRTU4RjhDQkVDQTM4MTE4QkUwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjZGQkRCMTMyNkEzNDExRTU4RjhDQkVDQTM4MTE4QkUwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NkZCREIxMkY2QTM0MTFFNThGOENCRUNBMzgxMThCRTAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NkZCREIxMzA2QTM0MTFFNThGOENCRUNBMzgxMThCRTAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6c8e/JAAFMN0lEQVR42uxdBZwd1dU/d95bTbJJiBCD4F68eIFSXFqc4lK0BYoUKXxYoQWCFK/g0kLR4tAWDUVKgSLFKSFIEuK2/uZ+95wrc2fe2G7W3u49+U12d968mTtXzv0fZwAwHwYgMcbM75zzsvP2ua5+Ztzz4iitDcViEaqqqqBUKkFrays4Sh7fjvZtT7Wvt9tQCeR5Hh3YV77vl/VZT/cjtqW+vp6eu3jxYmpTaF2Ko2EgD1h0MPrSJLcnS6FQMJMqL9Nw1DcJN0IcT9wIowvSUZiwn6qrqwk4tLe30097jeLv3cVU4+6r12DSM4tuyOSuM2TIEBqsRYsWVUSbcVCxvW5BVt5cQwaBEgYuyJaWFtcpGYAH53gcOu1OEJQEVvBZzc3NjqFmIYZll12WEMPUqVOhqampT04sewBxgmF7ndhYeYQMFedcW1tbaAHj4TbIMCFowKOnpce0Z+kxilPhDViGGhUbUJygDikWe3SQ8k6SuIXWnROsO3XJvb0gertdjY2NRuR3VDnjGEWlcW0T1zBeaZOyq5kEnkeRH38iOh3oEx37QRsCosi4qyajI0eVwCs6yhsHDEPFDkIxCxlFnDEgbcFXOlrrDGE/JSFjx1AdOYYaP5cHjMiPDEIz1DhjTtpiH6iMoCvf2zFTRwOCzzgmUS7qOoIuE/WzEIA2xjhy1E+Q7cDRoWqDk/Zli4ryenHHMZOBKPY7cuREfifyJzJCbclPYpKakTrE1P1jMZD7wG3K/ZcGtB9qR4xQbhEsGRPRES/4OxoF9eZmhxUOFMJ3dv6mjqH2C6ZpI4Q0sb63Y4b7GwNBdYtmqLaz9kBjLlpHn5RLwlGf4RyQNCxpAuyAQqi2jrSj4qgTVztP2qtCG/1st7WBhtT6cu4IR/a4QEiCkuPEiJkqOJbEJwaOUWpJkGYlIVTbct4VDKur3r0SN6Vogpq0mHJH/YZLEMMcMmQYjBk7FhYtWgzfzpghgEE7MK8AnNaUPiISSF9nCklHVyGE7v5eX+i7zjK+rn737nbF6k5CZlpXV0cHqi+62nDpDKF9S9wHVoQRI0bBsssuB2PHjoPqmlpioJKZskTW6ZKj9HOxsrMMLA6VDkQ9su1Sh+Kf/ql1wJWA1J3+v3M8ddGihfDVV1/CosWLod0ksvEVM/UrS+Tv6wmCKwGldnU/DeSFqUOXtfud3Q9dYVjrzr4N6wEdg83RY0bsFzK++FEyqgDPK5J+lfM2iNOjFl3HOuqPao/uePe4pDldJap3V9+6SLTOb0K+Lxgpt33XmbLwcxfL75hf16KngYJydKkZZKa2mJ/mYueo0gl1pdojKECtOOJomMrCto66ERlUOjrQekP7vbQIORAIjVDDhg2DQYMGVeRYRjPeO+afc/0KpsosPWlBcMqi+K/oMSgAdwy1t5hpJTLVaJv1IkTHfMwbiz8HEqGFP2rZ76ow5Z6YG873tRN9hkyTIyMtQEFJYyW/BCXuy8+SJBrXdY7SFqFtbGloaCC0Nm/ePKqrMxAIE453F7rT6H+ghd5WBkOV/zMu2acfGXsPy9VUUk2pnqpi2J1tr1RxPymSDGsgIYOxayH1d0KLPh5Jc6ez8wkRL6oRtH4WSxIviSuWo64W+SVTRUQaPYe/cYdQe54pZeVeXRLmHnWF6Y7NJ0rz58+nYyAj9q7sX2SmtbW1JizXUV9DqPHntDogjREvEdIbSAkuOpvUorPRR3HVMLs6tDQvQ3W6t64l1M0mVZColDWwpHOkK+/VF6jYmc60X7Sv76w4YXHi2rlQk5JI571fFIWmJVtZ0olr69miWbK6s+8d8+x+srNuOeofVOyKhdeXFx9Z51SG/u5iGN2hm9UoVDPUuKQc2srsmF/lSjpxlSMcDWCG2ud1IYrho6sP/kSDShzCzjuZkTl39wKw3a2Scre6xefIUT9gqEvCjHqL6uvrYfDgwST2L1iwICT+d6bt3f2+0fs7l5r+udG7zdExVEO6LDMu9r7uRqMds3HiVkpV02idK0f9U+yPGhwdDVCGiswU/ejQh66vM1TtnI3tTEpw0ReZlmOk/Z+hdrf7W3fNyzjjtJuvHWSo0ezlqJeshN0VRXzbMNUXBt9NQEeVHF/fVQbS/rYGOuSHGmWoiFKRUQ2kyJmO9FVHJ5Ldv47hOurLc1urz7QfrfM46QBD7eqSGP3Nmbez74iTESNlWlpayvwRXalhR32ZcH6OHTsWhg8fDnPmzIHp06e7+QqdzDZVyZmU+gohwh85ciSMGzeOJqXuR+eT6KgSgAL+RDCA2cfwZ17JrL+Ti+XvxYmJOmicjPgzWqfIMVRHfZH0vMS5Om3aNMo8po2+bt52UuRfUjF9oIv8+j0RpSJDrQRPCUeObHE/Trx3airHUHuVocZ9xyFTR5XAUO0E2/qn86l1Gft7TWyKMtysvx1VDrPp75SUV8IZpRxD7VNMNq4QnqPKYqaoxsGj34u2EeOpm6uOofbqZMwS7Z3oX9kM1TGYgUm9YuUfCMyiK97RMdXKG/M4cXggzG83VxVYgl4wSjlyNJClD0cOoTpy5KiDyK2rIwwH+kZVCYDOMdQBMAkH0kLuTYTo9KaOnFGqnzMXXULFMVNHjhxDdbQEzGWg5VtwzNSRE/kddRtzSapH5ciRI8dQHTnE5siRY6iOeh+l9idCFYaORoorEe7IkWOojhzlJDS0YdFFrRu2q9g6ctSrmz10oARKdyANzu0mMPoHzHeoo1v6uv9k8tIIFSOTXFKO/j/mjqHmHnBPNYFZDLVE59xkCPopS7Tvivt05F6u//ten0VT6MUxVJdmr5ulp96cnHKwSyHezqHNLep+xGz6A1XqfIxrt0ve0vmNqssYalfm6kyfnOiEXkW81THVvs/Usp5b6Yu2rwRFdLQNSTlZbb/kgZC3tSv63c4glmcj8vLctDucw2VjC6oJnET9oQ1DYeyYcVBXW+dGs0IQUFLlAZx8aDiq1IVbCQERcbkCbHHfUc9TsbMD13UTgtOBC3CppYbDqFGjoKV1MTQ1NbrR6SDizzJC9EQy4GiEVqUubLv9vS0tJT0/KVdDkn4Ur0M3M/xetGy5o2zAkMcNsdiRG9sLsjOTzJ4AwW7KzCRobWmlw3eDvURoqqcYQNyCtudKJZfFiM75vkh238aNhZYO7Ovwd4deO9/PmWsCcuZD7Z6JxawmeFBdXSvE/Vpoal5IlUAdQSai1OOiF08eJtCVqdD6u2uOXYSuq/psSckukqfJDnTQf2N5cvTRdRV1+5jI370TJnCZam1tFsfiAbFQu5vx9lTf9fcxymKmPU1646ypqSGG2dTURAwzDnk6H90+ylC7flJIh365GCVDZUr059p9yjHTTjGtPAjV9W1lbxrYnlohyaG9Yfbs2TBnzpyycUek6vSkA4Sh+j630CmdIQ/U8Lm+Lwb2JXJIpP+SLeLbSBSRaV8xnDlSvEFzsN4QFytVrMYJrnd/ezK7KBRH3TXnouuyqqqKRH60NTgdaef6szukEWKoUReR/pqlaInhfLEI9fX19LvWXWVNfEeOHA0chlqMu4ljCMmiFxoDsH9aWlq6fDAcOcrDDNw868Ogy2YGbqDSCV1QFi9eTJM6LmVcX0Ko6DZTyX6g3YVIKmGOR9VI0XZHP3frtg+NHVSCFahCUEJf0aHquGNsIzL+gb7gKk0VY8+vOOf8LCbqVE+9LPI76hjF1V7vS7rngVSYr6Pj5d7HUY+I/I46hyD64uTWrjVOjdN9eSh6imHayBSlDtTho9SRFknoGK5jqBWNUNP0Xb3FUN3CCkj7cVZan0TnVkNDAwwZMgQWLgxCs52rnmOo/Za59qUwRbfA8vcFMlz069Q6577Ud3YuAfR9Ru+SqEHUbZydX7NdPl7QR41SWYpjvQhw8kcNL71p+XRW165lIj3Rl+ggP3jwYJpLixYt6taifx3ZcJ0lv2v7tiN92Nl7VSxCRYaK8cy6jLC9CHpj8uEAIIPHdqE45hDikvVlT7g64VjhOOEc0glG0uoxOXLUb0V+zURxMfQF5mWXS3C05CgD+1Eb17ojyYceL81QUZSOZmfqbaZqbyqVaFxzDLWCCBcBhn/2FUs2LkREORoxO1ry/uyJftRMM6o26mtp+xxVCCCACtShuh3aUVcy0740rzsioTnqPp4xoHSoHZ1MKNrpiBOHIB31JlNyc8+J/H16N8oKwbMrcEZFya5AKC7Mz5EjRxXPUPPUTbKNDjq2vavRgta1dZaxrr/++nDzzTe7mehoiWjSpElw9913u45wDLX7GK62DuPv6MrUXRElS8KY0Qdy3LhxbiYOUFVDV+lUBw0a5Pq1C6XEzt7LGaUcOXLkyCHUvs3E8yIPtzEMTKqrqyOpqb8W0huogMhzU7v3J17a0auTw/NChj03Rl0nnmOiEwx37Su+rji+2hNGv7Mef0eOoTrqAtIeEdFqm46WvF+1sTSaqaw3KQ41OgnKifyOunGxuRj3JScMc8U+1EUe+0Ip6KjqweXSdQzVUTeJuzZDdYusaxBqc3Nzn2uX9tfWYdSOHEN11IWELl14aAbgMmh1H/rvCxIAZkvDDG7ITO3cBk4qyU9Oh+ooeXJ4HjFUXGhOfzowpBEn6juE6qibCJFKY2NjqBy1Qyvdj1Z7i9CNS1cscGPcyU0Jusix3y20/odUklCrQzGO8syhvrBJVKzIb2d0inaofd5RZaMkh14cOeoBkT/O7cIhWEedRTVLKg67vKNu/vTGWHrO2ODIkSNHXSjydzdTdWKiI0eOBoTI7xido75CaXWcumOeZiUnd+Sowww1a0LlnchxOlKnN+07NHz4cHKLQUK/UnSH0n93hOrr62HkyJF0TJs2DebOnZsa9YMGScyshC5YaXMB/V21204cYZvxsMM18d6djTjSzNvuF4wU0q5ieQivx3fDUNKamhoqGtlfs0c56sDcijvEZKMj6XN3VM7xj3/8gy9atIjPnDmTjgULFvApU6bwhoaG3PdYc801+R133MG//fZbLpgeRxKMhH/zzTf8gQce4D/5yU/40KFDy753zDHH0DO//PLL1AOvuf/++2PnH/584YUX+IwZM0LfwWe///77/C9/+Qs/9thjY+dv3KGvuf3220P9Mm/ePD59+nS+0kormXuk9cnxxx/PZ8+eTW2ZNWsW9Y+bb+X93xvPTBv3bj66jqEKBMFra2t5sVh0k6qPHKuuuipPoh//+Me57rHlllvyPDR+/Piy755zzjk8L7377ruJ8w8ZVhb9+9//5gJx5mKoyPyT6Je//GWufrnoootC33vllVfcnBvgDNVLE4k6Kq5jnselllqKfjodVN+gPfbYI/GzffbZJ/P7KMrmqVV0zz33wNdffx2rIshLgsklzj/BUDO/v8EGG8ANN9xQpqrS97LP7bTTTon32XfffXO1d/HixaG/BcJ1E87pULuOUJ+Fk1anJ3PU+2QzTa2f1BVgd955ZxgyZAgsXLgw8ftrrbVWqOYVjuupp54Kn3zyCWy00UawzTbbwOabbw433nhj7Pf//ve/UzJl1C3icw855JBQ/aN//OMfIMR2+uyjjz6KNQihvhb1pzZdeeWV8Pnnn8PPfvYzWG211cz5vfbaixjz/PnzQ3MQv49t0CG0dr+gDhXnLPYF0rrrrgtC7IdPP/20R8bITt/n1s0S6C77SN85EaWfHsstt1xIJEU95L333hs6JxhL6j222mqr0PWCKfHvfe97oWvWXnvtWDVPnJj1xRdfhO63/fbbp37P8zzSaUa/t+mmm9Ln+DNK+N76Pvh9VEMJpswFI6fzdXV1XKBLc/2bb77Jb7755tA9Tj/99Mz+RdWATU8++WSnRVXsv75us+io6DwQ7TADKia0L5QV6U1x/9lnn4U//vGPoXN777136j0EIwv9jZb1F198ER577DEQzJbOvfPOO7HW+ShiQIu4Rsea4iq+2t9DRInifjQ/p0asW2yxReg8ok30PNDjje3FZ+KhvyOYeEgV8d///teoCmyk211zMO597XR5vb0+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\" data-filename=\"php-astral.png\" style=\"line-height: 1.42857; width: 181px; height: 181px;\"><a href=\"https://github.com/cosmicjs/cosmicjs-examples\" target=\"_blank\"></a></div><div><br></div><div><span style=\"font-size: 18px; line-height: 1.42857;\">2. <a href=\"https://github.com/cosmicjs/cosmicjs-examples\" target=\"_blank\">Blog (React)</a></span><br></div><div><span style=\"line-height: 1.42857;\">- This is a single page React app that uses React Router and the Flux pattern. &nbsp;The pages load fast!</span></div><div><img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVQAAAFUCAYAAAB7ksS1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDY3IDc5LjE1Nzc0NywgMjAxNS8wMy8zMC0yMzo0MDo0MiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgTWFjaW50b3NoIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjZGQkRCMTI5NkEzNDExRTU4RjhDQkVDQTM4MTE4QkUwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjZGQkRCMTJBNkEzNDExRTU4RjhDQkVDQTM4MTE4QkUwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Q0EwNzREOUU2OEIxMTFFNThGOENCRUNBMzgxMThCRTAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NkZCREIxMjg2QTM0MTFFNThGOENCRUNBMzgxMThCRTAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6L/K69AAMPyUlEQVR42my9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\" data-filename=\"react-blog.png\" style=\"line-height: 1.42857; width: 179px; height: 179px;\"></div><div><br></div><div>I hope you find that these links and resources help you learn more about building with the Cosmic content API. &nbsp;If you have any questions about the API, you can learn more in the <a href=\"https://www.cosmicjs.com/docs\" target=\"\">Cosmic API Documentation</a>.</div>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2015-10-20T05:20:26.705Z","modified":"2016-06-21T03:33:46.584Z","order":208,"status":"published","modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}},{"_id":"56029e6229d514902f000001","slug":"official-private-beta-release","title":"Official Private Beta Release","content":"<p>Hello World! &nbsp; We are officially in private beta mode. &nbsp;Lots of work has been done up until this point to make Cosmic the best cloud-hosted content platform. &nbsp;Sign up for an account and please <a href=\"https://www.cosmicjs.com/contact\">send us some feedback</a>. &nbsp;Here is a copy of<a href=\"http://tonyspiro.com/cosmic-js-a-better-way-to-manage-content/\" target=\"_blank\"> my blog post on the release</a>:</p><p style=\"margin-top: 20px; margin-bottom: 20px;\"><a href=\"https://www.cosmicjs.com/\" style=\"outline: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204);\">Cosmic</a>&nbsp;is&nbsp;a cloud-hosted content&nbsp;platform that makes it easy&nbsp;to manage content for&nbsp;websites and applications.</p><p style=\"margin-top: 20px; margin-bottom: 20px;\">I built Cosmic because I saw a problem with scaling content&nbsp;across platforms and devices. &nbsp;After years of building applications using&nbsp;installed content management systems, I became tired of rebuilding APIs to handle content distribution&nbsp;from a website to microsites, landing pages and applications. &nbsp;I decided to build one API to handle all content outlets for easier and faster distribution, and Cosmic was born.</p><p style=\"margin-top: 20px; margin-bottom: 20px;\">Cosmic allows for easy content management and distribution&nbsp;by giving you&nbsp;the power to store content as JSON objects in an API that can be delivered anywhere.</p><h4 style=\"margin-top: 25px; margin-bottom: 20px;\"><img src=\"data:image/png;base64,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\" data-filename=\"download.png\" style=\"width: 392px;\"><br></h4><p style=\"margin-top: 20px; margin-bottom: 20px;\">Cosmic&nbsp;is API-first, meaning&nbsp;your content can be&nbsp;distributed across all devices and platforms from your&nbsp;website, to microsites&nbsp;and&nbsp;landing pages, to native mobile applications&nbsp;which&nbsp;allows for faster development cycles. &nbsp; And when you use Cosmic to serve data and files, application&nbsp;servers can be kept light-weight which saves on server costs.</p><h4 style=\"margin-top: 25px; margin-bottom: 20px;\"></h4><h4 style=\"margin-top: 25px; margin-bottom: 20px;\">Get started</h4><p style=\"margin-top: 20px; margin-bottom: 20px;\"><a href=\"https://www.cosmicjs.com/\" target=\"_blank\" style=\"outline: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204);\">Click here to sign up for a Cosmic account, it’s completely free to sign up</a>.</p><p style=\"margin-top: 20px; margin-bottom: 20px;\">Cosmic is currently in private beta but&nbsp;you&nbsp;will be notified when your account has been activated.</p><h4 style=\"margin-top: 25px; margin-bottom: 20px;\">Start building</h4><p style=\"margin-top: 20px; margin-bottom: 20px;\"><a href=\"https://github.com/cosmicjs\" target=\"_blank\" style=\"outline: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204);\">Click here to check out the available clients for JavaScript and PHP&nbsp;on GitHub</a>.</p><p style=\"margin-top: 20px; margin-bottom: 20px;\">Currently there are available clients for JavaScript and PHP to help you get started building scalable, content-ready applications.</p><h4 style=\"margin-top: 25px; margin-bottom: 20px;\">View examples</h4><p style=\"margin-top: 20px; margin-bottom: 20px;\"><a href=\"https://github.com/cosmicjs/cosmicjs-examples\" target=\"_blank\" style=\"outline: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204);\">Click here to view code for websites built using Cosmic</a>.</p><p style=\"margin-top: 20px; margin-bottom: 20px;\">I’ll post&nbsp;some tutorials on this blog soon to show you how easy it is to use Cosmic to manage content for your next project, so stay tuned. &nbsp;If you have any questions, please post them&nbsp;below, or reach out to me on&nbsp;<a href=\"http://twitter.com/tonyspiro\" target=\"_blank\" style=\"outline: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204);\">twitter</a>&nbsp;or&nbsp;<a href=\"mailto:tspiro@tonyspiro.com\" style=\"outline: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204);\">email me</a>.</p><p style=\"margin-top: 20px; margin-bottom: 20px;\">Thanks,<br>Tony Spiro</p><p style=\"margin-top: 20px; margin-bottom: 20px;\"><a href=\"https://www.cosmicjs.com/\" target=\"_blank\" style=\"outline: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204);\">Click here to go to&nbsp;Cosmic<br></a><a href=\"https://github.com/cosmicjs\" target=\"_blank\" style=\"outline: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204);\">Click here to go to&nbsp;Cosmic on GitHub</a></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2015-09-23T12:43:14.512Z","order":209,"modified":"2016-06-21T03:34:41.205Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}},{"_id":"558215424642b40c59000004","slug":"content-management-process-frontend-or-backend-first","title":"Content Management Process: Frontend or Backend First?","content":"<div class=\"loading\"><span style=\"line-height: 1.42857143;\">A very interesting article was published to one of my favorite web dev blogs today.&nbsp;</span><span style=\"line-height: 1.42857143;\"><a href=\"https://css-tricks.com/where-content-management-systems-fit-into-the-process/\" target=\"_blank\">Where Content Management Systems Fit Into the Process</a>&nbsp;goes into a discussion which I think is seldom in the limelight in the development community, what is the best process in connecting your site to a CMS? &nbsp;The author&nbsp;</span><span style=\"line-height: 1.42857143; text-align: center;\">Geoff Graham presents three options in building a dynamic, CMS-powered website:</span><br></div><h4 style=\"font-family: 'Open Sans', sans-serif; color: rgb(51, 51, 51);\"><span style=\"text-align: center;\">Option 1: The CMS Comes First Method</span></h4><img class=\"\" data-type=\"image/jpeg\" data-title=\"cms-method-first.jpg\" src=\"https://www.cosmicjs.com/uploads/b238da00-1552-11e5-b761-c732d76a78aa-cms-method-first.jpg\"><div><br><h4><span style=\"text-align: center;\">Option 2:&nbsp;</span>The All-At-Once Method</h4></div><div><img class=\"\" data-type=\"image/jpeg\" data-title=\"cms-method-venn.jpg\" src=\"https://www.cosmicjs.com/uploads/e14d9dd0-1552-11e5-b761-c732d76a78aa-cms-method-venn.jpg\" style=\"line-height: 1.42857143;\"><br></div><div><h4><span style=\"text-align: center;\">Option 3:&nbsp;</span>The CMS Comes Last Method</h4></div><img class=\"\" data-type=\"image/jpeg\" data-title=\"cms-method-last.jpg\" src=\"https://www.cosmicjs.com/uploads/f933eee0-1552-11e5-b761-c732d76a78aa-cms-method-last.jpg\"><div><br></div><div>Previously, when building sites using other CMS platforms I would prefer to use the \"CMS Comes Last Method\" because I would be able to work out a lot of bugs, change my mind and add new features in the static HTML/CSS build phase before pouring in the more time-consuming programming / CMS phase. &nbsp;</div><div><br></div><div>But with Cosmic I can use any one of these methods and feel confident that I can easily make edits, change my mind and add new features to a CMS-powered website. &nbsp;There's power and reassurance in flexibility and Cosmic offers the most flexible way to add content to your website.</div><div><br></div><div><a href=\"https://www.cosmicjs.com/signup\" target=\"_blank\">Sign up to get a private beta invite</a> to begin checking out how easy it is to add dynamic content to your website or app.</div>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2015-06-18T00:48:02.985Z","modified":"2016-06-21T03:34:56.648Z","order":210,"status":"published","modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}},{"_id":"5528d48499c6a6f75a000001","slug":"relational-vs-on-the-fly-content-management","title":"Relational VS On the Fly Content Management","content":"<p><span style=\"line-height: 1.42857143;\">Variety is the spice of life and it is essential to flexible content management. &nbsp;</span>Currently I'm seeing the trend of data storage move from relational to on-the-fly structures. &nbsp;Relational databases like MSSQL and MySQL are being less favored and more developers are choosing to move to NoSQL databases like MongoDB. &nbsp;By more developers I include myself because this is a very flexible and intuitive way to store data. &nbsp;Key / Value, or as I like to call on-the-fly, content storage is the next stage of content management. &nbsp;Relational structures bind where on-the-fly sets free. &nbsp;This is the theory behind Cosmic metafields.</p><p>Content items are like people in that they come in all shapes, sizes and colors. &nbsp;Cosmic objects allow you to create metafields which give you the power to add on-the-fly key / value pairs. &nbsp;Create infinite metafields and&nbsp;<span style=\"line-height: 1.42857143;\">drag and drop them into parent / child relationships.&nbsp;</span></p><p>I find it so much easier to keep track of my key / value pairs per object rather than managing a relational schema. &nbsp;I believe this is the new way of on-the-fly content management that will allow for flexibility and scalability of future content.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2015-04-11T08:00:04.121Z","order":211,"modified":"2016-06-21T03:35:07.000Z","status":"published","modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}},{"_id":"54d31299d1e78c203f000002","slug":"content-managment-without-a-site","title":"Content Managment Without A Site","content":"<p>Cosmic has an understandable hierarchy for content management and can be used as a stand-alone content organizer while a website is being built. Buckets, Object Types, Metafields and Files can act as a sitemap or content portal for a team wanting to organize information more effectively during the development process. &nbsp;And when the site is ready for development and launch, the API is ready to begin delivering the pre-populated content saving time and money.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2015-02-05T06:50:01.448Z","modified":"2016-06-21T03:35:14.990Z","order":212,"status":"published","modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}},{"_id":"5426f3912b18c42924000001","slug":"the-rise-of-the-modular-product-era","title":"The Rise of the Modular Product Era","content":"<p>After reading a very well done article on TechCrunch \"<a href=\"http://techcrunch.com/2014/09/27/dont-dismiss-developers/\" target=\"_blank\">Don't Dismiss Developers</a>\", a thought came to mind about our<span style=\"line-height: 1.428571429;\">&nbsp;current developer technology ecosystem. &nbsp;The most successful products don't try to build every bit of functionality in-house. &nbsp;Instead, great companies find ways to build their technology upon a stack of specially designed services that offload complex tasks. &nbsp;This is something that I call the \"Modular Product Era\".</span></p><p>Currently this is happening at the server level with cloud computing, file storage and database offloading to service companies like Amazon and Digital Ocean. &nbsp;But there is also the application layer that is now being outsourced to different companies to leverage specially crafted and designed products that integrate easily into an application stack. &nbsp;Much like in a community if you want the best bread, the best meat and the best cheese, you don't go to the supermarket and you obviously don't try to make all of these complex foods yourself, instead you go the local baker, butcher and cheese store. &nbsp;And these specialized modules are becoming easier to incorporate into existing technology.</p><p>Ethan Kurzweil illustrates this, \"<span style=\"line-height: 1.428571429;\">For example, when you add your credit card to Uber by taking a picture of it, you’re actually using a cool piece of technology developed by&nbsp;</span><a target=\"_blank\" href=\"https://www.card.io/\" style=\"line-height: 1.428571429; outline: 0px;\">card.io</a><span style=\"line-height: 1.428571429;\">&nbsp;</span><span style=\"line-height: 1.428571429;\">(now part of PayPal) to OCR the credit card number and expiration date and then after every ride, Uber makes an API call to&nbsp;</span><a target=\"_blank\" href=\"https://www.braintreepayments.com/\" style=\"line-height: 1.428571429; outline: 0px;\">Braintree Payments</a><span style=\"line-height: 1.428571429;\">&nbsp;</span><span style=\"line-height: 1.428571429;\">to process your transaction.\"</span></p><p>In this new Modular Product Era, we will continue to see companies becoming more specialized and providing a more focused service at a lower price point. &nbsp;This is very exciting because this lowers the barrier to entry even further for growing technology startups.</p><p>Cosmic is being built with these principals in mind. &nbsp;We want to build the best product for developers to easily integrate content management into any application. &nbsp;We will do this through using a technology stack that leverages the Modular Product ecosystem.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2014-09-27T17:27:45.788Z","order":213,"modified":"2016-06-21T03:35:23.485Z","files":"","status":"published","modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}},{"_id":"53b8d54d86269e930a000001","slug":"happy-independence-weekend","title":"Happy Independence Weekend","content":"<p>Here I am again, writing late at night with more thoughts on Cosmic and what it could do for developers and content creators. &nbsp;For some reason I keep thinking about Doogie Houser and that theme song...</p><p>So here's what I'm thinking: Everything is going the way of subscription services. &nbsp;Music, movies, tv, enterprise software, you name it there is a company out there that will offer it to you without you having to download software, install an app, populate a database. &nbsp;Everything is moving toward a service economy.</p><p><span style=\"line-height: 1.428571429;\">This is going to continue because the trend of human nature has always been toward better customer service, the less a customer has to do, the better the service.</span></p><p><span style=\"line-height: 1.428571429;\">With this in mind, comes the idea that your website's content doesn't need to be locked into a database. &nbsp;It doesn't need to be something that has to be installed. &nbsp;Your content can live freely as a service and can be accessed anywhere a device is needing to connect. &nbsp;This means your website, your app, your business is allowed to be accessed anywhere and it's content is easily transported to wherever it needs to go. &nbsp;</span><span style=\"line-height: 1.428571429;\">This is huge.</span></p><p><span style=\"line-height: 1.428571429;\">APIs are now the DNA of the internet. &nbsp;They connect everything from your favorite blogs to your tv to your facebook news feed to your twitter stream to everything you access on the web and any content in any smart device, period. &nbsp;APIs are content. &nbsp;</span><br></p><p><span style=\"line-height: 1.428571429;\">So here's the question: If APIs are our content platforms, why aren't we managing our content in the APIs? &nbsp;Well now you can.</span></p><p>You can now manage the content of your website or app in Cosmic on a fast and secure content framework independently of any downloaded software or managed system. &nbsp;</p><p>Welcome to the 21st century. &nbsp;Your content is still king and it is now delivered everywhere...&nbsp;</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2014-07-06T04:49:17.679Z","order":214,"modified":"2016-06-21T03:35:32.709Z","files":"","status":"published","modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}},{"_id":"539a752fae7280e55b000001","slug":"two-words-that-describe-a-great-product","title":"Two Words That Describe a Great Product","content":"<p><span style=\"line-height: 1.42857143;\">I've been thinking a lot about what makes a great product / UI / feature set. &nbsp;I've narrowed it down to two words:&nbsp;</span></p><p><span style=\"line-height: 1.42857143; font-style: italic;\">Beautifully easy.</span><br></p><p>I also keep coming back to the idea of user empathy. &nbsp;Whenever I hit a road block in trying to do something with Cosmic, I make a note of it and try to tear down the road block. &nbsp;I've noticed that when I come back to the place where the roadblock was and find a nice bridge, I'm a happier user. &nbsp;And I think in software development that's the highest goal you can attain.</p><p><br></p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2014-06-13T03:51:11.704Z","modified":"2016-06-21T03:35:41.097Z","files":"","order":215,"status":"published","modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}},{"_id":"5391442d5569d7fd68000001","slug":"build-philosophy","title":"Build Philosophy","content":"<p>Don’t project, just build it cool and easily usable.</p><p>Make it the best option available.</p><p>Make it the product YOU want to use.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2014-06-06T04:31:41.892Z","order":216,"modified":"2016-06-21T03:36:01.023Z","files":"","status":"published","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}},{"_id":"538a1a7e1450dd9f7b000001","slug":"second-blog-post","title":"Second Blog Post","content":"<p>This is just a test to see how the content lays out...</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2014-05-31T18:07:58.190Z","order":217,"modified":"2016-06-21T03:36:09.459Z","files":"","status":"published","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}},{"_id":"538a1181c7a1819e77000001","slug":"first-blog-post","title":"First Blog Post","content":"<p>This is blog number one on the new Cosmic blog page. &nbsp;Hopefully this will help me find the best way to help developers and publishers use this platform easier and more efficiently.</p>","metafields":[{"object_type":"authors","value":"5768b253163172890e00002c","key":"author","title":"Author","type":"object","children":false,"object":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null}}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"articles","created":"2014-05-31T17:29:37.191Z","modified":"2016-06-21T03:36:19.678Z","files":"","order":218,"status":"published","modified_at":"2020-10-02T02:07:53.246Z","metadata":{"author":{"_id":"5768b253163172890e00002c","slug":"tony-spiro","title":"Tony Spiro","content":"","metafields":[{"children":null,"type":"file","title":"Profile Picture","key":"profile_picture","id":"PgnhhF3xDz","value":"48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},{"children":null,"type":"text","title":"Username","key":"username","id":"p3oj3wNRDy","value":"tony"}],"bucket":"538a0d0f8ceb85ee75000001","type_slug":"authors","created":"2016-06-21T03:19:47.683Z","status":"published","modified_at":"2022-05-01T15:56:40.885Z","modified_by":"5357ef811693be2118000001","publish_at":null,"published_at":"2022-05-01T15:56:40.885Z","thumbnail":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","unpublish_at":null,"metadata":{"profile_picture":{"url":"https://cdn.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg","imgix_url":"https://imgix.cosmicjs.com/48767520-c967-11ec-bea6-99436435ce05-96ea1870-b755-11ec-a642-7195085ee56f-tux-cropped.jpeg"},"username":"tony"}}}}],"total":448}