{"globalConfig":{"gtm":"GTM-M4QQZ6WN","github":"https://github.com/assad-ali","linkedin":"https://www.linkedin.com/in/assad-ali-0389499b/","twitter":"https://x.com/aalidev","seo":{"id":11,"metaTitle":null,"metaDescription":"A JavaScript-focused developer passionate about web motion, interactive experiences and modern front-end frameworks.","siteName":"Assad Ali, Senior Frontend Developer","siteUrl":"https://www.assadali.dev/","canonicalUrl":null,"ogType":"website","ogImageAlt":null,"twitterCard":"summary_large_image","keywords":null,"robots":"index,follow","schemaJson":null,"ogImage":{"id":5,"documentId":"u9h5rahq5zkec0k5er44mq1f","name":"hero-image.jpg","alternativeText":"Black-and-white portrait of Assad Ali, a bearded man in a plaid shirt, looking to the side with trees in the background.\"","caption":null,"focalPoint":null,"width":130,"height":136,"formats":null,"hash":"hero_image_a41149b69c","ext":".jpg","mime":"image/jpeg","size":3.97,"url":"https://cdn.assadali.dev/hero_image_a41149b69c.jpg","previewUrl":null,"provider":"aws-s3","provider_metadata":null,"createdAt":"2026-07-03T23:41:02.773Z","updatedAt":"2026-07-06T10:18:33.433Z","publishedAt":"2026-07-03T23:41:02.775Z"}}},"pages":[{"id":11,"documentId":"ftkbn3wgfi6q1kwq9rl56fob","title":"Contact","slug":"contact","createdAt":"2026-07-04T22:57:43.037Z","updatedAt":"2026-07-04T23:10:24.290Z","publishedAt":"2026-07-04T23:10:24.336Z","seo":null,"pageContent":[{"id":3,"heading":"Say hello.","subtitle":"Whether you have a specific project in mind or just want to explore what's possible, let’s talk.","body":[{"type":"paragraph","children":[{"text":"Email me at ","type":"text"},{"url":"mailto: contact@assadali.dev","type":"link","children":[{"text":"contact@assadali.dev","type":"text"}]},{"text":" for project enquiries. ","type":"text"}]},{"type":"paragraph","children":[{"text":"I focus my energy off social media, but I always keep an eye out for inspiration, new messages and interesting connections.","type":"text"}]}],"__component":"blocks.contact-intro"}]},{"id":16,"documentId":"yxtifsko8mx60b6m6uemu2u4","title":"Work","slug":"work","createdAt":"2026-07-04T23:12:47.591Z","updatedAt":"2026-07-04T23:13:03.593Z","publishedAt":"2026-07-04T23:13:03.623Z","seo":null,"pageContent":[{"id":2,"heading":"Work.","__component":"blocks.work-list"}]},{"id":18,"documentId":"edn74t9alpnzmy1pyed6t4k1","title":"Blog","slug":"blog","createdAt":"2026-07-04T23:13:34.094Z","updatedAt":"2026-07-04T23:13:35.116Z","publishedAt":"2026-07-04T23:13:35.145Z","seo":null,"pageContent":[{"id":2,"heading":"Blog.","__component":"blocks.blog-list"}]},{"id":19,"documentId":"f433m3luvj9nhtqaquiqcnda","title":"About","slug":"about","createdAt":"2026-07-04T23:11:21.799Z","updatedAt":"2026-07-04T23:13:52.460Z","publishedAt":"2026-07-04T23:13:52.504Z","seo":null,"pageContent":[{"id":4,"heading":"About me.","subtitle":"A problem solver using web technologies.","body":[{"type":"paragraph","children":[{"text":"Born and raised in NZ, currently based in Auckland. I've spent the last 14+ years building solutions for small local businesses, digital agencies, major corporations, and everything in between.","type":"text"}]},{"type":"paragraph","children":[{"text":"Coming from an era where end-to-end ownership and project delivery was the norm, I'd describe myself today as a JavaScript-focused developer who is genuinely passionate about web motion, interactive experiences, and modern front-end frameworks.","type":"text"}]},{"type":"paragraph","children":[{"text":"I currently ","type":"text"},{"url":"internal://yxtifsko8mx60b6m6uemu2u4","type":"link","children":[{"text":"work","type":"text"}]},{"text":" as a Senior Frontend Developer at ","type":"text"},{"url":"https://www.satellite.co.nz/","type":"link","children":[{"text":"Satellite Media","type":"text"}]},{"text":", where I blend creativity with technology to build immersive yet practical digital experiences.","type":"text"}]},{"type":"paragraph","children":[{"text":"I believe every impactful project starts with a rock-solid foundation, prioritising maintainable architecture, clean semantics, performance, SEO, and accessibility before layering on the interactive elements.","type":"text"}]},{"type":"paragraph","children":[{"text":"I like to get away from the screen as much as possible during my spare time, spending time with family, touching grass, and being a nerd.","type":"text"}]},{"type":"paragraph","children":[{"text":"If you want to chat about a project or just say hello, feel free to ","type":"text"},{"url":"internal://ftkbn3wgfi6q1kwq9rl56fob","type":"link","children":[{"text":"reach out","type":"text"}]},{"text":".","type":"text"}]},{"type":"paragraph","children":[{"text":"","type":"text"}]}],"image":{"id":5,"documentId":"u9h5rahq5zkec0k5er44mq1f","name":"hero-image.jpg","alternativeText":"Black-and-white portrait of Assad Ali, a bearded man in a plaid shirt, looking to the side with trees in the background.\"","caption":null,"focalPoint":null,"width":130,"height":136,"formats":null,"hash":"hero_image_a41149b69c","ext":".jpg","mime":"image/jpeg","size":3.97,"url":"https://cdn.assadali.dev/hero_image_a41149b69c.jpg","previewUrl":null,"provider":"aws-s3","provider_metadata":null,"createdAt":"2026-07-03T23:41:02.773Z","updatedAt":"2026-07-06T10:18:33.433Z","publishedAt":"2026-07-03T23:41:02.775Z"},"__component":"blocks.about"}]},{"id":21,"documentId":"llbm9o92rapgzlbff2jhj66t","title":"Home","slug":"home","createdAt":"2026-07-01T11:03:41.731Z","updatedAt":"2026-07-04T23:27:47.815Z","publishedAt":"2026-07-04T23:27:47.875Z","seo":null,"pageContent":[{"id":8,"heading":"<span>I&rsquo;m</span> Assad Ali.","subtitle":"A problem solver using web technologies.","body":[{"type":"paragraph","children":[{"text":"A JavaScript-focused developer passionate about web motion, interactive experiences and modern front-end frameworks.","type":"text"}]},{"type":"paragraph","children":[{"text":"I currently ","type":"text"},{"url":"internal://yxtifsko8mx60b6m6uemu2u4","type":"link","children":[{"text":"work","type":"text"}]},{"text":" as a Senior Frontend Developer at ","type":"text"},{"url":"https://www.satellite.co.nz/","type":"link","children":[{"text":"Satellite Media","type":"text"}]},{"text":", where I blend creativity with technology to build immersive yet practical digital experiences. ","type":"text"}]}],"image":{"id":5,"documentId":"u9h5rahq5zkec0k5er44mq1f","name":"hero-image.jpg","alternativeText":"Black-and-white portrait of Assad Ali, a bearded man in a plaid shirt, looking to the side with trees in the background.\"","caption":null,"focalPoint":null,"width":130,"height":136,"formats":null,"hash":"hero_image_a41149b69c","ext":".jpg","mime":"image/jpeg","size":3.97,"url":"https://cdn.assadali.dev/hero_image_a41149b69c.jpg","previewUrl":null,"provider":"aws-s3","provider_metadata":null,"createdAt":"2026-07-03T23:41:02.773Z","updatedAt":"2026-07-06T10:18:33.433Z","publishedAt":"2026-07-03T23:41:02.775Z"},"__component":"blocks.homepage-intro"},{"id":2,"body":[{"type":"paragraph","children":[{"text":"I use my ","type":"text"},{"url":"internal://edn74t9alpnzmy1pyed6t4k1","type":"link","children":[{"text":"blog","type":"text"}]},{"text":" as an open notebook for random notes, ideas, thoughts and whatever else happens to catch my attention.","type":"text"}]}],"__component":"blocks.homepage-recent-blog-posts"}]}],"projects":[{"id":74,"documentId":"v0w026vxrvd71gedb5vnd90y","title":"TAG Platform","slug":"work/tag-platform","order":1,"summary":"Collaborated within a multi-disciplinary engineering team to architect and expand the client-side layer of Satellite's proprietary, multi-tenant enterprise event engine. ","lead":"Collaborated within a multi-disciplinary engineering team to architect and expand the client-side layer of Satellite's proprietary, multi-tenant enterprise event engine. ","createdAt":"2026-07-01T11:05:12.851Z","updatedAt":"2026-07-06T10:24:01.304Z","publishedAt":"2026-07-06T10:24:01.541Z","image":{"id":6,"documentId":"a5qwqnnzyubl137v7ic2ug5p","name":"tag.webp","alternativeText":null,"caption":null,"focalPoint":null,"width":994,"height":365,"formats":{"small":{"ext":".webp","url":"https://cdn.assadali.dev/small_tag_202645e0cd.webp","etag":"e1a571ca77382e760b899221960d3ce0","hash":"small_tag_202645e0cd","mime":"image/webp","name":"small_tag.webp","path":null,"size":6.79,"width":500,"height":184,"sizeInBytes":6786},"medium":{"ext":".webp","url":"https://cdn.assadali.dev/medium_tag_202645e0cd.webp","etag":"aee5dac7e195114624a07aa4b1563dbc","hash":"medium_tag_202645e0cd","mime":"image/webp","name":"medium_tag.webp","path":null,"size":10.22,"width":750,"height":275,"sizeInBytes":10216},"thumbnail":{"ext":".webp","url":"https://cdn.assadali.dev/thumbnail_tag_202645e0cd.webp","etag":"133e1425cfd58659fec9114de89325c5","hash":"thumbnail_tag_202645e0cd","mime":"image/webp","name":"thumbnail_tag.webp","path":null,"size":3.08,"width":245,"height":90,"sizeInBytes":3076}},"hash":"tag_202645e0cd","ext":".webp","mime":"image/webp","size":14.85,"url":"https://cdn.assadali.dev/tag_202645e0cd.webp","previewUrl":null,"provider":"aws-s3","provider_metadata":null,"createdAt":"2026-07-04T23:42:47.769Z","updatedAt":"2026-07-04T23:42:47.769Z","publishedAt":"2026-07-04T23:42:47.770Z"},"parent":{"id":16,"documentId":"yxtifsko8mx60b6m6uemu2u4","title":"Work","slug":"work","createdAt":"2026-07-04T23:12:47.591Z","updatedAt":"2026-07-04T23:13:03.593Z","publishedAt":"2026-07-04T23:13:03.623Z"},"tags":[{"id":2,"documentId":"d99o13jrb98n4j3d7klg05yg","name":"Bootstrap","slug":"bootstrap","createdAt":"2026-07-01T11:02:53.752Z","updatedAt":"2026-07-01T11:02:54.840Z","publishedAt":"2026-07-01T11:02:54.861Z"},{"id":6,"documentId":"yhelpp4miwjvbctvydj2y7py","name":"Vue.js","slug":"vue-js","createdAt":"2026-07-01T11:03:20.792Z","updatedAt":"2026-07-01T11:03:22.107Z","publishedAt":"2026-07-01T11:03:22.126Z"},{"id":4,"documentId":"bnxpzrktqrlm7tvy98ryzehr","name":"Symfony","slug":"symfony","createdAt":"2026-07-01T11:03:05.870Z","updatedAt":"2026-07-01T11:03:07.100Z","publishedAt":"2026-07-01T11:03:07.132Z"}],"seo":null,"projectContent":[{"id":72,"body":[{"type":"paragraph","children":[{"text":"Responsible for building highly extensible frontend modules, managing complex application state (Vue 3, Pinia/Vuex, Composables, Composition API), and developing fluid, responsive interfaces (heavily customised, theme-able and layered Bootstrap design system) to support high-scale ticketing pipelines, dynamic user portals, registration, lead capture and personalised delegate web applications.","type":"text"}]},{"type":"paragraph","children":[{"text":"Find out more information about ","type":"text"},{"url":"https://www.satellite.co.nz/events/satellite-tag","type":"link","children":[{"text":"TAG","type":"text"}]},{"text":".","type":"text"}]}],"__component":"content.rich-text"}]},{"id":77,"documentId":"omplrr30mj7erf0tf02iw31s","title":"Mediaworks","slug":"work/mediaworks","order":2,"summary":"Led the frontend architecture and development of a suite of high-traffic web games for MediaWorks NZ.","lead":"Led the frontend architecture and development of a suite of high-traffic web games for MediaWorks NZ.","createdAt":"2026-07-05T02:13:22.915Z","updatedAt":"2026-07-06T10:45:14.541Z","publishedAt":"2026-07-06T10:45:14.597Z","image":{"id":15,"documentId":"wqw829c08u99bjc6i5a72jeo","name":"ezmoney.webp","alternativeText":null,"caption":null,"focalPoint":null,"width":1005,"height":565,"formats":{"large":{"ext":".webp","url":"https://cdn.assadali.dev/large_ezmoney_aea968f77f.webp","etag":"1781df2421f00100bf4ac8d1e922fa58","hash":"large_ezmoney_aea968f77f","mime":"image/webp","name":"large_ezmoney.webp","path":null,"size":22.1,"width":1000,"height":562,"sizeInBytes":22098},"small":{"ext":".webp","url":"https://cdn.assadali.dev/small_ezmoney_aea968f77f.webp","etag":"7d4d021bef07f126329a365fda910052","hash":"small_ezmoney_aea968f77f","mime":"image/webp","name":"small_ezmoney.webp","path":null,"size":10.51,"width":500,"height":281,"sizeInBytes":10510},"medium":{"ext":".webp","url":"https://cdn.assadali.dev/medium_ezmoney_aea968f77f.webp","etag":"ed22086e952501edd414f3d4fa76d76d","hash":"medium_ezmoney_aea968f77f","mime":"image/webp","name":"medium_ezmoney.webp","path":null,"size":16.32,"width":750,"height":422,"sizeInBytes":16318},"thumbnail":{"ext":".webp","url":"https://cdn.assadali.dev/thumbnail_ezmoney_aea968f77f.webp","etag":"9beeb3395bf1be696f0cd17f07d24130","hash":"thumbnail_ezmoney_aea968f77f","mime":"image/webp","name":"thumbnail_ezmoney.webp","path":null,"size":4.44,"width":245,"height":138,"sizeInBytes":4442}},"hash":"ezmoney_aea968f77f","ext":".webp","mime":"image/webp","size":23.47,"url":"https://cdn.assadali.dev/ezmoney_aea968f77f.webp","previewUrl":null,"provider":"aws-s3","provider_metadata":null,"createdAt":"2026-07-05T02:14:39.332Z","updatedAt":"2026-07-05T02:14:39.332Z","publishedAt":"2026-07-05T02:14:39.332Z"},"parent":{"id":16,"documentId":"yxtifsko8mx60b6m6uemu2u4","title":"Work","slug":"work","createdAt":"2026-07-04T23:12:47.591Z","updatedAt":"2026-07-04T23:13:03.593Z","publishedAt":"2026-07-04T23:13:03.623Z"},"tags":[{"id":8,"documentId":"qsb4govqyk5eg6khf625ar8m","name":"TAG","slug":"tag","createdAt":"2026-07-05T00:04:17.901Z","updatedAt":"2026-07-05T00:04:19.460Z","publishedAt":"2026-07-05T00:04:19.479Z"},{"id":6,"documentId":"yhelpp4miwjvbctvydj2y7py","name":"Vue.js","slug":"vue-js","createdAt":"2026-07-01T11:03:20.792Z","updatedAt":"2026-07-01T11:03:22.107Z","publishedAt":"2026-07-01T11:03:22.126Z"},{"id":2,"documentId":"d99o13jrb98n4j3d7klg05yg","name":"Bootstrap","slug":"bootstrap","createdAt":"2026-07-01T11:02:53.752Z","updatedAt":"2026-07-01T11:02:54.840Z","publishedAt":"2026-07-01T11:02:54.861Z"},{"id":20,"documentId":"nk09j3p9ngnpjrtn0qpzlmu2","name":"AI","slug":"ai","createdAt":"2026-07-05T02:09:18.547Z","updatedAt":"2026-07-05T02:09:19.793Z","publishedAt":"2026-07-05T02:09:19.805Z"}],"seo":null,"projectContent":[{"id":75,"body":[{"type":"paragraph","children":[{"text":"","type":"text"},{"url":"https://www.rova.nz/win/churdle","type":"link","children":[{"text":"Churdle","type":"text"}]},{"text":", ","type":"text"},{"url":"https://www.rova.nz/win/more-fms-pop-quiz","type":"link","children":[{"text":"Pop Quiz","type":"text"}]},{"text":", ","type":"text"},{"url":"https://www.rova.nz/win/the-edge-win-with-ez-money","type":"link","children":[{"text":"E-Z Money","type":"text"}]},{"text":". Built entirely with Vue.js components integrated into a unified backend platform, the project featured real-time AI answer validation, synchronized audio, heavy animations, and custom brand theming via Bootstrap. Engineered to be fully responsive and performant under massive traffic spikes, the games tracked granular user interactions and telemetry hooks seamlessly.","type":"text"}]},{"type":"paragraph","children":[{"text":"","type":"text"}]}],"__component":"content.rich-text"},{"id":76,"body":[{"type":"paragraph","children":[{"text":"Built entirely with Vue.js components integrated into a unified backend platform, the project featured real-time AI answer validation, synchronised audio, heavy animations, and custom brand theming via Bootstrap. Engineered to be fully responsive and performant under massive traffic spikes, the games tracked granular user interactions and telemetry hooks seamlessly.","type":"text"}]}],"__component":"content.rich-text"}]},{"id":19,"documentId":"ldvrev0l4hbsnor80o04g7y4","title":"Phantom Billstickers, Paste","slug":"work/phantom-billstickers-paste","order":3,"summary":"Spearheaded the complete legacy frontend modernisation of a mission-critical internal tool and workflow management system.","lead":"Spearheaded the complete legacy frontend modernisation of a mission-critical internal tool and workflow management system that drives the company's entire business pipeline (leads, quotes, high-concurrency invoicing, placement logistics, and automated PDF/email generation).","createdAt":"2026-07-05T00:33:43.656Z","updatedAt":"2026-07-05T00:40:33.454Z","publishedAt":"2026-07-05T00:40:33.530Z","image":{"id":8,"documentId":"zcsq928zzi1cyxn10pfzy1ap","name":"phantom.webp","alternativeText":null,"caption":null,"focalPoint":null,"width":994,"height":702,"formats":{"small":{"ext":".webp","url":"https://cdn.assadali.dev/small_phantom_e7c7e6cff5.webp","etag":"29483f8caf41acb1bf1c6e60e2e06d98","hash":"small_phantom_e7c7e6cff5","mime":"image/webp","name":"small_phantom.webp","path":null,"size":39.15,"width":500,"height":353,"sizeInBytes":39154},"medium":{"ext":".webp","url":"https://cdn.assadali.dev/medium_phantom_e7c7e6cff5.webp","etag":"e1d69910411cd7bac44f3f49548d5184","hash":"medium_phantom_e7c7e6cff5","mime":"image/webp","name":"medium_phantom.webp","path":null,"size":72.82,"width":750,"height":530,"sizeInBytes":72822},"thumbnail":{"ext":".webp","url":"https://cdn.assadali.dev/thumbnail_phantom_e7c7e6cff5.webp","etag":"912e67ec716fac5a15b0c2098de78809","hash":"thumbnail_phantom_e7c7e6cff5","mime":"image/webp","name":"thumbnail_phantom.webp","path":null,"size":9.97,"width":221,"height":156,"sizeInBytes":9966}},"hash":"phantom_e7c7e6cff5","ext":".webp","mime":"image/webp","size":127.74,"url":"https://cdn.assadali.dev/phantom_e7c7e6cff5.webp","previewUrl":null,"provider":"aws-s3","provider_metadata":null,"createdAt":"2026-07-05T00:40:28.574Z","updatedAt":"2026-07-05T00:40:28.574Z","publishedAt":"2026-07-05T00:40:28.575Z"},"parent":{"id":16,"documentId":"yxtifsko8mx60b6m6uemu2u4","title":"Work","slug":"work","createdAt":"2026-07-04T23:12:47.591Z","updatedAt":"2026-07-04T23:13:03.593Z","publishedAt":"2026-07-04T23:13:03.623Z"},"tags":[{"id":14,"documentId":"mce1jir4hy26gofl95qtov4b","name":"Angular","slug":"angular","createdAt":"2026-07-05T00:33:54.341Z","updatedAt":"2026-07-05T00:33:55.225Z","publishedAt":"2026-07-05T00:33:55.246Z"},{"id":6,"documentId":"yhelpp4miwjvbctvydj2y7py","name":"Vue.js","slug":"vue-js","createdAt":"2026-07-01T11:03:20.792Z","updatedAt":"2026-07-01T11:03:22.107Z","publishedAt":"2026-07-01T11:03:22.126Z"},{"id":2,"documentId":"d99o13jrb98n4j3d7klg05yg","name":"Bootstrap","slug":"bootstrap","createdAt":"2026-07-01T11:02:53.752Z","updatedAt":"2026-07-01T11:02:54.840Z","publishedAt":"2026-07-01T11:02:54.861Z"},{"id":4,"documentId":"bnxpzrktqrlm7tvy98ryzehr","name":"Symfony","slug":"symfony","createdAt":"2026-07-01T11:03:05.870Z","updatedAt":"2026-07-01T11:03:07.100Z","publishedAt":"2026-07-01T11:03:07.132Z"}],"seo":null,"projectContent":[{"id":14,"body":[{"type":"paragraph","children":[{"text":"Partnered with a backend engineer executing parallel Symfony framework upgrades to systematically refactor a legacy Angular 1.x codebase into a modern, production-grade Vue 3 ecosystem (Composition API, Pinia, Composables). Executed a meticulous, batch-based incremental migration strategy that allowed continuous daily operation and zero workflow disruption for internal business users throughout the ","type":"text"},{"url":"https://www.satellite.co.nz/work/business-solutions/phantom-billstickers","type":"link","children":[{"text":"system overhaul","type":"text"}]},{"text":".","type":"text"}]}],"__component":"content.rich-text"}]},{"id":72,"documentId":"v7hlu5l3nzabwp60k228noe6","title":"Fonterra KickStart Breakfast","slug":"work/fonterra-kick-start-breakfast","order":4,"summary":"Developed the entire UI layer for the enterprise school management software, which facilitates the nationwide KickStart Breakfast programme.","lead":"Developed the entire UI layer for the enterprise school management software, which facilitates the nationwide KickStart Breakfast programme.","createdAt":"2026-07-05T00:42:49.153Z","updatedAt":"2026-07-05T05:46:38.765Z","publishedAt":"2026-07-05T05:46:38.863Z","image":{"id":9,"documentId":"j99balxds696d58dmc9kfj9t","name":"ksb.webp","alternativeText":null,"caption":null,"focalPoint":null,"width":998,"height":447,"formats":{"small":{"ext":".webp","url":"https://cdn.assadali.dev/small_ksb_9ea3be909c.webp","etag":"98ad6b6caea5509b6833525ca9af5439","hash":"small_ksb_9ea3be909c","mime":"image/webp","name":"small_ksb.webp","path":null,"size":18.39,"width":500,"height":224,"sizeInBytes":18386},"medium":{"ext":".webp","url":"https://cdn.assadali.dev/medium_ksb_9ea3be909c.webp","etag":"35858c8bfc68ca80d2680a206ca2fabe","hash":"medium_ksb_9ea3be909c","mime":"image/webp","name":"medium_ksb.webp","path":null,"size":31.43,"width":750,"height":336,"sizeInBytes":31426},"thumbnail":{"ext":".webp","url":"https://cdn.assadali.dev/thumbnail_ksb_9ea3be909c.webp","etag":"cd4c52cac87eb966ec8ab193a6049195","hash":"thumbnail_ksb_9ea3be909c","mime":"image/webp","name":"thumbnail_ksb.webp","path":null,"size":6.71,"width":245,"height":110,"sizeInBytes":6712}},"hash":"ksb_9ea3be909c","ext":".webp","mime":"image/webp","size":52.12,"url":"https://cdn.assadali.dev/ksb_9ea3be909c.webp","previewUrl":null,"provider":"aws-s3","provider_metadata":null,"createdAt":"2026-07-05T00:48:50.487Z","updatedAt":"2026-07-05T00:48:50.487Z","publishedAt":"2026-07-05T00:48:50.488Z"},"parent":{"id":16,"documentId":"yxtifsko8mx60b6m6uemu2u4","title":"Work","slug":"work","createdAt":"2026-07-04T23:12:47.591Z","updatedAt":"2026-07-04T23:13:03.593Z","publishedAt":"2026-07-04T23:13:03.623Z"},"tags":[{"id":6,"documentId":"yhelpp4miwjvbctvydj2y7py","name":"Vue.js","slug":"vue-js","createdAt":"2026-07-01T11:03:20.792Z","updatedAt":"2026-07-01T11:03:22.107Z","publishedAt":"2026-07-01T11:03:22.126Z"},{"id":2,"documentId":"d99o13jrb98n4j3d7klg05yg","name":"Bootstrap","slug":"bootstrap","createdAt":"2026-07-01T11:02:53.752Z","updatedAt":"2026-07-01T11:02:54.840Z","publishedAt":"2026-07-01T11:02:54.861Z"},{"id":4,"documentId":"bnxpzrktqrlm7tvy98ryzehr","name":"Symfony","slug":"symfony","createdAt":"2026-07-01T11:03:05.870Z","updatedAt":"2026-07-01T11:03:07.100Z","publishedAt":"2026-07-01T11:03:07.132Z"}],"seo":null,"projectContent":[{"id":68,"body":[{"type":"paragraph","children":[{"text":"Partnering with a Symfony backend developer, I created a custom Bootstrap style architecture and reactive Vue.js components wrapped in Twig templates. The ","type":"text"},{"url":"https://www.satellite.co.nz/work/business-solutions/inschool","type":"link","children":[{"text":"internal platform","type":"text"}]},{"text":" handles complex, high-stakes operational workflows including annual school registrations, data management, and localised supply-chain ordering/stocking logistics.","type":"text"}]}],"__component":"content.rich-text"}]},{"id":75,"documentId":"k4mdz23x1nqwmlsocjozurq5","title":"Spark Game Arena Mission Hub","slug":"work/spark-game-arena-mission-hub","order":5,"summary":"As Lead Frontend Developer for the Spark Game Arena Mission Hub, I used the TAG platform to build a high-performance web application that turned attendees phones into interactive game companions.","lead":"As Lead Frontend Developer for the Spark Game Arena Mission Hub, I used the TAG platform to build a high-performance web application that turned attendees phones into interactive game companions.","createdAt":"2026-07-05T03:05:23.966Z","updatedAt":"2026-07-06T10:37:55.916Z","publishedAt":"2026-07-06T10:37:55.974Z","image":{"id":21,"documentId":"e8hjoq7t6ln5wk8b55eu6013","name":"spark.webp","alternativeText":null,"caption":null,"focalPoint":null,"width":1007,"height":714,"formats":{"large":{"ext":".webp","url":"https://cdn.assadali.dev/large_spark_381856496c.webp","etag":"92087cba0d69c4110dd92973a75c97c7","hash":"large_spark_381856496c","mime":"image/webp","name":"large_spark.webp","path":null,"size":37.75,"width":1000,"height":709,"sizeInBytes":37746},"small":{"ext":".webp","url":"https://cdn.assadali.dev/small_spark_381856496c.webp","etag":"2fbe73d0958dca9554efbc962ecb1610","hash":"small_spark_381856496c","mime":"image/webp","name":"small_spark.webp","path":null,"size":16.51,"width":500,"height":355,"sizeInBytes":16506},"medium":{"ext":".webp","url":"https://cdn.assadali.dev/medium_spark_381856496c.webp","etag":"ab06766d2cc6771013bb47637355bc16","hash":"medium_spark_381856496c","mime":"image/webp","name":"medium_spark.webp","path":null,"size":27,"width":750,"height":532,"sizeInBytes":26998},"thumbnail":{"ext":".webp","url":"https://cdn.assadali.dev/thumbnail_spark_381856496c.webp","etag":"1605fd597cc009276d5c776c8cae073f","hash":"thumbnail_spark_381856496c","mime":"image/webp","name":"thumbnail_spark.webp","path":null,"size":5.82,"width":220,"height":156,"sizeInBytes":5816}},"hash":"spark_381856496c","ext":".webp","mime":"image/webp","size":42.32,"url":"https://cdn.assadali.dev/spark_381856496c.webp","previewUrl":null,"provider":"aws-s3","provider_metadata":null,"createdAt":"2026-07-05T03:06:57.376Z","updatedAt":"2026-07-05T03:07:04.189Z","publishedAt":"2026-07-05T03:06:57.376Z"},"parent":{"id":16,"documentId":"yxtifsko8mx60b6m6uemu2u4","title":"Work","slug":"work","createdAt":"2026-07-04T23:12:47.591Z","updatedAt":"2026-07-04T23:13:03.593Z","publishedAt":"2026-07-04T23:13:03.623Z"},"tags":[{"id":8,"documentId":"qsb4govqyk5eg6khf625ar8m","name":"TAG","slug":"tag","createdAt":"2026-07-05T00:04:17.901Z","updatedAt":"2026-07-05T00:04:19.460Z","publishedAt":"2026-07-05T00:04:19.479Z"}],"seo":null,"projectContent":[{"id":73,"body":[{"type":"paragraph","children":[{"text":"I engineered a fluid, gamified UI featuring real-time achievements, progression tracking, and QR-driven collectible mechanics that users hunted for across the venue. Deployed as a low-friction PWA, ","type":"text"},{"url":"https://www.satellite.co.nz/work/activations/spark-game-arena","type":"link","children":[{"text":"the system","type":"text"}]},{"text":" bridged physical interactions with digital rewards, ensuring thousands of simultaneous players could effortlessly jump straight into the live arena boss fight finale. ","type":"text"},{"url":"https://bestawards.co.nz/digital/installation-exhibition/colenso-bbdo/killabyte-1/","type":"link","children":[{"text":"Best Awards ","type":"text"}]},{"text":"recognised.","type":"text"}]}],"__component":"content.rich-text"}]},{"id":27,"documentId":"g210ja9pz0agh40444rbf9rs","title":"MITO Website & Job Hub","slug":"work/mito-website-and-job-hub","order":6,"summary":"Delivered the end-to-end web presence for the Motor Industry Training Organisation (MITO).","lead":"Delivered the end-to-end web presence for the Motor Industry Training Organisation (MITO).","createdAt":"2026-07-05T00:59:39.251Z","updatedAt":"2026-07-05T01:01:47.164Z","publishedAt":"2026-07-05T01:01:47.195Z","image":{"id":11,"documentId":"x7fgo19v1p9pz8belo4vi272","name":"mito.webp","alternativeText":null,"caption":null,"focalPoint":null,"width":1002,"height":557,"formats":{"large":{"ext":".webp","url":"https://cdn.assadali.dev/large_mito_fb9712f876.webp","etag":"670590caac41242a38eac7cf75368f60","hash":"large_mito_fb9712f876","mime":"image/webp","name":"large_mito.webp","path":null,"size":26.93,"width":1000,"height":556,"sizeInBytes":26934},"small":{"ext":".webp","url":"https://cdn.assadali.dev/small_mito_fb9712f876.webp","etag":"149a4b1a65e2e7d50e543889ceee0cc5","hash":"small_mito_fb9712f876","mime":"image/webp","name":"small_mito.webp","path":null,"size":12.96,"width":500,"height":278,"sizeInBytes":12958},"medium":{"ext":".webp","url":"https://cdn.assadali.dev/medium_mito_fb9712f876.webp","etag":"a15f99bd4aa9aad626f32ebecb861549","hash":"medium_mito_fb9712f876","mime":"image/webp","name":"medium_mito.webp","path":null,"size":19.63,"width":750,"height":417,"sizeInBytes":19630},"thumbnail":{"ext":".webp","url":"https://cdn.assadali.dev/thumbnail_mito_fb9712f876.webp","etag":"08fb5fe61fb21c1402df7d7109c1275e","hash":"thumbnail_mito_fb9712f876","mime":"image/webp","name":"thumbnail_mito.webp","path":null,"size":5.59,"width":245,"height":136,"sizeInBytes":5586}},"hash":"mito_fb9712f876","ext":".webp","mime":"image/webp","size":28.67,"url":"https://cdn.assadali.dev/mito_fb9712f876.webp","previewUrl":null,"provider":"aws-s3","provider_metadata":null,"createdAt":"2026-07-05T01:01:42.136Z","updatedAt":"2026-07-05T01:01:42.136Z","publishedAt":"2026-07-05T01:01:42.136Z"},"parent":{"id":16,"documentId":"yxtifsko8mx60b6m6uemu2u4","title":"Work","slug":"work","createdAt":"2026-07-04T23:12:47.591Z","updatedAt":"2026-07-04T23:13:03.593Z","publishedAt":"2026-07-04T23:13:03.623Z"},"tags":[{"id":10,"documentId":"z7kq31j42sp1nhk04bbdyffz","name":"Sulu CMS","slug":"sulu-cms","createdAt":"2026-07-05T00:04:53.257Z","updatedAt":"2026-07-05T00:04:54.660Z","publishedAt":"2026-07-05T00:04:54.672Z"},{"id":6,"documentId":"yhelpp4miwjvbctvydj2y7py","name":"Vue.js","slug":"vue-js","createdAt":"2026-07-01T11:03:20.792Z","updatedAt":"2026-07-01T11:03:22.107Z","publishedAt":"2026-07-01T11:03:22.126Z"},{"id":2,"documentId":"d99o13jrb98n4j3d7klg05yg","name":"Bootstrap","slug":"bootstrap","createdAt":"2026-07-01T11:02:53.752Z","updatedAt":"2026-07-01T11:02:54.840Z","publishedAt":"2026-07-01T11:02:54.861Z"},{"id":4,"documentId":"bnxpzrktqrlm7tvy98ryzehr","name":"Symfony","slug":"symfony","createdAt":"2026-07-01T11:03:05.870Z","updatedAt":"2026-07-01T11:03:07.100Z","publishedAt":"2026-07-01T11:03:07.132Z"}],"seo":null,"projectContent":[{"id":22,"body":[{"type":"paragraph","children":[{"text":"As the solo developer for the core platform, I built a high-density ","type":"text"},{"url":"https://www.mito.org.nz/","type":"link","children":[{"text":"content site","type":"text"}]},{"text":" using Sulu CMS, Vue.js, and custom Bootstrap styles to streamline qualification paths. Concurrently, I collaborated with a backend engineer to deliver the frontend for MITO's Job Hub marketplace, creating the reactive interface, search filters, and application funnels that bridge the gap between apprentices and industry employers.","type":"text"}]}],"__component":"content.rich-text"}]},{"id":46,"documentId":"nd79tchrshf12bg1ifky46xw","title":"APEC 2021","slug":"work/apec-2021","order":7,"summary":"Delivered the official APEC 2021 host economy website (MFAT). Engineered a high-density public site using Sulu CMS, Vue.js, and custom Bootstrap styles. ","lead":"Delivered the official APEC 2021 host economy website (MFAT). Engineered a high-density public site using Sulu CMS, Vue.js, and custom Bootstrap styles. ","createdAt":"2026-07-05T01:05:48.516Z","updatedAt":"2026-07-05T02:17:06.042Z","publishedAt":"2026-07-05T02:17:06.105Z","image":{"id":12,"documentId":"ll485y7hw64utnxvfjo4kl0q","name":"apec.webp","alternativeText":null,"caption":null,"focalPoint":null,"width":1002,"height":650,"formats":{"large":{"ext":".webp","url":"https://cdn.assadali.dev/large_apec_075725d2eb.webp","etag":"21175fd1add7ab6168161308d4fc93b3","hash":"large_apec_075725d2eb","mime":"image/webp","name":"large_apec.webp","path":null,"size":56.7,"width":1000,"height":649,"sizeInBytes":56702},"small":{"ext":".webp","url":"https://cdn.assadali.dev/small_apec_075725d2eb.webp","etag":"a5a9283eca30cec3e5077868bcc6a5c6","hash":"small_apec_075725d2eb","mime":"image/webp","name":"small_apec.webp","path":null,"size":25.68,"width":500,"height":324,"sizeInBytes":25678},"medium":{"ext":".webp","url":"https://cdn.assadali.dev/medium_apec_075725d2eb.webp","etag":"3a14fafc2b262997ff6a2b7675f37468","hash":"medium_apec_075725d2eb","mime":"image/webp","name":"medium_apec.webp","path":null,"size":42.17,"width":750,"height":487,"sizeInBytes":42168},"thumbnail":{"ext":".webp","url":"https://cdn.assadali.dev/thumbnail_apec_075725d2eb.webp","etag":"4146a206d1d0eced883c7c390c08770a","hash":"thumbnail_apec_075725d2eb","mime":"image/webp","name":"thumbnail_apec.webp","path":null,"size":9.32,"width":240,"height":156,"sizeInBytes":9324}},"hash":"apec_075725d2eb","ext":".webp","mime":"image/webp","size":62.83,"url":"https://cdn.assadali.dev/apec_075725d2eb.webp","previewUrl":null,"provider":"aws-s3","provider_metadata":null,"createdAt":"2026-07-05T01:07:26.238Z","updatedAt":"2026-07-05T01:07:26.238Z","publishedAt":"2026-07-05T01:07:26.238Z"},"parent":{"id":16,"documentId":"yxtifsko8mx60b6m6uemu2u4","title":"Work","slug":"work","createdAt":"2026-07-04T23:12:47.591Z","updatedAt":"2026-07-04T23:13:03.593Z","publishedAt":"2026-07-04T23:13:03.623Z"},"tags":[{"id":10,"documentId":"z7kq31j42sp1nhk04bbdyffz","name":"Sulu CMS","slug":"sulu-cms","createdAt":"2026-07-05T00:04:53.257Z","updatedAt":"2026-07-05T00:04:54.660Z","publishedAt":"2026-07-05T00:04:54.672Z"},{"id":6,"documentId":"yhelpp4miwjvbctvydj2y7py","name":"Vue.js","slug":"vue-js","createdAt":"2026-07-01T11:03:20.792Z","updatedAt":"2026-07-01T11:03:22.107Z","publishedAt":"2026-07-01T11:03:22.126Z"},{"id":2,"documentId":"d99o13jrb98n4j3d7klg05yg","name":"Bootstrap","slug":"bootstrap","createdAt":"2026-07-01T11:02:53.752Z","updatedAt":"2026-07-01T11:02:54.840Z","publishedAt":"2026-07-01T11:02:54.861Z"}],"seo":null,"projectContent":[{"id":42,"body":[{"type":"paragraph","children":[{"text":"Critically, I established the foundational UI kit and style architecture that was shared and utilised across both the website and the wider ","type":"text"},{"url":"https://www.satellite.co.nz/work/websites/apec-2021","type":"link","children":[{"text":"virtual summit platform","type":"text"}]},{"text":". Delivered to top-spec technical standards, the ecosystem achieved strict WCAG 2.1 AA accessibility compliance, elite Core Web Vitals performance, and pristine SEO semantics to pass rigorous government audits.","type":"text"}]}],"__component":"content.rich-text"}]},{"id":79,"documentId":"hpl9tk54taqlgfpikq3yl68m","title":"Auckland Museum Dinosaur Trail WebAR","slug":"work/auckland-museum-dinosaur-trail-web-ar","order":8,"summary":"Led the frontend development for an interactive WebAR exhibition at the Auckland Museum.","lead":"Led the frontend development for an interactive WebAR exhibition at the Auckland Museum.","createdAt":"2026-07-05T02:45:06.510Z","updatedAt":"2026-07-06T10:45:46.190Z","publishedAt":"2026-07-06T10:45:46.238Z","image":{"id":18,"documentId":"ig944j6hq59tklpx6jvb9lkk","name":"museum.webp","alternativeText":null,"caption":null,"focalPoint":null,"width":1008,"height":715,"formats":{"large":{"ext":".webp","url":"https://cdn.assadali.dev/large_museum_e28e9e420f.webp","etag":"e8742d0febd4926af50f3dd7a81dec1d","hash":"large_museum_e28e9e420f","mime":"image/webp","name":"large_museum.webp","path":null,"size":98.21,"width":1000,"height":709,"sizeInBytes":98208},"small":{"ext":".webp","url":"https://cdn.assadali.dev/small_museum_e28e9e420f.webp","etag":"49bea484579e83735d551ed756e34012","hash":"small_museum_e28e9e420f","mime":"image/webp","name":"small_museum.webp","path":null,"size":27.94,"width":500,"height":355,"sizeInBytes":27942},"medium":{"ext":".webp","url":"https://cdn.assadali.dev/medium_museum_e28e9e420f.webp","etag":"8592dd802475a5bf5a5cf8c0e008ab68","hash":"medium_museum_e28e9e420f","mime":"image/webp","name":"medium_museum.webp","path":null,"size":61.33,"width":750,"height":532,"sizeInBytes":61334},"thumbnail":{"ext":".webp","url":"https://cdn.assadali.dev/thumbnail_museum_e28e9e420f.webp","etag":"47bece03c54dfc33775059a32fcf8802","hash":"thumbnail_museum_e28e9e420f","mime":"image/webp","name":"thumbnail_museum.webp","path":null,"size":6.66,"width":220,"height":156,"sizeInBytes":6664}},"hash":"museum_e28e9e420f","ext":".webp","mime":"image/webp","size":134.56,"url":"https://cdn.assadali.dev/museum_e28e9e420f.webp","previewUrl":null,"provider":"aws-s3","provider_metadata":null,"createdAt":"2026-07-05T02:44:22.312Z","updatedAt":"2026-07-05T02:44:22.312Z","publishedAt":"2026-07-05T02:44:22.312Z"},"parent":{"id":16,"documentId":"yxtifsko8mx60b6m6uemu2u4","title":"Work","slug":"work","createdAt":"2026-07-04T23:12:47.591Z","updatedAt":"2026-07-04T23:13:03.593Z","publishedAt":"2026-07-04T23:13:03.623Z"},"tags":[{"id":6,"documentId":"yhelpp4miwjvbctvydj2y7py","name":"Vue.js","slug":"vue-js","createdAt":"2026-07-01T11:03:20.792Z","updatedAt":"2026-07-01T11:03:22.107Z","publishedAt":"2026-07-01T11:03:22.126Z"},{"id":12,"documentId":"vmlfgwwfx2zzbvf1cwu5jpdp","name":"Three.js","slug":"three-js","createdAt":"2026-07-05T00:05:03.907Z","updatedAt":"2026-07-05T00:05:04.971Z","publishedAt":"2026-07-05T00:05:04.984Z"},{"id":25,"documentId":"yltsy6ql5xm7zuucoau72q6i","name":"AR","slug":"ar","createdAt":"2026-07-05T02:09:58.422Z","updatedAt":"2026-07-05T02:10:14.310Z","publishedAt":"2026-07-05T02:10:14.327Z"},{"id":27,"documentId":"n3y7lha2mw7dwn3salz5l5t4","name":"Blender","slug":"blender","createdAt":"2026-07-05T02:10:30.566Z","updatedAt":"2026-07-05T02:10:31.467Z","publishedAt":"2026-07-05T02:10:31.481Z"}],"seo":null,"projectContent":[{"id":78,"body":[{"type":"paragraph","children":[{"text":"Built utilising Vue.js, 8th Wall, A-Frame, and Three.js, ","type":"text"},{"url":"https://www.satellite.co.nz/work/experiential-projects/ar-experience","type":"link","children":[{"text":"the application","type":"text"}]},{"text":" allowed visitors to scan physical gallery plinths to render six full-scale, fully animated dinosaurs directly in their mobile browser. Responsibilities included optimising massive 3D models in Blender for high-performance mobile WebGL rendering, implementing in-app photo/video capture, and engineering an interactive waypoint map layer. Configured custom Google Tag Manager event tracking to deliver granular visitor analytics to museum stakeholders. ","type":"text"},{"url":"https://bestawards.co.nz/digital/installation-exhibition/satellite-1/dinosaur-trail/","type":"link","children":[{"text":"Best Awards","type":"text"}]},{"text":" recognised.","type":"text"}]}],"__component":"content.rich-text"}]},{"id":42,"documentId":"wh7shyhpv76xt1qn7i8tql1k","title":"Fashion Week Interactive Ticketing Platforms","slug":"work/fashion-week-interactive-ticketing-platforms","order":9,"summary":"Led the frontend engineering for the New Zealand and Australian Fashion Week digital ecosystems built on the TAG platform.","lead":"Led the frontend engineering for the New Zealand and Australian Fashion Week digital ecosystems built on the TAG platform.","createdAt":"2026-07-05T01:56:42.635Z","updatedAt":"2026-07-05T02:07:05.905Z","publishedAt":"2026-07-05T02:07:05.967Z","image":{"id":14,"documentId":"eu5b9my0gqgggiupuxzur4db","name":"nzfw.webp","alternativeText":null,"caption":null,"focalPoint":null,"width":1005,"height":682,"formats":{"large":{"ext":".webp","url":"https://cdn.assadali.dev/large_nzfw_afa57cbfe2.webp","etag":"b55a34779863f7a8d0ef602d93359795","hash":"large_nzfw_afa57cbfe2","mime":"image/webp","name":"large_nzfw.webp","path":null,"size":38.47,"width":1000,"height":679,"sizeInBytes":38468},"small":{"ext":".webp","url":"https://cdn.assadali.dev/small_nzfw_afa57cbfe2.webp","etag":"1f2bccba0a87f0e1f463159c9bebceef","hash":"small_nzfw_afa57cbfe2","mime":"image/webp","name":"small_nzfw.webp","path":null,"size":15.03,"width":500,"height":339,"sizeInBytes":15028},"medium":{"ext":".webp","url":"https://cdn.assadali.dev/medium_nzfw_afa57cbfe2.webp","etag":"7eed99cb274e09e8aac649ead5cc8b76","hash":"medium_nzfw_afa57cbfe2","mime":"image/webp","name":"medium_nzfw.webp","path":null,"size":26.6,"width":750,"height":509,"sizeInBytes":26602},"thumbnail":{"ext":".webp","url":"https://cdn.assadali.dev/thumbnail_nzfw_afa57cbfe2.webp","etag":"a559dd24d506070a0feae12574bf17ed","hash":"thumbnail_nzfw_afa57cbfe2","mime":"image/webp","name":"thumbnail_nzfw.webp","path":null,"size":4.89,"width":230,"height":156,"sizeInBytes":4892}},"hash":"nzfw_afa57cbfe2","ext":".webp","mime":"image/webp","size":44.08,"url":"https://cdn.assadali.dev/nzfw_afa57cbfe2.webp","previewUrl":null,"provider":"aws-s3","provider_metadata":null,"createdAt":"2026-07-05T02:03:07.014Z","updatedAt":"2026-07-05T02:03:07.014Z","publishedAt":"2026-07-05T02:03:07.014Z"},"parent":{"id":16,"documentId":"yxtifsko8mx60b6m6uemu2u4","title":"Work","slug":"work","createdAt":"2026-07-04T23:12:47.591Z","updatedAt":"2026-07-04T23:13:03.593Z","publishedAt":"2026-07-04T23:13:03.623Z"},"tags":[{"id":18,"documentId":"lo33dq58qvhykz4e8vxwiguz","name":"D3.js","slug":"d3-js","createdAt":"2026-07-05T01:56:54.869Z","updatedAt":"2026-07-05T01:56:55.822Z","publishedAt":"2026-07-05T01:56:55.835Z"},{"id":8,"documentId":"qsb4govqyk5eg6khf625ar8m","name":"TAG","slug":"tag","createdAt":"2026-07-05T00:04:17.901Z","updatedAt":"2026-07-05T00:04:19.460Z","publishedAt":"2026-07-05T00:04:19.479Z"}],"seo":null,"projectContent":[{"id":36,"body":[{"type":"paragraph","children":[{"text":"Collaborating with a backend engineer who developed the Symfony core, I built the UI for high-concurrency ","type":"text"},{"url":"https://www.satellite.co.nz/work/activations/australian-fashion-week-2024","type":"link","children":[{"text":"event registration","type":"text"}]},{"text":", portals, checkout funnels, and optimised mobile interfaces. Most notably, I engineered a custom, ","type":"text"},{"url":"https://www.satellite.co.nz/work/activations/nz-fashion-week-23","type":"link","children":[{"text":"data-driven runway seating selector","type":"text"}]},{"text":" combining D3.js for spatial SVG layout manipulation with Vue.js to consume backend data and manage reactive, ","type":"text"},{"url":"https://www.linkedin.com/posts/satellite-is-proud-to-be-the-official-event-ugcPost-7349248526909923328-RZUk/","type":"link","children":[{"text":"real-time seat reservations","type":"text"}]},{"text":".","type":"text"}]}],"__component":"content.rich-text"}]},{"id":78,"documentId":"fxnp5x1zr1z3m9chtf3w540w","title":"TRENZ Ecosystem","slug":"work/trenz-ecosystem","order":10,"summary":"Collaborated within a multi-disciplinary engineering team to customise and deploy the client-side architecture for the secure TAG platform attendee portal, registration and its personalised delegate mobile application. ","lead":"Collaborated within a multi-disciplinary engineering team to customise and deploy the client-side architecture for the secure TAG platform attendee portal, registration and its personalised delegate mobile application. ","createdAt":"2026-07-05T00:04:07.486Z","updatedAt":"2026-07-06T10:45:26.682Z","publishedAt":"2026-07-06T10:45:26.738Z","image":{"id":7,"documentId":"uyh139hygguv1kp7xihz83wz","name":"trenz.webp","alternativeText":null,"caption":null,"focalPoint":null,"width":994,"height":703,"formats":{"small":{"ext":".webp","url":"https://cdn.assadali.dev/small_trenz_c0e8412fcf.webp","etag":"37b11bba35588193e60bfeb9fa01948e","hash":"small_trenz_c0e8412fcf","mime":"image/webp","name":"small_trenz.webp","path":null,"size":11.06,"width":500,"height":354,"sizeInBytes":11058},"medium":{"ext":".webp","url":"https://cdn.assadali.dev/medium_trenz_c0e8412fcf.webp","etag":"f82dedc01e698a5ea28decadf14b6d1b","hash":"medium_trenz_c0e8412fcf","mime":"image/webp","name":"medium_trenz.webp","path":null,"size":19.93,"width":750,"height":530,"sizeInBytes":19926},"thumbnail":{"ext":".webp","url":"https://cdn.assadali.dev/thumbnail_trenz_c0e8412fcf.webp","etag":"7d7558d1bfd4d1ee8ebf3581805409c4","hash":"thumbnail_trenz_c0e8412fcf","mime":"image/webp","name":"thumbnail_trenz.webp","path":null,"size":3.52,"width":221,"height":156,"sizeInBytes":3524}},"hash":"trenz_c0e8412fcf","ext":".webp","mime":"image/webp","size":33.61,"url":"https://cdn.assadali.dev/trenz_c0e8412fcf.webp","previewUrl":null,"provider":"aws-s3","provider_metadata":null,"createdAt":"2026-07-05T00:20:03.832Z","updatedAt":"2026-07-05T00:20:03.832Z","publishedAt":"2026-07-05T00:20:03.833Z"},"parent":{"id":16,"documentId":"yxtifsko8mx60b6m6uemu2u4","title":"Work","slug":"work","createdAt":"2026-07-04T23:12:47.591Z","updatedAt":"2026-07-04T23:13:03.593Z","publishedAt":"2026-07-04T23:13:03.623Z"},"tags":[{"id":8,"documentId":"qsb4govqyk5eg6khf625ar8m","name":"TAG","slug":"tag","createdAt":"2026-07-05T00:04:17.901Z","updatedAt":"2026-07-05T00:04:19.460Z","publishedAt":"2026-07-05T00:04:19.479Z"},{"id":10,"documentId":"z7kq31j42sp1nhk04bbdyffz","name":"Sulu CMS","slug":"sulu-cms","createdAt":"2026-07-05T00:04:53.257Z","updatedAt":"2026-07-05T00:04:54.660Z","publishedAt":"2026-07-05T00:04:54.672Z"},{"id":12,"documentId":"vmlfgwwfx2zzbvf1cwu5jpdp","name":"Three.js","slug":"three-js","createdAt":"2026-07-05T00:05:03.907Z","updatedAt":"2026-07-05T00:05:04.971Z","publishedAt":"2026-07-05T00:05:04.984Z"}],"seo":null,"projectContent":[{"id":77,"body":[{"type":"paragraph","children":[{"text":"For 2026, we optimised mobile delivery, engineered the system within a custom PWA app-shell architecture to make the application behave like a seamless native app under live event conditions. In ","type":"text"},{"url":"https://www.satellite.co.nz/work/activations/trenz-event","type":"link","children":[{"text":"previous years","type":"text"}]},{"text":", worked within a team to build the ","type":"text"},{"url":"https://www.satellite.co.nz/work/websites/trenz-connect","type":"link","children":[{"text":"TRENZ Connect","type":"text"}]},{"text":" platform. Independently owned the complete development of the ","type":"text"},{"url":"https://www.trenz.co.nz/","type":"link","children":[{"text":"public-facing","type":"text"}]},{"text":" content infrastructure utilising Sulu CMS, and exclusively engineered a high-performance, data-driven interactive exhibition floorplan using Three.js to dynamically render and map real-time exhibitor spatial layouts.","type":"text"}]}],"__component":"content.rich-text"}]},{"id":50,"documentId":"kpyx8ceunycezfznka9baqez","title":"Kiwi Property Interactive Campaigns","slug":"work/kiwi-property-interactive-campaigns","order":11,"summary":"Led the frontend architecture and development of bringing two unique digital experiences to life for Kiwi Property shopping centres.","lead":"I was the sole frontend developer tasked with bringing two unique digital experiences to life for Kiwi Property shopping centres, built as modular Vue.js components hooked into a custom TAG backend architecture.","createdAt":"2026-07-05T02:21:30.595Z","updatedAt":"2026-07-05T02:27:20.106Z","publishedAt":"2026-07-05T02:27:20.212Z","image":{"id":16,"documentId":"u7z2k840hs4tr2qgf8408zmn","name":"mystyle.png","alternativeText":null,"caption":null,"focalPoint":null,"width":1005,"height":610,"formats":{"large":{"ext":".png","url":"https://cdn.assadali.dev/large_mystyle_aa14204437.png","etag":"ae243ea6569a65c1534147527178b330","hash":"large_mystyle_aa14204437","mime":"image/png","name":"large_mystyle.png","path":null,"size":96.1,"width":1000,"height":607,"sizeInBytes":96098},"small":{"ext":".png","url":"https://cdn.assadali.dev/small_mystyle_aa14204437.png","etag":"9be106d7be8f3bd41fbe58d9d19bfb11","hash":"small_mystyle_aa14204437","mime":"image/png","name":"small_mystyle.png","path":null,"size":36.7,"width":500,"height":303,"sizeInBytes":36704},"medium":{"ext":".png","url":"https://cdn.assadali.dev/medium_mystyle_aa14204437.png","etag":"4f2467f2f7268de7555620120ba673b6","hash":"medium_mystyle_aa14204437","mime":"image/png","name":"medium_mystyle.png","path":null,"size":67.64,"width":750,"height":455,"sizeInBytes":67637},"thumbnail":{"ext":".png","url":"https://cdn.assadali.dev/thumbnail_mystyle_aa14204437.png","etag":"6d4fd79afe65b21696370dcddead6b3d","hash":"thumbnail_mystyle_aa14204437","mime":"image/png","name":"thumbnail_mystyle.png","path":null,"size":15.6,"width":245,"height":149,"sizeInBytes":15599}},"hash":"mystyle_aa14204437","ext":".png","mime":"image/png","size":27.36,"url":"https://cdn.assadali.dev/mystyle_aa14204437.png","previewUrl":null,"provider":"aws-s3","provider_metadata":null,"createdAt":"2026-07-05T02:27:14.123Z","updatedAt":"2026-07-05T02:27:14.123Z","publishedAt":"2026-07-05T02:27:14.123Z"},"parent":{"id":16,"documentId":"yxtifsko8mx60b6m6uemu2u4","title":"Work","slug":"work","createdAt":"2026-07-04T23:12:47.591Z","updatedAt":"2026-07-04T23:13:03.593Z","publishedAt":"2026-07-04T23:13:03.623Z"},"tags":[{"id":8,"documentId":"qsb4govqyk5eg6khf625ar8m","name":"TAG","slug":"tag","createdAt":"2026-07-05T00:04:17.901Z","updatedAt":"2026-07-05T00:04:19.460Z","publishedAt":"2026-07-05T00:04:19.479Z"},{"id":6,"documentId":"yhelpp4miwjvbctvydj2y7py","name":"Vue.js","slug":"vue-js","createdAt":"2026-07-01T11:03:20.792Z","updatedAt":"2026-07-01T11:03:22.107Z","publishedAt":"2026-07-01T11:03:22.126Z"},{"id":2,"documentId":"d99o13jrb98n4j3d7klg05yg","name":"Bootstrap","slug":"bootstrap","createdAt":"2026-07-01T11:02:53.752Z","updatedAt":"2026-07-01T11:02:54.840Z","publishedAt":"2026-07-01T11:02:54.861Z"},{"id":22,"documentId":"birdpv7x2y12hf2njgx4pvuk","name":"Machine learning","slug":"machine-learning","createdAt":"2026-07-05T02:09:35.713Z","updatedAt":"2026-07-05T02:09:36.806Z","publishedAt":"2026-07-05T02:09:36.828Z"}],"seo":null,"projectContent":[{"id":46,"body":[{"type":"paragraph","children":[{"text":"A core technical requirement was ensuring that both applications were seamlessly fine-tuned for each distinct retail location. I built the architecture to dynamically inject custom themes, layout adjustments, and localised product catalogs depending on which specific mall domain the user was visiting, while maintaining a single, core codebase.","type":"text"}]},{"type":"paragraph","children":[{"text":"The first campaign, ","type":"text"},{"url":"https://www.northlands.co.nz/events/colour-my-style/","type":"link","children":[{"text":"Colour My Style","type":"text"}]},{"text":", integrated TensorFlow.js for client-side machine learning human detection and automated fashion recommendations. The second application, ","type":"text"},{"url":"https://www.northlands.co.nz/events/pressie-planner","type":"link","children":[{"text":"Pressie Planner","type":"text"}]},{"text":", was built as a highly interactive, personalised digital gift guide. Users walked through a tailored onboarding flow to filter products based on specific recipient interests, utilised an intuitive \"hearting\" mechanic to curate a dynamic wishlist on the fly, and accessed a centralised \"Faves\" dashboard to manage and share their personalised gift selections.","type":"text"}]}],"__component":"content.rich-text"}]},{"id":52,"documentId":"um7co6fuz91jmr76qh1izp08","title":"Experiential Cricket Campaigns","slug":"work/experiential-cricket-campaigns","order":12,"summary":"Led the frontend architecture for two massive experiential cricket campaigns for ANZ (Bat For Your Cap) and England and Wales Cricket Board (Boundary Bash).","lead":"Led the frontend architecture for two massive experiential cricket campaigns for ANZ (Bat For Your Cap) and England and Wales Cricket Board (Boundary Bash).","createdAt":"2026-07-05T02:32:54.723Z","updatedAt":"2026-07-05T02:32:56.306Z","publishedAt":"2026-07-05T02:32:56.364Z","image":{"id":17,"documentId":"akowhop5y685we7eyxkt6l51","name":"bfyc.webp","alternativeText":null,"caption":null,"focalPoint":null,"width":1008,"height":630,"formats":{"large":{"ext":".webp","url":"https://cdn.assadali.dev/large_bfyc_7c7033ba17.webp","etag":"70f761ea736e17e5ce581bbed96f023c","hash":"large_bfyc_7c7033ba17","mime":"image/webp","name":"large_bfyc.webp","path":null,"size":51.09,"width":1000,"height":625,"sizeInBytes":51090},"small":{"ext":".webp","url":"https://cdn.assadali.dev/small_bfyc_7c7033ba17.webp","etag":"19c776e4f2231dc1b61505b726f531b3","hash":"small_bfyc_7c7033ba17","mime":"image/webp","name":"small_bfyc.webp","path":null,"size":17.01,"width":500,"height":312,"sizeInBytes":17006},"medium":{"ext":".webp","url":"https://cdn.assadali.dev/medium_bfyc_7c7033ba17.webp","etag":"70079ff3de8b05d7c4dab90138bc1eca","hash":"medium_bfyc_7c7033ba17","mime":"image/webp","name":"medium_bfyc.webp","path":null,"size":32.99,"width":750,"height":469,"sizeInBytes":32994},"thumbnail":{"ext":".webp","url":"https://cdn.assadali.dev/thumbnail_bfyc_7c7033ba17.webp","etag":"a5441b659904c579495a0fe33d2b3719","hash":"thumbnail_bfyc_7c7033ba17","mime":"image/webp","name":"thumbnail_bfyc.webp","path":null,"size":5.22,"width":245,"height":153,"sizeInBytes":5220}},"hash":"bfyc_7c7033ba17","ext":".webp","mime":"image/webp","size":63.65,"url":"https://cdn.assadali.dev/bfyc_7c7033ba17.webp","previewUrl":null,"provider":"aws-s3","provider_metadata":null,"createdAt":"2026-07-05T02:32:46.788Z","updatedAt":"2026-07-05T02:32:46.788Z","publishedAt":"2026-07-05T02:32:46.788Z"},"parent":{"id":16,"documentId":"yxtifsko8mx60b6m6uemu2u4","title":"Work","slug":"work","createdAt":"2026-07-04T23:12:47.591Z","updatedAt":"2026-07-04T23:13:03.593Z","publishedAt":"2026-07-04T23:13:03.623Z"},"tags":[{"id":8,"documentId":"qsb4govqyk5eg6khf625ar8m","name":"TAG","slug":"tag","createdAt":"2026-07-05T00:04:17.901Z","updatedAt":"2026-07-05T00:04:19.460Z","publishedAt":"2026-07-05T00:04:19.479Z"},{"id":6,"documentId":"yhelpp4miwjvbctvydj2y7py","name":"Vue.js","slug":"vue-js","createdAt":"2026-07-01T11:03:20.792Z","updatedAt":"2026-07-01T11:03:22.107Z","publishedAt":"2026-07-01T11:03:22.126Z"}],"seo":null,"projectContent":[{"id":48,"body":[{"type":"paragraph","children":[{"text":"Built on a ","type":"text"},{"url":"https://www.satellite.co.nz/work/websites/bat-for-your-cap","type":"link","children":[{"text":"custom backend","type":"text"}]},{"text":" (TAG) with Vue.js, the applications turned users smartphones into digital cricket bats by leveraging Device Web APIs (Gyroscope & Accelerometer) to measure physical swing speed and direction. Utilised low-latency WebSockets to handle real-time cross-screen pairing, allowing the game to be played interactively across web platforms, TV, and massive stadium jumbotrons, syncing real-time motion data with high-precision video timestamps.","type":"text"}]}],"__component":"content.rich-text"}]},{"id":80,"documentId":"chzqb1h1x6je6bh7gpze7024","title":"Ahikāroa","slug":"work/ahikaroa","order":13,"summary":"Delivered the flagship web platform of the New Zealand drama series Ahikāroa.","lead":"Delivered the flagship web platform of the New Zealand drama series Ahikāroa.","createdAt":"2026-07-05T01:12:12.836Z","updatedAt":"2026-07-06T10:45:54.940Z","publishedAt":"2026-07-06T10:45:54.993Z","image":{"id":13,"documentId":"qjiwrhpqvgjrcy3av9qh4zno","name":"ahikaroa.webp","alternativeText":null,"caption":null,"focalPoint":null,"width":1003,"height":401,"formats":{"large":{"ext":".webp","url":"https://cdn.assadali.dev/large_ahikaroa_1a721edacb.webp","etag":"3eb805a0f2e32486d98bacd08cb3e2ce","hash":"large_ahikaroa_1a721edacb","mime":"image/webp","name":"large_ahikaroa.webp","path":null,"size":21.28,"width":1000,"height":400,"sizeInBytes":21282},"small":{"ext":".webp","url":"https://cdn.assadali.dev/small_ahikaroa_1a721edacb.webp","etag":"6f7e57b0bd36ee0d715ed213b3f64b15","hash":"small_ahikaroa_1a721edacb","mime":"image/webp","name":"small_ahikaroa.webp","path":null,"size":7.83,"width":500,"height":200,"sizeInBytes":7834},"medium":{"ext":".webp","url":"https://cdn.assadali.dev/medium_ahikaroa_1a721edacb.webp","etag":"639a7141220bc36b54d20b52d5dcc201","hash":"medium_ahikaroa_1a721edacb","mime":"image/webp","name":"medium_ahikaroa.webp","path":null,"size":13.87,"width":750,"height":300,"sizeInBytes":13870},"thumbnail":{"ext":".webp","url":"https://cdn.assadali.dev/thumbnail_ahikaroa_1a721edacb.webp","etag":"dc393ad0998a5a0b495e2b8c573c4116","hash":"thumbnail_ahikaroa_1a721edacb","mime":"image/webp","name":"thumbnail_ahikaroa.webp","path":null,"size":2.95,"width":245,"height":98,"sizeInBytes":2954}},"hash":"ahikaroa_1a721edacb","ext":".webp","mime":"image/webp","size":25.64,"url":"https://cdn.assadali.dev/ahikaroa_1a721edacb.webp","previewUrl":null,"provider":"aws-s3","provider_metadata":null,"createdAt":"2026-07-05T01:20:53.196Z","updatedAt":"2026-07-05T01:20:53.196Z","publishedAt":"2026-07-05T01:20:53.197Z"},"parent":{"id":16,"documentId":"yxtifsko8mx60b6m6uemu2u4","title":"Work","slug":"work","createdAt":"2026-07-04T23:12:47.591Z","updatedAt":"2026-07-04T23:13:03.593Z","publishedAt":"2026-07-04T23:13:03.623Z"},"tags":[{"id":10,"documentId":"z7kq31j42sp1nhk04bbdyffz","name":"Sulu CMS","slug":"sulu-cms","createdAt":"2026-07-05T00:04:53.257Z","updatedAt":"2026-07-05T00:04:54.660Z","publishedAt":"2026-07-05T00:04:54.672Z"},{"id":2,"documentId":"d99o13jrb98n4j3d7klg05yg","name":"Bootstrap","slug":"bootstrap","createdAt":"2026-07-01T11:02:53.752Z","updatedAt":"2026-07-01T11:02:54.840Z","publishedAt":"2026-07-01T11:02:54.861Z"},{"id":16,"documentId":"jxz3hsumadf0gbx3hfqy9jq3","name":"jQuery","slug":"j-query","createdAt":"2026-07-05T01:12:21.391Z","updatedAt":"2026-07-05T01:12:22.805Z","publishedAt":"2026-07-05T01:12:22.823Z"}],"seo":null,"projectContent":[{"id":79,"body":[{"type":"paragraph","children":[{"text":"I engineered a custom, high-fidelity Video-on-Demand (VOD) digital streaming hub using custom Bootstrap layouts and jQuery interactions to deliver a premium, episodic streaming user experience. Powered by Sulu CMS, ","type":"text"},{"url":"https://www.ahikaroa.nz/","type":"link","children":[{"text":"the platform","type":"text"}]},{"text":" manages complex relational content trees, dynamically serving full broadcast seasons alongside contextual, episode-specific bonus features and interactive multimedia extensions.","type":"text"}]}],"__component":"content.rich-text"}]},{"id":58,"documentId":"ydb25qoqszemhcr88p8ks9e5","title":"Griffin’s WebAR Campaign","slug":"work/griffin-s-web-ar-campaign","order":14,"summary":"Led the frontend architecture for Griffin's 160th Anniversary instant-win WebAR campaign","lead":"Led the frontend architecture for Griffin's 160th Anniversary instant-win WebAR campaign","createdAt":"2026-07-05T02:51:44.651Z","updatedAt":"2026-07-05T02:53:51.734Z","publishedAt":"2026-07-05T02:53:51.791Z","image":{"id":19,"documentId":"kyc4ut9lzl3n5zmgmt4updb8","name":"griffin.webp","alternativeText":null,"caption":null,"focalPoint":null,"width":1008,"height":666,"formats":{"large":{"ext":".webp","url":"https://cdn.assadali.dev/large_griffin_498f33dd2d.webp","etag":"3f191e6a4652ac2e241d8d1b65b41269","hash":"large_griffin_498f33dd2d","mime":"image/webp","name":"large_griffin.webp","path":null,"size":94.97,"width":1000,"height":661,"sizeInBytes":94966},"small":{"ext":".webp","url":"https://cdn.assadali.dev/small_griffin_498f33dd2d.webp","etag":"26f43f7eec11a3e2330fa8227269140c","hash":"small_griffin_498f33dd2d","mime":"image/webp","name":"small_griffin.webp","path":null,"size":39.33,"width":500,"height":330,"sizeInBytes":39326},"medium":{"ext":".webp","url":"https://cdn.assadali.dev/medium_griffin_498f33dd2d.webp","etag":"1dc7bf6d36d071f1b47a59bcf1664532","hash":"medium_griffin_498f33dd2d","mime":"image/webp","name":"medium_griffin.webp","path":null,"size":67.03,"width":750,"height":496,"sizeInBytes":67030},"thumbnail":{"ext":".webp","url":"https://cdn.assadali.dev/thumbnail_griffin_498f33dd2d.webp","etag":"3cb9b596e98a9aeafb50da2390642e66","hash":"thumbnail_griffin_498f33dd2d","mime":"image/webp","name":"thumbnail_griffin.webp","path":null,"size":11.82,"width":236,"height":156,"sizeInBytes":11822}},"hash":"griffin_498f33dd2d","ext":".webp","mime":"image/webp","size":106.12,"url":"https://cdn.assadali.dev/griffin_498f33dd2d.webp","previewUrl":null,"provider":"aws-s3","provider_metadata":null,"createdAt":"2026-07-05T02:53:26.248Z","updatedAt":"2026-07-05T02:53:26.248Z","publishedAt":"2026-07-05T02:53:26.249Z"},"parent":{"id":16,"documentId":"yxtifsko8mx60b6m6uemu2u4","title":"Work","slug":"work","createdAt":"2026-07-04T23:12:47.591Z","updatedAt":"2026-07-04T23:13:03.593Z","publishedAt":"2026-07-04T23:13:03.623Z"},"tags":[{"id":8,"documentId":"qsb4govqyk5eg6khf625ar8m","name":"TAG","slug":"tag","createdAt":"2026-07-05T00:04:17.901Z","updatedAt":"2026-07-05T00:04:19.460Z","publishedAt":"2026-07-05T00:04:19.479Z"},{"id":6,"documentId":"yhelpp4miwjvbctvydj2y7py","name":"Vue.js","slug":"vue-js","createdAt":"2026-07-01T11:03:20.792Z","updatedAt":"2026-07-01T11:03:22.107Z","publishedAt":"2026-07-01T11:03:22.126Z"},{"id":12,"documentId":"vmlfgwwfx2zzbvf1cwu5jpdp","name":"Three.js","slug":"three-js","createdAt":"2026-07-05T00:05:03.907Z","updatedAt":"2026-07-05T00:05:04.971Z","publishedAt":"2026-07-05T00:05:04.984Z"},{"id":25,"documentId":"yltsy6ql5xm7zuucoau72q6i","name":"AR","slug":"ar","createdAt":"2026-07-05T02:09:58.422Z","updatedAt":"2026-07-05T02:10:14.310Z","publishedAt":"2026-07-05T02:10:14.327Z"},{"id":27,"documentId":"n3y7lha2mw7dwn3salz5l5t4","name":"Blender","slug":"blender","createdAt":"2026-07-05T02:10:30.566Z","updatedAt":"2026-07-05T02:10:31.467Z","publishedAt":"2026-07-05T02:10:31.481Z"}],"seo":null,"projectContent":[{"id":54,"body":[{"type":"paragraph","children":[{"text":"Built entirely within the mobile browser to eliminate download friction, ","type":"text"},{"url":"https://www.satellite.co.nz/work/experiential-projects/griffins-1","type":"link","children":[{"text":"the application","type":"text"}]},{"text":" integrated 8th Wall, A-Frame, and Three.js to handle high-precision AR image recognition on physical product packaging. The experience featured custom 3D assets optimised in Blender, web-based microphone audio detection that allowed users to physically \"blow out\" virtual candles, and real-time backend state verification via our custom TAG engine to safely process instant-win rewards.","type":"text"}]}],"__component":"content.rich-text"}]},{"id":60,"documentId":"re8wbbz5tj6nx4cxcujtcbwt","title":"Mazda World of Wearable Arts","slug":"work/mazda-world-of-wearable-arts","order":15,"summary":"Led the frontend development for a premium multi-screen web application pairing a mobile user experience with a live projection-mapped installation inside the Mazda CX-60. ","lead":"Led the frontend development for a premium multi-screen web application pairing a mobile user experience with a live projection-mapped installation inside the Mazda CX-60. ","createdAt":"2026-07-05T02:56:52.826Z","updatedAt":"2026-07-05T02:58:09.266Z","publishedAt":"2026-07-05T02:58:09.318Z","image":{"id":20,"documentId":"dirgieebk4x7y5kqqqtprc9l","name":"mazda.webp","alternativeText":null,"caption":null,"focalPoint":null,"width":1008,"height":614,"formats":{"large":{"ext":".webp","url":"https://cdn.assadali.dev/large_mazda_c454885b31.webp","etag":"158c083ac556a7bc5923365fa040e159","hash":"large_mazda_c454885b31","mime":"image/webp","name":"large_mazda.webp","path":null,"size":103.88,"width":1000,"height":609,"sizeInBytes":103884},"small":{"ext":".webp","url":"https://cdn.assadali.dev/small_mazda_c454885b31.webp","etag":"8c95c48127ff8397e34c581a60e20fe4","hash":"small_mazda_c454885b31","mime":"image/webp","name":"small_mazda.webp","path":null,"size":40.61,"width":500,"height":305,"sizeInBytes":40612},"medium":{"ext":".webp","url":"https://cdn.assadali.dev/medium_mazda_c454885b31.webp","etag":"8f19a15c45a24193bfeb6f635176ee76","hash":"medium_mazda_c454885b31","mime":"image/webp","name":"medium_mazda.webp","path":null,"size":72.92,"width":750,"height":457,"sizeInBytes":72916},"thumbnail":{"ext":".webp","url":"https://cdn.assadali.dev/thumbnail_mazda_c454885b31.webp","etag":"d860caa81ca243a7ac2ecb562a29c5d9","hash":"thumbnail_mazda_c454885b31","mime":"image/webp","name":"thumbnail_mazda.webp","path":null,"size":12.22,"width":245,"height":149,"sizeInBytes":12222}},"hash":"mazda_c454885b31","ext":".webp","mime":"image/webp","size":119.96,"url":"https://cdn.assadali.dev/mazda_c454885b31.webp","previewUrl":null,"provider":"aws-s3","provider_metadata":null,"createdAt":"2026-07-05T02:57:58.977Z","updatedAt":"2026-07-05T02:57:58.977Z","publishedAt":"2026-07-05T02:57:58.978Z"},"parent":{"id":16,"documentId":"yxtifsko8mx60b6m6uemu2u4","title":"Work","slug":"work","createdAt":"2026-07-04T23:12:47.591Z","updatedAt":"2026-07-04T23:13:03.593Z","publishedAt":"2026-07-04T23:13:03.623Z"},"tags":[{"id":8,"documentId":"qsb4govqyk5eg6khf625ar8m","name":"TAG","slug":"tag","createdAt":"2026-07-05T00:04:17.901Z","updatedAt":"2026-07-05T00:04:19.460Z","publishedAt":"2026-07-05T00:04:19.479Z"},{"id":6,"documentId":"yhelpp4miwjvbctvydj2y7py","name":"Vue.js","slug":"vue-js","createdAt":"2026-07-01T11:03:20.792Z","updatedAt":"2026-07-01T11:03:22.107Z","publishedAt":"2026-07-01T11:03:22.126Z"},{"id":12,"documentId":"vmlfgwwfx2zzbvf1cwu5jpdp","name":"Three.js","slug":"three-js","createdAt":"2026-07-05T00:05:03.907Z","updatedAt":"2026-07-05T00:05:04.971Z","publishedAt":"2026-07-05T00:05:04.984Z"},{"id":2,"documentId":"d99o13jrb98n4j3d7klg05yg","name":"Bootstrap","slug":"bootstrap","createdAt":"2026-07-01T11:02:53.752Z","updatedAt":"2026-07-01T11:02:54.840Z","publishedAt":"2026-07-01T11:02:54.861Z"}],"seo":null,"projectContent":[{"id":56,"body":[{"type":"paragraph","children":[{"text":"Built with Vue.js and Three.js, ","type":"text"},{"url":"https://www.satellite.co.nz/work/experiential-projects/mazda-at-wow","type":"link","children":[{"text":"the application","type":"text"}]},{"text":" featured an animation-heavy registration flow that constructed a generative 3D \"mood blob\" model in real time based on user interactions. Responsibilities included optimising client-side WebGL rendering and architecting the data-point synchronisation via a TAG backend to trigger physical projector displays and automated post-event personalised video campaigns.","type":"text"}]}],"__component":"content.rich-text"}]},{"id":76,"documentId":"bkt6sdnkh3d5h4td6lglok6s","title":"Fieldays Digital Ecosystem","slug":"work/fieldays-digital-ecosystem","order":16,"summary":"Architected and delivered a multi-tenant web ecosystem consolidating Fieldays, Mystery Creek, and NZNFS into a single Sulu CMS instance.","lead":"Architected and delivered a multi-tenant web ecosystem consolidating Fieldays, Mystery Creek, and NZNFS into a single Sulu CMS instance.","createdAt":"2026-07-05T00:51:22.391Z","updatedAt":"2026-07-06T10:44:53.347Z","publishedAt":"2026-07-06T10:44:53.418Z","image":{"id":10,"documentId":"iutwuguy9ix4nq94fnrewhl9","name":"fieldays.webp","alternativeText":null,"caption":null,"focalPoint":null,"width":1002,"height":449,"formats":{"large":{"ext":".webp","url":"https://cdn.assadali.dev/large_fieldays_ee48a53a42.webp","etag":"fd9e7067d3fd32ad4e00a6518f542984","hash":"large_fieldays_ee48a53a42","mime":"image/webp","name":"large_fieldays.webp","path":null,"size":64.68,"width":1000,"height":448,"sizeInBytes":64680},"small":{"ext":".webp","url":"https://cdn.assadali.dev/small_fieldays_ee48a53a42.webp","etag":"dada6098773e33d4f47e907f1482b566","hash":"small_fieldays_ee48a53a42","mime":"image/webp","name":"small_fieldays.webp","path":null,"size":23.79,"width":500,"height":224,"sizeInBytes":23788},"medium":{"ext":".webp","url":"https://cdn.assadali.dev/medium_fieldays_ee48a53a42.webp","etag":"a131497406aba751ba9b54bf243d2783","hash":"medium_fieldays_ee48a53a42","mime":"image/webp","name":"medium_fieldays.webp","path":null,"size":44.2,"width":750,"height":336,"sizeInBytes":44202},"thumbnail":{"ext":".webp","url":"https://cdn.assadali.dev/thumbnail_fieldays_ee48a53a42.webp","etag":"e96884d7c9221a7869e6a1603738f5e6","hash":"thumbnail_fieldays_ee48a53a42","mime":"image/webp","name":"thumbnail_fieldays.webp","path":null,"size":7.7,"width":245,"height":110,"sizeInBytes":7698}},"hash":"fieldays_ee48a53a42","ext":".webp","mime":"image/webp","size":78.74,"url":"https://cdn.assadali.dev/fieldays_ee48a53a42.webp","previewUrl":null,"provider":"aws-s3","provider_metadata":null,"createdAt":"2026-07-05T00:55:29.308Z","updatedAt":"2026-07-05T00:55:29.308Z","publishedAt":"2026-07-05T00:55:29.308Z"},"parent":{"id":16,"documentId":"yxtifsko8mx60b6m6uemu2u4","title":"Work","slug":"work","createdAt":"2026-07-04T23:12:47.591Z","updatedAt":"2026-07-04T23:13:03.593Z","publishedAt":"2026-07-04T23:13:03.623Z"},"tags":[{"id":8,"documentId":"qsb4govqyk5eg6khf625ar8m","name":"TAG","slug":"tag","createdAt":"2026-07-05T00:04:17.901Z","updatedAt":"2026-07-05T00:04:19.460Z","publishedAt":"2026-07-05T00:04:19.479Z"},{"id":10,"documentId":"z7kq31j42sp1nhk04bbdyffz","name":"Sulu CMS","slug":"sulu-cms","createdAt":"2026-07-05T00:04:53.257Z","updatedAt":"2026-07-05T00:04:54.660Z","publishedAt":"2026-07-05T00:04:54.672Z"}],"seo":null,"projectContent":[{"id":74,"body":[{"type":"paragraph","children":[{"text":"As the sole developer, I built the responsive frontend using Vue.js, established a custom Bootstrap design system, optimised media pipelines via Cloudflare CDN, and engineered a custom Vimeo-driven ","type":"text"},{"url":"https://www.fieldays.co.nz/","type":"link","children":[{"text":"VOD platform.","type":"text"}]},{"text":" Concurrently, I collaborated with backend engineers to deliver the frontend for their ","type":"text"},{"url":"https://www.satellite.co.nz/work/activations/fieldays","type":"link","children":[{"text":"TAG ecosystem","type":"text"}]},{"text":", building the consumer portals, ticketing site and personalised mobile sites. In 2020, I built the ","type":"text"},{"url":"https://www.satellite.co.nz/work/activations/fieldays-online-2020","type":"link","children":[{"text":"Fieldays Online","type":"text"}]},{"text":" platform.","type":"text"}]}],"__component":"content.rich-text"}]},{"id":70,"documentId":"yel5ixxx2it5i1z75qkhs70m","title":"Legacy projects","slug":"work/legacy-projects","order":17,"summary":"Various projects over the years, built with various web technologies. Most of these projects are no longer active, maintained or have been rebuilt.","lead":"Various projects over the years, built with various web technologies. Most of these projects are no longer active, maintained or have been rebuilt.","createdAt":"2026-07-05T03:13:47.793Z","updatedAt":"2026-07-05T03:18:18.701Z","publishedAt":"2026-07-05T03:18:18.743Z","image":null,"parent":{"id":16,"documentId":"yxtifsko8mx60b6m6uemu2u4","title":"Work","slug":"work","createdAt":"2026-07-04T23:12:47.591Z","updatedAt":"2026-07-04T23:13:03.593Z","publishedAt":"2026-07-04T23:13:03.623Z"},"tags":[],"seo":null,"projectContent":[{"id":66,"body":[{"type":"heading","level":3,"children":[{"text":"House of Travel","type":"text"}]},{"type":"paragraph","children":[{"text":"Developed core client-side components for a high-volume, full-stack digital itinerary planner and traveler dashboard utilising Vue.js, Symfony, Bootstrap and the HOT API.","type":"text"}]},{"type":"paragraph","children":[{"text":"","type":"text"}]},{"type":"heading","level":3,"children":[{"text":"Mix & Match","type":"text"}]},{"type":"paragraph","children":[{"text":"Maintained and scaled the high-traffic frontend layer of the core flight and holiday booking engine (hitting the HOT API booking engine) during its foundational growth phase, managing data delivery across a Bolt CMS, jQuery, and Bootstrap 3 architecture.","type":"text"}]},{"type":"paragraph","children":[{"text":"","type":"text"}]},{"type":"heading","level":3,"children":[{"text":"Tip Top & Kāpiti Ice Cream","type":"text"}]},{"type":"paragraph","children":[{"text":"Built and launched the client-facing digital web presences for New Zealand’s iconic ice cream portfolios using Craft CMS, jQuery, and Bootstrap 4, focusing on rich media handling, seamless multi-device responsiveness, and high-performance delivery for mass consumer traffic.","type":"text"}]},{"type":"paragraph","children":[{"text":"","type":"text"}]},{"type":"heading","level":3,"children":[{"text":"","type":"text"},{"url":"https://www.barossavalleyestate.com/nz","type":"link","children":[{"text":"Barossa Valley Estate","type":"text"}]},{"text":" / ","type":"text"},{"url":"https://www.oysterbaywines.com/nz/","type":"link","children":[{"text":"Oyster Bay Wines","type":"text"}]},{"text":"","type":"text"}]},{"type":"paragraph","children":[{"text":"Engineered the responsive client-facing web presences for premier international wine portfolios utilising a Craft CMS, jQuery, and Bootstrap architecture, delivering optimised media handling and seamless localised regional flows.","type":"text"}]}],"__component":"content.rich-text"}]}],"posts":[{"id":4,"documentId":"cvgc3olt6t3husn3vap8zs1m","title":"Curb your perfectionism","slug":"blog/curb-your-perfectionism","date":"2026-07-05","summary":"Well, it’s done… finally.","lead":"Well, it’s done… finally.","createdAt":"2026-07-01T11:04:59.518Z","updatedAt":"2026-07-05T10:05:29.195Z","publishedAt":"2026-07-05T10:05:29.247Z","image":null,"parent":{"id":18,"documentId":"edn74t9alpnzmy1pyed6t4k1","title":"Blog","slug":"blog","createdAt":"2026-07-04T23:13:34.094Z","updatedAt":"2026-07-04T23:13:35.116Z","publishedAt":"2026-07-04T23:13:35.145Z"},"seo":null,"postContent":[{"id":71,"body":[{"type":"paragraph","children":[{"text":"There is an old observation that the architect’s house is never finished. In the frontend world, the equivalent is the developer’s personal site. It isn't a lack of ability that delays it, it’s the exact opposite. ","type":"text"}]},{"type":"paragraph","children":[{"text":"When you spend your day building things for others, your own domain ceases to be just a website. It becomes a tempting, unregulated R&D lab.","type":"text"}]},{"type":"paragraph","children":[{"text":"I decided to treat myself like a strict client, look at the project with a product manager's eye, and brutally trim the fat from my grand masterpiece.","type":"text"}]},{"type":"paragraph","children":[{"text":"The irony of waiting until a site is \"perfect\" to deploy it is that the web doesn't work that way. The web is iterative, messy, and alive.","type":"text"}]},{"type":"paragraph","children":[{"text":"Now that the baseline is actually live on a public URL, the pressure is off (or is it?). Future updates, adding the bells and whistles, aren’t daunting hurdles keeping me from launching. They are just feature releases or different sections of the website now.","type":"text"}]},{"type":"paragraph","children":[{"text":"If you are currently sitting on a half-finished portfolio, a stalled side project, or a local branch that you’ve been \"polishing\" for six months, take a scalpel to it. Cut the features until it hurts, ship the 5%, and build the rest out in the open - or don’t, it’s your website, it’s your playground.","type":"text"}]},{"type":"paragraph","children":[{"text":"A live MVP will always beat a perfect localhost.","type":"text"}]},{"type":"paragraph","children":[{"text":"","type":"text"}]}],"__component":"content.rich-text"}]}],"mainMenu":[{"id":12,"label":"Home","documentId":"llbm9o92rapgzlbff2jhj66t","slug":"home"},{"id":13,"label":"Work","documentId":"yxtifsko8mx60b6m6uemu2u4","slug":"work"},{"id":14,"label":"About","documentId":"f433m3luvj9nhtqaquiqcnda","slug":"about"},{"id":15,"label":"Contact","documentId":"ftkbn3wgfi6q1kwq9rl56fob","slug":"contact"},{"id":16,"label":"Blog","documentId":"edn74t9alpnzmy1pyed6t4k1","slug":"blog"}]}