{"id":3670251,"date":"2025-11-02T08:00:18","date_gmt":"2025-11-02T13:00:18","guid":{"rendered":"https:\/\/spin.atomicobject.com\/?p=3670251"},"modified":"2025-10-29T15:40:13","modified_gmt":"2025-10-29T19:40:13","slug":"javascript-setup-survival-kit","status":"publish","type":"post","link":"https:\/\/spin.atomicobject.com\/javascript-setup-survival-kit\/","title":{"rendered":"So You Want to Code in JavaScript: A Setup Survival Kit"},"content":{"rendered":"<p>Whether you\u2019re joining an existing codebase or starting your first side project, it can be overwhelming to find the right tools to set things up. From installing software, configuring environments, or hunting down dependencies, to getting your software working together, you can try an abundance of different tools before you even write a single line of code. However, having a simple foundational setup can make everything easier. Here are the four core tools I\u2019ve found essential for setup on a JavaScript project.<\/p>\n<h2>1. A Package Manager (Homebrew or WinGet)<\/h2>\n<p>Have you ever tried using a really cool-looking library, only to realize you need a whole bunch more tools before it can work? Well, you might really appreciate a package manager.<\/p>\n<h3>What\u2019s a package manager?<\/h3>\n<p>A package manager helps you <strong>download, install, upgrade, and manage software.<\/strong> Instead of manually hunting down each tool you need, the package manager does the work for you\u2014automatically fetching everything from trusted sources and organizing it into neat folders.<\/p>\n<p>Think of it like a librarian who not only hands you the book you asked for, but also the reference materials you\u2019ll need to understand it.<\/p>\n<h3>Recommended: Homebrew (macOS)<\/h3>\n<p><a href=\"https:\/\/brew.sh\/\">Homebrew,<\/a> or just Brew, is the package manager I use for my projects on macOS. It\u2019s especially good for installing developer tools that run via the command line.<br \/>\nIn Homebrew, pieces of software you want to download that you would use through the Terminal command line are called \u201cformulas,\u201d while apps or software with their own GUIs are called \u201ccasks.\u201d You would call any Homebrew command through your computer terminal with the starting word <code>brew<\/code>.<\/p>\n<h4>Common Homebrew Commands<\/h4>\n<p><code>brew update<\/code> \u2013 Updates Homebrew itself<\/p>\n<p><code>brew upgrade<\/code> \u2013 Updates all installed packages<\/p>\n<p><code>brew search [term]<\/code> \u2013 Searches for packages by name<\/p>\n<p><code>brew info [package]<\/code> \u2013 Shows details about a package<\/p>\n<p><code>brew install [package]<\/code> \u2013 Installs a package and its dependencies<\/p>\n<h4>Installing Homebrew<\/h4>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>Go to the <a href=\"https:\/\/brew.sh\/\">brew home page<\/a><\/li>\n<li>Copy the displayed command and paste it into Terminal:\n<pre><code class=\"language-bash\">\r\n\/bin\/bash -c \"$(curl -fsSL https:\/\/raw.githubusercontent.com\/Homebrew\/install\/HEAD\/install.sh)\"\r\n<\/code><\/pre>\n<\/li>\n<li>After installation, run the following to check that everything is up to date:<br \/>\n<code>brew update<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><strong>Windows users:<\/strong> You can use <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/package-manager\/winget\/\">WinGet<\/a> (comes preinstalled on Windows 10\/11) or NPM: Node Package Manager, and NodeJS<\/p>\n<h2>2. Node.js and NPM (Node Package Manager)<\/h2>\n<p>Yes, this is a <em>second<\/em> package manager. But like doctors, package managers also have specializations \u2014 just like how you wouldn\u2019t go to a primary care physician for a cardiology problem, you wouldn\u2019t want to use Homebrew for every single part of your project. NPM, or Node Package Manager, is specialized for managing JavaScript project dependencies \u2014 Node.js in particular.<\/p>\n<h3>What is Node.js?<\/h3>\n<p>JavaScript was originally designed to run only in web browsers. But with Node.js (also known as <a href=\"https:\/\/spin.atomicobject.com\/tag\/nodejs\/\">NodeJS<\/a> or simply Node), we can now run JavaScript on the server or locally\u2014outside of the browser. This opened the door to using JavaScript for backend development, command-line tools, and full-stack applications. (Node.js can do a LOT more cool stuff, and I\u2019m glossing over most of it, so if you\u2019re interested there are a ton of excellent resources online to learn more!)<\/p>\n<p>In short, Node.js is a blessing upon the world of JavaScript devs. It gives you a JavaScript runtime environment, and NPM helps manage JavaScript libraries for that environment. You will definitely want it to build your JavaScript project.<\/p>\n<p>(As a bonus, Node comes with built-in modules like <code>http<\/code>, <code>fs<\/code>, and <code>path<\/code>, so you can build servers or work with the filesystem without downloading any additional software.)<\/p>\n<h3>How to Use Node and NPM<\/h3>\n<p>To create a Node.js project:<br \/>\n<code>npm init -y<\/code> &#8211; Creates a <code>package.json file<\/code> that keeps track of all your dependencies. To create a new project with the <code>package.json file<\/code>, simply use <code>npm init<\/code><\/p>\n<p>To install project dependencies, use:<br \/>\n<code>npm install<\/code><br \/>\nOr, use this shorthand:<br \/>\n<code>npm i<\/code><br \/>\nI run this each time before I run my code just to make sure there haven\u2019t been any updates to my project\u2019s dependencies.<\/p>\n<p>To install a specific library (e.g., Lodash):<br \/>\n<code>npm install lodash<\/code><\/p>\n<p>To check versions:<br \/>\n<code>node --version<\/code><br \/>\n<code>npm --version<\/code><\/p>\n<p>NPM requires that you download Node, but if you\u2019ve installed NPM with a package manager (for example, Homebrew) that will have already been taken care of.<\/p>\n<h3>Installing Node and NPM<\/h3>\n<p>If you used Homebrew, you can install both Node and NPM with one command:<br \/>\n<code>brew install node<\/code><\/p>\n<p>Other than Homebrew and NPM, there are quite a few more package managers you might like to check out as well \u2014 if you\u2019re interested, take a look at <a href=\"https:\/\/spin.atomicobject.com\/javascript-package-management\/\">other Spin posts<\/a> for some ideas.<\/p>\n<h2>3. Nodemon<\/h2>\n<p>Nodemon is a small tool that makes development smoother by automatically restarting your Node app whenever it detects changes in your directory, like when you save a file. In my opinion, it\u2019s less of an essential JS dev tool and more of a (significant) quality of life improvement.<\/p>\n<p>For example, if you\u2019re testing a website on localhost, the page will automatically reload as soon as you save your code; without it, you\u2019d need to stop and restart your server manually every time you make a change. It might not seem like much, but it definitely saves time in the long run.<\/p>\n<h3>How to Use Nodemon<\/h3>\n<p>In the command line, type:<br \/>\n<code>nodemon app.js<\/code><br \/>\n(replace app.js with your main file)<\/p>\n<h3>Installation<\/h3>\n<p>Install globally using NPM:<br \/>\n<code>npm install -g nodemon<\/code><\/p>\n<p>It\u2019s a small upgrade, but it makes a big difference\u2014especially during local testing.<\/p>\n<h2>4. Jest (for Testing)<\/h2>\n<p>One of the most important steps in writing professional, quality code is testing, but it can also be the most tedious to set up. Thankfully, Jest makes it easier. Jest is a JavaScript testing framework developed by Meta. It works especially well with React, but also supports vanilla JavaScript and TypeScript. It\u2019s great for writing unit tests, mocking data, and checking test coverage.<\/p>\n<h3>How to Add Jest<\/h3>\n<p>Install as a development dependency:<br \/>\n<code>npm install --save-dev jest<\/code><\/p>\n<p>In your package.json, add:<\/p>\n<pre><code class=\"javascript\">\r\n\"scripts\": {\r\n    \"test\": \"jest\"\r\n}<\/code><\/pre>\n<p>To run tests:<br \/>\n<code>npm test<\/code><\/p>\n<p>Note: If you&#8217;re using <code>create-react-app<\/code>, Jest comes pre-installed.<\/p>\n<h2>Final Thoughts<\/h2>\n<p>One of the first lessons I learned as a new developer jumping into an established project is that project setup is never truly finished\u2014it just slows down. As your app evolves, you\u2019ll add new tools, dependencies, and configurations, but as long as you have a solid base, you can experiment to your heart\u2019s content. Mastering these four tools \u2014 a package manager (like Homebrew), Node.jsNPM, Nodemon, and Jest \u2014 will cover most of your needs.<\/p>\n<p>Happy coding, and have fun!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Whether you\u2019re joining an existing codebase or starting your first side project, it can be overwhelming to find the right tools to set things up. From installing software, configuring environments, or hunting down dependencies, to getting your software working together, you can try an abundance of different tools before you even write a single line [&hellip;]<\/p>\n","protected":false},"author":702,"featured_media":3670882,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[22988],"tags":[615,2147,2341],"series":[],"class_list":["post-3670251","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-javascript","tag-javascript","tag-nodejs","tag-jest"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>So You Want to Code in JavaScript: A Setup Survival Kit<\/title>\n<meta name=\"description\" content=\"Whether you\u2019re joining an existing codebase or starting your first side project, here are 4 tools I\u2019ve found essential for JavaScript setup.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/spin.atomicobject.com\/javascript-setup-survival-kit\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"So You Want to Code in JavaScript: A Setup Survival Kit\" \/>\n<meta property=\"og:description\" content=\"Whether you\u2019re joining an existing codebase or starting your first side project, here are 4 tools I\u2019ve found essential for JavaScript setup.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/spin.atomicobject.com\/javascript-setup-survival-kit\/\" \/>\n<meta property=\"og:site_name\" content=\"Atomic Spin\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/atomicobject\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-02T13:00:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/spin.atomicobject.com\/wp-content\/uploads\/AO2025-JillDeVriesPhotography-104-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1707\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Maya Malavasi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@atomicobject\" \/>\n<meta name=\"twitter:site\" content=\"@atomicobject\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Maya Malavasi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/javascript-setup-survival-kit\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/javascript-setup-survival-kit\\\/\"},\"author\":{\"name\":\"Maya Malavasi\",\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/#\\\/schema\\\/person\\\/3f193103ae4585aed38a1d80e8aef8ba\"},\"headline\":\"So You Want to Code in JavaScript: A Setup Survival Kit\",\"datePublished\":\"2025-11-02T13:00:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/javascript-setup-survival-kit\\\/\"},\"wordCount\":1047,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/atomicobject.com\\\/\"},\"image\":{\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/javascript-setup-survival-kit\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/spin.atomicobject.com\\\/wp-content\\\/uploads\\\/AO2025-JillDeVriesPhotography-104-scaled.jpg\",\"keywords\":[\"JavaScript\",\"nodejs\",\"jest\"],\"articleSection\":[\"JavaScript\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/spin.atomicobject.com\\\/javascript-setup-survival-kit\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/javascript-setup-survival-kit\\\/\",\"url\":\"https:\\\/\\\/spin.atomicobject.com\\\/javascript-setup-survival-kit\\\/\",\"name\":\"So You Want to Code in JavaScript: A Setup Survival Kit\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/javascript-setup-survival-kit\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/javascript-setup-survival-kit\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/spin.atomicobject.com\\\/wp-content\\\/uploads\\\/AO2025-JillDeVriesPhotography-104-scaled.jpg\",\"datePublished\":\"2025-11-02T13:00:18+00:00\",\"description\":\"Whether you\u2019re joining an existing codebase or starting your first side project, here are 4 tools I\u2019ve found essential for JavaScript setup.\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/spin.atomicobject.com\\\/javascript-setup-survival-kit\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/javascript-setup-survival-kit\\\/#primaryimage\",\"url\":\"https:\\\/\\\/spin.atomicobject.com\\\/wp-content\\\/uploads\\\/AO2025-JillDeVriesPhotography-104-scaled.jpg\",\"contentUrl\":\"https:\\\/\\\/spin.atomicobject.com\\\/wp-content\\\/uploads\\\/AO2025-JillDeVriesPhotography-104-scaled.jpg\",\"width\":2560,\"height\":1707,\"caption\":\"Pictured, a developer's hand on a mouse and keyboard. Post title: How to Work Union Types into C#\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/#website\",\"url\":\"https:\\\/\\\/spin.atomicobject.com\\\/\",\"name\":\"Atomic Spin\",\"description\":\"Atomic Object\u2019s blog on everything we find fascinating.\",\"publisher\":{\"@id\":\"https:\\\/\\\/atomicobject.com\\\/\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/spin.atomicobject.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/#organization\",\"name\":\"Atomic Object\",\"url\":\"https:\\\/\\\/spin.atomicobject.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/spin.atomicobject.com\\\/wp-content\\\/uploads\\\/AO-Logo-Emblem-Color.png\",\"contentUrl\":\"https:\\\/\\\/spin.atomicobject.com\\\/wp-content\\\/uploads\\\/AO-Logo-Emblem-Color.png\",\"width\":258,\"height\":244,\"caption\":\"Atomic Object\"},\"image\":{\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/atomicobject\",\"https:\\\/\\\/x.com\\\/atomicobject\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/#\\\/schema\\\/person\\\/3f193103ae4585aed38a1d80e8aef8ba\",\"name\":\"Maya Malavasi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/58868e92d950ba9dd9ef8d3eeb50aee133dd49d7c92400111bef0db264747437?s=96&d=blank&r=pg\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/58868e92d950ba9dd9ef8d3eeb50aee133dd49d7c92400111bef0db264747437?s=96&d=blank&r=pg\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/58868e92d950ba9dd9ef8d3eeb50aee133dd49d7c92400111bef0db264747437?s=96&d=blank&r=pg\",\"caption\":\"Maya Malavasi\"},\"description\":\"Software developer at Atomic Object. Dedicated artist, gleeful nerd, and proud generalist, always looking to learn, no matter what.\",\"url\":\"https:\\\/\\\/spin.atomicobject.com\\\/author\\\/maya-malavasi\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"So You Want to Code in JavaScript: A Setup Survival Kit","description":"Whether you\u2019re joining an existing codebase or starting your first side project, here are 4 tools I\u2019ve found essential for JavaScript setup.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/spin.atomicobject.com\/javascript-setup-survival-kit\/","og_locale":"en_US","og_type":"article","og_title":"So You Want to Code in JavaScript: A Setup Survival Kit","og_description":"Whether you\u2019re joining an existing codebase or starting your first side project, here are 4 tools I\u2019ve found essential for JavaScript setup.","og_url":"https:\/\/spin.atomicobject.com\/javascript-setup-survival-kit\/","og_site_name":"Atomic Spin","article_publisher":"https:\/\/www.facebook.com\/atomicobject","article_published_time":"2025-11-02T13:00:18+00:00","og_image":[{"width":2560,"height":1707,"url":"https:\/\/spin.atomicobject.com\/wp-content\/uploads\/AO2025-JillDeVriesPhotography-104-scaled.jpg","type":"image\/jpeg"}],"author":"Maya Malavasi","twitter_card":"summary_large_image","twitter_creator":"@atomicobject","twitter_site":"@atomicobject","twitter_misc":{"Written by":"Maya Malavasi","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/spin.atomicobject.com\/javascript-setup-survival-kit\/#article","isPartOf":{"@id":"https:\/\/spin.atomicobject.com\/javascript-setup-survival-kit\/"},"author":{"name":"Maya Malavasi","@id":"https:\/\/spin.atomicobject.com\/#\/schema\/person\/3f193103ae4585aed38a1d80e8aef8ba"},"headline":"So You Want to Code in JavaScript: A Setup Survival Kit","datePublished":"2025-11-02T13:00:18+00:00","mainEntityOfPage":{"@id":"https:\/\/spin.atomicobject.com\/javascript-setup-survival-kit\/"},"wordCount":1047,"commentCount":0,"publisher":{"@id":"https:\/\/atomicobject.com\/"},"image":{"@id":"https:\/\/spin.atomicobject.com\/javascript-setup-survival-kit\/#primaryimage"},"thumbnailUrl":"https:\/\/spin.atomicobject.com\/wp-content\/uploads\/AO2025-JillDeVriesPhotography-104-scaled.jpg","keywords":["JavaScript","nodejs","jest"],"articleSection":["JavaScript"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/spin.atomicobject.com\/javascript-setup-survival-kit\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/spin.atomicobject.com\/javascript-setup-survival-kit\/","url":"https:\/\/spin.atomicobject.com\/javascript-setup-survival-kit\/","name":"So You Want to Code in JavaScript: A Setup Survival Kit","isPartOf":{"@id":"https:\/\/spin.atomicobject.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/spin.atomicobject.com\/javascript-setup-survival-kit\/#primaryimage"},"image":{"@id":"https:\/\/spin.atomicobject.com\/javascript-setup-survival-kit\/#primaryimage"},"thumbnailUrl":"https:\/\/spin.atomicobject.com\/wp-content\/uploads\/AO2025-JillDeVriesPhotography-104-scaled.jpg","datePublished":"2025-11-02T13:00:18+00:00","description":"Whether you\u2019re joining an existing codebase or starting your first side project, here are 4 tools I\u2019ve found essential for JavaScript setup.","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/spin.atomicobject.com\/javascript-setup-survival-kit\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/spin.atomicobject.com\/javascript-setup-survival-kit\/#primaryimage","url":"https:\/\/spin.atomicobject.com\/wp-content\/uploads\/AO2025-JillDeVriesPhotography-104-scaled.jpg","contentUrl":"https:\/\/spin.atomicobject.com\/wp-content\/uploads\/AO2025-JillDeVriesPhotography-104-scaled.jpg","width":2560,"height":1707,"caption":"Pictured, a developer's hand on a mouse and keyboard. Post title: How to Work Union Types into C#"},{"@type":"WebSite","@id":"https:\/\/spin.atomicobject.com\/#website","url":"https:\/\/spin.atomicobject.com\/","name":"Atomic Spin","description":"Atomic Object\u2019s blog on everything we find fascinating.","publisher":{"@id":"https:\/\/atomicobject.com\/"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/spin.atomicobject.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/spin.atomicobject.com\/#organization","name":"Atomic Object","url":"https:\/\/spin.atomicobject.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/spin.atomicobject.com\/#\/schema\/logo\/image\/","url":"https:\/\/spin.atomicobject.com\/wp-content\/uploads\/AO-Logo-Emblem-Color.png","contentUrl":"https:\/\/spin.atomicobject.com\/wp-content\/uploads\/AO-Logo-Emblem-Color.png","width":258,"height":244,"caption":"Atomic Object"},"image":{"@id":"https:\/\/spin.atomicobject.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/atomicobject","https:\/\/x.com\/atomicobject"]},{"@type":"Person","@id":"https:\/\/spin.atomicobject.com\/#\/schema\/person\/3f193103ae4585aed38a1d80e8aef8ba","name":"Maya Malavasi","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/58868e92d950ba9dd9ef8d3eeb50aee133dd49d7c92400111bef0db264747437?s=96&d=blank&r=pg","url":"https:\/\/secure.gravatar.com\/avatar\/58868e92d950ba9dd9ef8d3eeb50aee133dd49d7c92400111bef0db264747437?s=96&d=blank&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/58868e92d950ba9dd9ef8d3eeb50aee133dd49d7c92400111bef0db264747437?s=96&d=blank&r=pg","caption":"Maya Malavasi"},"description":"Software developer at Atomic Object. Dedicated artist, gleeful nerd, and proud generalist, always looking to learn, no matter what.","url":"https:\/\/spin.atomicobject.com\/author\/maya-malavasi\/"}]}},"_links":{"self":[{"href":"https:\/\/spin.atomicobject.com\/wp-json\/wp\/v2\/posts\/3670251","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spin.atomicobject.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spin.atomicobject.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spin.atomicobject.com\/wp-json\/wp\/v2\/users\/702"}],"replies":[{"embeddable":true,"href":"https:\/\/spin.atomicobject.com\/wp-json\/wp\/v2\/comments?post=3670251"}],"version-history":[{"count":0,"href":"https:\/\/spin.atomicobject.com\/wp-json\/wp\/v2\/posts\/3670251\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/spin.atomicobject.com\/wp-json\/wp\/v2\/media\/3670882"}],"wp:attachment":[{"href":"https:\/\/spin.atomicobject.com\/wp-json\/wp\/v2\/media?parent=3670251"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spin.atomicobject.com\/wp-json\/wp\/v2\/categories?post=3670251"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spin.atomicobject.com\/wp-json\/wp\/v2\/tags?post=3670251"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/spin.atomicobject.com\/wp-json\/wp\/v2\/series?post=3670251"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}