{"data":{"siteYaml":{"organisersTitle":"Organisers","sponsorsTitle":"Sponsors","pageInformation":{"heading1":"About Elixir Sydney","paragraph1":"We meet the 3rd Wednesday of each month to talk about Elixir and Erlang and associated technologies. Most months we have talks but we sometimes host practical coding nights. Beginners are always welcome to join and we try to keep talks accessible to those new to the language and ecosystem."}},"allEventMdx":{"edges":[{"node":{"date":"18 March 2025","time":"6:00 - 8:00 PM","title":"SPA-like UX with MVC-like DX, and ​Writing the book on Ash","body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }\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; }\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/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"path\": \"/events/ashframeworkbook\",\n  \"date\": \"2025-03-18T00:00:00.000Z\",\n  \"time\": \"6:00 - 8:00 PM\",\n  \"title\": \"SPA-like UX with MVC-like DX, and ​Writing the book on Ash\",\n  \"location\": \"online-location\",\n  \"organisers\": [\"josh-price\", \"mike-buhot\"],\n  \"sponsors\": [\"alembic\"],\n  \"talks\": [{\n    \"speaker\": \"mike-buhot\",\n    \"title\": \"SPA-like UX with MVC-like DX: InertiaJS with React and Phoenix\",\n    \"description\": \"​Mike will share what he's recently learnt trying out InertiaJS with a React Frontend and a Phoenix Backend. TL,DR: The user experience feels like a SPA while the developer experience feels like MVC.\"\n  }, {\n    \"speaker\": \"rebecca-le\",\n    \"title\": \"​Writing the book on Ash\",\n    \"description\": \"​The Ash Framework book beta landed last month! Written by Rebecca Le and Zach Daniel, this essential guide for building declarative Elixir web apps using the Ash Framework should be part of every Elixir developers' game-changing toolkit. Join Rebecca as she shares the journey of putting their expertise to paper.\"\n  }],\n  \"description\": null\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Hey Elixir community! Welcome to the first Elixir Sydney meetup for 2025 - this is online, so come and join us from wherever you are.\"), mdx(\"p\", null, \"Got an idea for an Elixir talk? We\\u2019d love to hear it! Whether you\\u2019re an experienced developer with deep insights or just starting out and excited to share what you\\u2019ve learned, our meetups are a great place to connect, learn, and grow.\"), mdx(\"p\", null, \"Not ready to give a talk? No worries! Come along to meet fellow Elixir enthusiasts, ask questions, and get guidance from more experienced developers. Everyone is welcome \\u2014 no matter your skill level!\"), mdx(\"p\", null, \"If you\\u2019d like to submit a talk idea, just drop us a message\\u2014we\\u2019re happy to help you shape it into a great presentation!\"), mdx(\"p\", null, \"Josh and Mike\"));\n}\n;\nMDXContent.isMDXComponent = true;","location":{"name":"Online","mapUrl":"https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d29332256.25226939!2d133.41701195!3d-26.1772288!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x2b2bfd076787c5df%3A0x538267a1955b1352!2sAustralia!5e0!3m2!1sen!2sau!4v1741038947462!5m2!1sen!2sau","address":"Zoom","instructions":"A zoom link will be provided"},"organisers":[{"name":"Josh Price","avatarUrl":"https://secure.meetupstatic.com/photos/member/4/5/c/e/highres_12197870.jpeg","company":"Alembic","companyUrl":"https://alembic.com.au/"},{"name":"Mike Buhot","avatarUrl":"https://secure.meetupstatic.com/photos/member/9/3/4/d/highres_311617709.jpeg","company":"Alembic","companyUrl":"https://alembic.com.au/"}],"sponsors":[{"name":"Alembic","logoUrl":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDIxLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA0OTcuMyAxMzAuMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDk3LjMgMTMwLjE7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojRUYzRTI0O30KCS5zdDF7ZmlsbDojOTJDNEU5O30KPC9zdHlsZT4KPGc+Cgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNODguOSw2NS4xYzAtMTcuOS0xNC41LTMyLjQtMzIuNC0zMi40Yy0xNy45LDAtMzIuNCwxNC42LTMyLjQsMzIuNGMwLDE3LjksMTQuNSwzMi40LDMyLjQsMzIuNGgwbDE5LjgtMC4yCgkJbDAuMS0zMy41bC0wLjEsMGMtMC41LTEwLjItOS0xOC40LTE5LjQtMTguNGMtMTAuNywwLTE5LjQsOC42LTE5LjQsMTkuM2MtMC4xLDEwLjMsOCwxOC44LDE4LjEsMTkuNWMwLjQsMCw5LjcsMCw5LjcsMAoJCWMwLTIuMSwwLjEtNC42LTIuNC01LjhjLTEuNS0wLjctNC41LTAuNC03LjctMC42Yy02LjYtMC42LTExLjYtNi42LTExLjMtMTMuNWMwLjMtNi44LDUuOC0xMi4zLDEyLjYtMTIuNgoJCWM3LjUtMC4zLDEzLjYsNS43LDEzLjYsMTMuMWgwTDcwLjEsOTFsLTEzLjYsMC4xYy0xNC40LDAtMjYuMS0xMS44LTI2LjEtMjYuMmMwLTE0LjMsMTEuNy0yNiwyNi4xLTI2YzE0LjQsMCwyNi4yLDExLjcsMjYuMiwyNi4xCgkJTDgyLjcsOTFjLTAuMiw0LjksMC45LDYuNSw2LjMsNi4zaDBMODguOSw2NS4xeiIvPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTEzNy40LDM1LjNjLTAuNC0xLjItMS43LTItMy4xLTJjLTEuMywwLTIuNiwwLjgtMy4xLDJsLTIxLjksNTguNGMtMC4zLDAuOC0wLjMsMS43LDAuMSwyLjUKCQkJYzAuMywwLjgsMSwxLjQsMS43LDEuN2wwLjIsMC4xaDAuMmMwLjEsMCwwLjIsMCwwLjMsMGMwLjIsMCwwLjQsMCwwLjUsMGMxLjMsMCwyLjUtMC44LDMtMi4xbDUuMy0xNC4ySDE0OGw1LjMsMTQuMgoJCQljMC41LDEuMiwxLjcsMi4xLDMsMi4xYzAuMiwwLDAuNCwwLDAuNS0wLjFjMC4xLDAsMC4yLDAsMC4zLDBoMC4ybDAuMi0wLjFjMS42LTAuNywyLjQtMi42LDEuNy00LjJMMTM3LjQsMzUuM3ogTTE0NS42LDc1LjNIMTIzCgkJCWwxMS4zLTMwTDE0NS42LDc1LjN6Ii8+CgkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTIwNi45LDkxLjZoLTI5LjFWMzYuMmMwLTEuNy0xLjUtMy4yLTMuMi0zLjJjLTEuNywwLTMuMiwxLjQtMy4yLDMuMnY1OC43YzAsMS43LDEuNCwzLjIsMy4yLDMuMmgzMi40CgkJCWMxLjgsMCwzLjItMS40LDMuMi0zLjJDMjEwLjEsOTMsMjA4LjcsOTEuNiwyMDYuOSw5MS42eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0yNTcuNiwzOS40YzEuOCwwLDMuMi0xLjQsMy4yLTMuMmMwLTEuOC0xLjQtMy4yLTMuMi0zLjJoLTMyLjRjLTEuNywwLTMuMiwxLjQtMy4yLDMuMnY1OC43CgkJCWMwLDEuNywxLjIsMywzLDMuMmgzMi42YzEuOCwwLDMuMi0xLjQsMy4yLTMuMmMwLTEuOS0xLjQtMy4yLTMuMi0zLjJoLTI5LjFWNjguOGgyNS40YzEuNywwLDMuMi0xLjQsMy4yLTMuMgoJCQljMC0xLjgtMS40LTMuMi0zLjItMy4yaC0yNS40VjM5LjRIMjU3LjZ6Ii8+CgkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTMyOS44LDM0LjhjLTAuMi0wLjQtMC41LTAuNi0wLjgtMC45bC0wLjItMC4xYy0xLjUtMS0zLjUtMC42LTQuNCwwLjhsLTIxLjUsMjkuOWwtMjEuNi0yOS45CgkJCWMtMS0xLjQtMi45LTEuNy00LjQtMC44bC0wLjEsMC4xYy0wLjEsMC4xLTAuMiwwLjItMC4zLDAuM2MtMC43LDAuNi0xLjEsMS40LTEuMSwyLjR2NTguM2MwLDEuNywxLjUsMy4yLDMuMiwzLjIKCQkJYzEuNywwLDMuMi0xLjQsMy4yLTMuMlY0Ni4ybDE4LjMsMjUuM2MwLjYsMSwxLjUsMS41LDIuNywxLjVoMC4yYzEuMSwwLDIuMS0wLjUsMi42LTEuNEwzMjQsNDYuMXY0OC43YzAsMS44LDEuNCwzLjIsMy4yLDMuMgoJCQljMS43LDAsMy4yLTEuNCwzLjItMy4yVjM2LjVjMC0wLjUtMC4yLTEtMC41LTEuNkwzMjkuOCwzNC44eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0zNzQuNCw2MS43YzMuMy0zLjIsNS4xLTcuNCw1LjEtMTEuOWMwLTkuMi03LjUtMTYuNy0xNi43LTE2LjdoLTE0Yy0xLjcsMC0zLjIsMS40LTMuMiwzLjJ2NTguNwoJCQljMCwxLjcsMS40LDMuMiwzLjIsMy4yaDE4YzEwLjUsMCwxOS04LjUsMTktMTlDMzg1LjgsNzEuNSwzODEuMyw2NC43LDM3NC40LDYxLjd6IE0zNTIuMSw1OS45VjM5LjRoMTAuOAoJCQljNS43LDAsMTAuMiw0LjYsMTAuMiwxMC4zYzAsNS42LTQuNiwxMC4yLTEwLjIsMTAuMkgzNTIuMXogTTM3OS40LDc5Yy0wLjEsNy4xLTUuNiwxMi42LTEyLjYsMTIuNmgtMTQuN1Y2Ni40aDE0LjcKCQkJQzM3My43LDY2LjQsMzc5LjMsNzIuMSwzNzkuNCw3OXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNNDAyLDMzYy0xLjcsMC0zLjIsMS40LTMuMiwzLjJ2NTguN2MwLDEuNywxLjQsMy4yLDMuMiwzLjJjMS44LDAsMy4yLTEuNCwzLjItMy4yVjM2LjIKCQkJQzQwNS4zLDM0LjQsNDAzLjgsMzMsNDAyLDMzeiIvPgoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik00NzAuNSw4NS4xYy0wLjktMC4yLTEuOSwwLTIuNywwLjVsLTAuMSwwLjFjLTQuNSwzLjgtMTAuNSw1LjktMTYuOCw1LjljLTE1LjEsMC0yNy4zLTExLjgtMjcuMy0yNi40CgkJCWMwLTE0LjcsMTIuMy0yNi43LDI3LjMtMjYuN2M2LjIsMCwxMi4xLDIsMTcsNS45YzAuNywwLjUsMS42LDAuOCwyLjQsMC42YzAuOC0wLjEsMS41LTAuNiwyLTEuMmMwLjUtMC42LDAuOC0xLjMsMC43LTIuMQoJCQljMC0xLTAuNS0xLjgtMS4zLTIuNWMtNi00LjYtMTMuNC03LjEtMjEtNy4xaDBjLTE4LjksMC4xLTMzLjgsMTQuNi0zMy44LDMzLjFjMCwxOC4xLDE1LjEsMzIuOCwzMy44LDMyLjhjNy42LDAsMTUuMS0yLjUsMjAuOS03CgkJCWMwLjctMC41LDEuMi0xLjQsMS4zLTIuNGMwLTAuOC0wLjItMS42LTAuOC0yLjJDNDcxLjksODUuOCw0NzEuMyw4NS4zLDQ3MC41LDg1LjF6Ii8+Cgk8L2c+CjwvZz4KPC9zdmc+Cg==","websiteUrl":"https://alembic.com.au/"}],"talks":[{"speaker":{"name":"Mike Buhot","avatarUrl":"https://secure.meetupstatic.com/photos/member/9/3/4/d/highres_311617709.jpeg"},"title":"SPA-like UX with MVC-like DX: InertiaJS with React and Phoenix","description":"​Mike will share what he's recently learnt trying out InertiaJS with a React Frontend and a Phoenix Backend. TL,DR: The user experience feels like a SPA while the developer experience feels like MVC.","photos":null,"slides":null,"video":null},{"speaker":{"name":"Rebecca Le","avatarUrl":"https://sevenseacat.net/images/indy.jpg"},"title":"​Writing the book on Ash","description":"​The Ash Framework book beta landed last month! Written by Rebecca Le and Zach Daniel, this essential guide for building declarative Elixir web apps using the Ash Framework should be part of every Elixir developers' game-changing toolkit. Join Rebecca as she shares the journey of putting their expertise to paper.","photos":null,"slides":null,"video":null}]}}]}}}