{"componentChunkName":"component---src-templates-article-js","path":"/article/lets_build_real_world_apps","result":{"data":{"contentfulArticle":{"title":"Let's build real-world apps","image":"https://res.cloudinary.com/liquidcoder/image/upload/v1607016775/Blog/Announcement/ztotjazu5haoi8yjobso.jpg","createdDate":"Wednesday, 02 December 2020","videoUrl":null,"updatedDate":"2 years ago","isNewLayout":null,"previews":null,"slug":"lets_build_real_world_apps","author":{"email":"john@liquidcoder.com","name":"John"},"tags":[{"title":"Swift UI"},{"title":"Free"},{"title":"Course"},{"title":"UI Design"},{"title":"Article"}],"allChapters":null,"code":null,"explanation":null,"downloads":[],"resources":[],"body":{"childMdx":{"tableOfContents":{"items":[{"url":"#new-website","title":"New website"},{"url":"#how-does-the-website-work","title":"How does the website work?"},{"url":"#technologies-i-have-used","title":"Technologies I have used.","items":[{"url":"#front-end","title":"Front-end"},{"url":"#back-end","title":"Back-end"},{"url":"#devops","title":"DevOps"}]},{"url":"#why-am-i-telling-you-this","title":"Why am I telling you this?"},{"url":"#brand-new-free-mini-course","title":"Brand new free mini course"},{"url":"#premium-courses-coming-soon","title":"Premium courses coming soon"}]},"body":"function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar IdentifierComponent = makeShortcode(\"IdentifierComponent\");\nvar Video = makeShortcode(\"Video\");\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, [\"components\"]);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h2\", null, \"New website\"), mdx(\"p\", null, \"Hey guys, after more than four months without posting anything, I am back with a lots of content  free and premium . I spent quite some time building a new  website that you can find \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://www.liquidcoder.com\"\n  }), \"here\"), \".\"), mdx(IdentifierComponent, {\n    id: \"identifier\",\n    mdxType: \"IdentifierComponent\"\n  }), mdx(\"h2\", null, \"How does the website work?\"), mdx(\"p\", null, \"I will be providing free and premium courses starting with the apple platform (iOS, macOS, watchOS). Premium courses will be full real-world apps built from scratch delivered via writing and videos. So for only $20 a month (or $15 a month billed yearly), we can build those apps together.\"), mdx(\"p\", null, \"In order to get access to free courses, you need to create a free account. Once you have an account, you can access all free courses and their source codedirectly on the course page, but you need a premium account to get premium ones.\"), mdx(\"p\", null, \"You don't actually need to create an account to get access to blog articles, they are all free and open to everybody whether you have an account or not.\"), mdx(\"h2\", null, \"Technologies I have used.\"), mdx(\"h3\", null, \"Front-end\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, mdx(\"em\", {\n    parentName: \"strong\"\n  }, \"GastbyJS\")), \": This is a static site generator, but it's really not, at least not fully because you can build more dynamic websites with it like you would with any other javascript framework, so you get the best of both worlds, plus it's really well supported with a tons of plugins available  for free.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, mdx(\"em\", {\n    parentName: \"strong\"\n  }, \"TailwindCSS and Styled components\")), \": for style.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, mdx(\"em\", {\n    parentName: \"strong\"\n  }, \"Vercel.com\")), \": This is where I deployed the front-end. Vercel has one of  the most generous free plan of all the static site hosting providers out there.\"), mdx(\"h3\", null, \"Back-end\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, mdx(\"em\", {\n    parentName: \"strong\"\n  }, \"Golang\")), \": I really like Go for its simplicity and versatility, plus it's really fast, C kinda fast, and has a better concurrency support. The community  is also good, it wasn't that hard to find what I needed. \"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, mdx(\"em\", {\n    parentName: \"strong\"\n  }, \"FaunaDB\")), \": FaunaDB is the new kid on the block when it comes to databases. It has   support for Graphql and it's only query language called FQL. Go is one of the official libraries supported by fauna. It also has a generous free plan.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, mdx(\"em\", {\n    parentName: \"strong\"\n  }, \"Redis\")), \": Used Redis for keeping track logged in users.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, mdx(\"em\", {\n    parentName: \"strong\"\n  }, \"Stripe\")), \": We've partnered with stripe for payment processing. \"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, mdx(\"em\", {\n    parentName: \"strong\"\n  }, \"Mailgun & mailchimp\")), \": For mailing, I've used those two\"), mdx(\"h3\", null, \"DevOps\"), mdx(\"p\", null, \"For testing and staging, I have containerized the app  with docker and deployed it on a ubuntu server hosted by Linode. As for production, I deployed the app on digital ocean's new app platform to get pressure of managing my own server off my shoulders.\"), mdx(\"h2\", null, \"Why am I telling you this?\"), mdx(\"p\", null, \"Like I said, we will be building full blown real world apps, some of which I will be deploying on the app store, so we will eventually end up using all of those technologies I have just  listed above and more.\"), mdx(\"h2\", null, \"Brand new free mini course\"), mdx(\"p\", null, \"On top of the existing free courses on the website, there is one more coming... Watch the video to see what we will build. \"), mdx(Video, {\n    videoUrl: \"https://player.vimeo.com/video/485567763\",\n    mdxType: \"Video\"\n  }), mdx(\"p\", null, \"I am planning to release 4 to 5 parts of this mini course because the main focus right now is to finish the first premium course. If you are a email subscriber, you will still get an email every time a new course lesson or a blog article is release, but this time I will not be including the source code link  because everything you will already be on the course page.\"), mdx(\"p\", null, mdx(\"img\", _extends({\n    parentName: \"p\"\n  }, {\n    \"src\": \"https://res.cloudinary.com/liquidcoder/image/upload/v1606812574/Blog/Announcement/u9x9pglatmr9psb98dff.png\",\n    \"alt\": \"https://res.cloudinary.com/liquidcoder/image/upload/v1606812574/Blog/Announcement/u9x9pglatmr9psb98dff.png\"\n  }))), mdx(\"h2\", null, \"Premium courses coming soon\"), mdx(\"p\", null, \"The first premium course is on the way, I will share more details in the coming couple of weeks, but all I can say now is that the project will be massive and amazing, hope you will like it.\"));\n}\n;\nMDXContent.isMDXComponent = true;","excerpt":"New website Hey guys, after more than four months without posting anything, I am back with a lots of content  free and premium . I spent quite some time building a new  website that you can find  here . How does the website work? I will be providing free and premium courses starting with the apple…"}}}},"pageContext":{"slug":"lets_build_real_world_apps"}},"staticQueryHashes":["1047155515","1278771865","2517639938","2517639938","2537039069","3452127246","3566879862","3891201089","439617394","670651827"]}