[{"data":1,"prerenderedAt":342},["ShallowReactive",2],{"content-collection-types":3,"content-project-links":238,"content-project-food-webapp":302},{"clients":4,"stacks":126,"roles":201},[5,10,16,21,26,31,36,41,46,51,56,61,66,71,76,81,86,91,96,101,106,111,116,121],{"code":6,"title":7,"logo":8},"ajinomoto","Ajinomoto",{"url":9,"alternativeText":7},"/media/brands/ajinomoto-white.png",{"code":11,"title":12,"logo":13},"asb","Asia School of Business",{"url":14,"alternativeText":15},"/media/brands/asb-white.png","Asia Business School",{"code":17,"title":18,"logo":19},"aff","Asean Football Federation",{"url":20,"alternativeText":18},null,{"code":22,"title":23,"logo":24},"cagamas","Cagamas",{"url":25,"alternativeText":23},"/media/brands/cagamas-white.png",{"code":27,"title":28,"logo":29},"divinestellar","Divine Stellar",{"url":30,"alternativeText":28},"/media/brands/divine-stellar.png",{"code":32,"title":33,"logo":34},"dofd","Democracy of Dreams",{"url":35,"alternativeText":33},"/media/brands/dofd-small-white.png",{"code":37,"title":38,"logo":39},"ecosys","Ecosys",{"url":40,"alternativeText":38},"/media/brands/ecosys-white.png",{"code":42,"title":43,"logo":44},"ecotree-hk","Ecotree Hong Kong",{"url":45,"alternativeText":43},"/media/brands/ecotree-hk-white.svg",{"code":47,"title":48,"logo":49},"eureka-efektif","Eureka Efektif",{"url":20,"alternativeText":50},"Eureke Efektif",{"code":52,"title":53,"logo":54},"flexcare","Flexcare",{"url":55,"alternativeText":53},"/media/brands/flexcare-white.png",{"code":57,"title":58,"logo":59},"gogoco","Gogoco",{"url":60,"alternativeText":58},"/media/brands/gogoco-white.png",{"code":62,"title":63,"logo":64},"ioi","IOI",{"url":65,"alternativeText":63},"/media/brands/ioi-group-white.png",{"code":67,"title":68,"logo":69},"ioi-pg","IOI Palm Garden Golf",{"url":70,"alternativeText":68},"/media/brands/ioi-pg-white.png",{"code":72,"title":73,"logo":74},"jugo","Júgo",{"url":75,"alternativeText":73},"/media/brands/jugo-white.svg",{"code":77,"title":78,"logo":79},"kirin","Kirin",{"url":80,"alternativeText":78},"/media/brands/kirin-white.png",{"code":82,"title":83,"logo":84},"mkjr","MKJR",{"url":85,"alternativeText":83},"/media/brands/mkjr-white.png",{"code":87,"title":88,"logo":89},"mypower","MyPower",{"url":90,"alternativeText":88},"/media/brands/mypower-white.png",{"code":92,"title":93,"logo":94},"ncer","NCER",{"url":95,"alternativeText":93},"/media/brands/ncer-white.png",{"code":97,"title":98,"logo":99},"ock","OCK",{"url":100,"alternativeText":98},"/media/brands/ock-white.png",{"code":102,"title":103,"logo":104},"sanki","Sanki",{"url":105,"alternativeText":103},"/media/brands/sanki-white.png",{"code":107,"title":108,"logo":109},"silcotech","Silcotech",{"url":110,"alternativeText":108},"/media/brands/silcotech.png",{"code":112,"title":113,"logo":114},"ssg","Sincere Surgery Group",{"url":115,"alternativeText":113},"/media/brands/sincere-surgery-white.png",{"code":117,"title":118,"logo":119},"thp","Teh Hong Piow Foundation",{"url":120,"alternativeText":118},"/media/brands/thp-white.svg",{"code":122,"title":123,"logo":124},"xenergi","Xenergi",{"url":125,"alternativeText":123},"/media/brands/xenergi-white.png",[127,132,137,142,146,151,156,161,166,171,176,181,186,191,196],{"code":128,"title":129,"logo":130},"nuxt","Nuxt",{"url":131,"alternativeText":20},"https://healing-morning-3f30c21d5e.media.strapiapp.com/nuxt_primary_c5bd311103.png",{"code":133,"title":134,"logo":135},"strapi","Strapi",{"url":136,"alternativeText":20},"https://healing-morning-3f30c21d5e.media.strapiapp.com/strapi_primary_9fe205414a.png",{"code":138,"title":139,"logo":140},"laravel","Laravel",{"url":141,"alternativeText":20},"https://healing-morning-3f30c21d5e.media.strapiapp.com/laravel_primary_5e19864cce.png",{"code":143,"title":144,"logo":145},"cpanel","CPanel",{"url":141,"alternativeText":20},{"code":147,"title":148,"logo":149},"bootstrap","Bootstrap",{"url":150,"alternativeText":20},"https://healing-morning-3f30c21d5e.media.strapiapp.com/bootstrap_e819dbf9ab.png",{"code":152,"title":153,"logo":154},"cpp","C++",{"url":155,"alternativeText":20},"https://healing-morning-3f30c21d5e.media.strapiapp.com/c_311cf4ed37.png",{"code":157,"title":158,"logo":159},"css","CSS",{"url":160,"alternativeText":20},"https://healing-morning-3f30c21d5e.media.strapiapp.com/css3_8a9e7d7c12.png",{"code":162,"title":163,"logo":164},"figma","Figma",{"url":165,"alternativeText":20},"https://healing-morning-3f30c21d5e.media.strapiapp.com/figma_8b3b6e5c3a.png",{"code":167,"title":168,"logo":169},"html","HTML",{"url":170,"alternativeText":20},"https://healing-morning-3f30c21d5e.media.strapiapp.com/html5_4337343270.png",{"code":172,"title":173,"logo":174},"solidworks","Solidworks",{"url":175,"alternativeText":20},"https://healing-morning-3f30c21d5e.media.strapiapp.com/solidworks_7016472005.png",{"code":177,"title":178,"logo":179},"material-ui","Material UI",{"url":180,"alternativeText":20},"https://healing-morning-3f30c21d5e.media.strapiapp.com/mui_43438b7fb1.png",{"code":182,"title":183,"logo":184},"react","React",{"url":185,"alternativeText":20},"https://healing-morning-3f30c21d5e.media.strapiapp.com/react_3426e9ede2.png",{"code":187,"title":188,"logo":189},"studio","Stud.io",{"url":190,"alternativeText":20},"https://healing-morning-3f30c21d5e.media.strapiapp.com/stud_io_22172dc0ac.png",{"code":192,"title":193,"logo":194},"javascript","Javascript",{"url":195,"alternativeText":20},"https://healing-morning-3f30c21d5e.media.strapiapp.com/javascript_bd2ef6cb10.png",{"code":197,"title":198,"logo":199},"tailwind","Tailwind",{"url":200,"alternativeText":20},"https://healing-morning-3f30c21d5e.media.strapiapp.com/tailwind_ff011b41ff.png",[202,205,208,211,214,217,220,223,226,229,232,235],{"code":203,"title":204},"frontend-cms-dev","Frontend & CMS Dev",{"code":206,"title":207},"frontend-backend-dev","Frontend & Backend Dev",{"code":209,"title":210},"frontend-dev","Frontend Developer",{"code":212,"title":213},"cms-dev","CMS Developer",{"code":215,"title":216},"backend-dev","Backend Developer",{"code":218,"title":219},"fullstack-dev","Fullstack Developer",{"code":221,"title":222},"maintenance","Maintenance",{"code":224,"title":225},"ui-ux","UI/UX",{"code":227,"title":228},"builder","Builder",{"code":230,"title":231},"project-lead","Project Lead",{"code":233,"title":234},"developer","Developer",{"code":236,"title":237},"researcher","Researcher",[239,242,243,245,246,247,248,251,254,257,260,263,266,268,269,272,275,278,279,280,281,284,285,287,290,293,296,299],{"slug":87,"title":240,"isArchived":241},"MyPOWER",false,{"slug":77,"title":78,"isArchived":241},{"slug":72,"title":244,"isArchived":241},"Jugo",{"slug":102,"title":103,"isArchived":241},{"slug":117,"title":118,"isArchived":241},{"slug":37,"title":38,"isArchived":241},{"slug":249,"title":250,"isArchived":241},"3d-rotational-cards-scroll","3D Rotational Cards Scroll",{"slug":252,"title":253,"isArchived":241},"cagamas-scholarship-portal","Scholarship Portal",{"slug":255,"title":256,"isArchived":241},"cagamas-ssbt","Cagamas SSBT",{"slug":258,"title":259,"isArchived":241},"portfolio-2026","Portfolio 2026",{"slug":261,"title":262,"isArchived":241},"letter-wedding-digital-invite","Letter Themed Digital Invite",{"slug":264,"title":265,"isArchived":241},"bento-themed-digital-invite","Bento Themed Digital Invite",{"slug":267,"title":33,"isArchived":241},"democracy-of-dreams",{"slug":47,"title":48,"isArchived":241},{"slug":270,"title":271,"isArchived":241},"cagamas-srp","Cagamas SRP",{"slug":273,"title":274,"isArchived":241},"ioi-group","IOI Group",{"slug":276,"title":277,"isArchived":241},"sincere-surgery","Sincere Surgery",{"slug":57,"title":58,"isArchived":241},{"slug":82,"title":83,"isArchived":241},{"slug":107,"title":108,"isArchived":241},{"slug":282,"title":283,"isArchived":241},"cagamas-whistleblowing-form","Cagamas Whistleblowing Form",{"slug":122,"title":123,"isArchived":241},{"slug":286,"title":68,"isArchived":241},"ioi-palm-garden-golf",{"slug":288,"title":289,"isArchived":241},"ecotree-hotel-hk","Ecotree Hotel HK",{"slug":291,"title":292,"isArchived":241},"asb-executive-education","ASB Executive Education",{"slug":294,"title":295,"isArchived":241},"portfolio-2024","Portfolio 2024",{"slug":297,"title":298,"isArchived":241},"news-dashboard","News Dashboard",{"slug":300,"title":301,"isArchived":241},"food-webapp","Food Webapp",{"id":303,"title":301,"_incomplete":20,"agency":20,"buttons":20,"category":304,"client":20,"contents":307,"createdAt":20,"date":314,"description":315,"extension":316,"isArchived":241,"meta":317,"publishedAt":20,"rarity_star":20,"roles":335,"slug":300,"specialEffect":20,"stacks":336,"stem":337,"summary":320,"thumbnail_image":338,"types":339,"updatedAt":20,"url":20,"__hash__":341},"projects/projects/webapp-pizza.json",{"title":305,"slug":306},"Case Study","case-study",[308],{"__component":309,"title":20,"description":20,"images":310,"videos":311},"partial.content-intro",[],[312],{"url":313,"alternativeText":20},"/media/projects/video-demos/Pizzeria-Webapp.webm","2024-08-01","\u003Cp>A mini full-stack-style UI system simulating a food ordering platform with separate user and admin functionality.\u003C/p>\u003Cp>&nbsp;\u003C/p>\u003Cp>\u003Cvideo class=\"video\" controls=\"\" width=\"100%\" mute=\"\" autoplay=\"\" loop=\"\">\u003Csource src=\"/media/projects/video-demos/Pizzeria-Webapp.webm\" type=\"video/webm\">\u003C/video>\u003C/p>\u003Cp style=\"text-align:center;\">&nbsp;\u003C/p>\u003Ch3 data-section-id=\"1lt45zq\" data-start=\"2411\" data-end=\"2433\">System Structure\u003C/h3>\u003Cp data-start=\"2435\" data-end=\"2448\">\u003Cstrong data-start=\"2435\" data-end=\"2448\">User Side\u003C/strong>\u003C/p>\u003Cul data-start=\"2449\" data-end=\"2572\">\u003Cli data-section-id=\"1h261i6\" data-start=\"2449\" data-end=\"2497\">browse food cards (name, description, price)\u003C/li>\u003Cli data-section-id=\"qb0df4\" data-start=\"2498\" data-end=\"2519\">add items to cart\u003C/li>\u003Cli data-section-id=\"1nmrux\" data-start=\"2520\" data-end=\"2572\">adjust quantity (increase/decrease/remove items)\u003C/li>\u003C/ul>\u003Cp data-start=\"2574\" data-end=\"2588\">\u003Cstrong data-start=\"2574\" data-end=\"2588\">Admin Side\u003C/strong>\u003C/p>\u003Cul data-start=\"2589\" data-end=\"2687\">\u003Cli data-section-id=\"1ap5l0x\" data-start=\"2589\" data-end=\"2611\">add new food items\u003C/li>\u003Cli data-section-id=\"1cvht23\" data-start=\"2612\" data-end=\"2637\">remove existing items\u003C/li>\u003Cli data-section-id=\"1j3odqb\" data-start=\"2638\" data-end=\"2687\">changes reflect immediately on user interface\u003C/li>\u003C/ul>\u003Cp>&nbsp;\u003C/p>\u003Ch3 data-section-id=\"wfdqm4\" data-start=\"2694\" data-end=\"2720\">What I Was Exploring\u003C/h3>\u003Cp data-start=\"2721\" data-end=\"2761\">This project was designed to understand:\u003C/p>\u003Cul data-start=\"2762\" data-end=\"2934\">\u003Cli data-section-id=\"xrz2rl\" data-start=\"2762\" data-end=\"2808\">shared state between roles (admin vs user)\u003C/li>\u003Cli data-section-id=\"1qmcitd\" data-start=\"2809\" data-end=\"2847\">cart logic and quantity management\u003C/li>\u003Cli data-section-id=\"wpmzjm\" data-start=\"2848\" data-end=\"2889\">UI consistency across dynamic updates\u003C/li>\u003Cli data-section-id=\"1v8dp1a\" data-start=\"2890\" data-end=\"2934\">separation of concerns in a small system\u003C/li>\u003C/ul>\u003Cp>&nbsp;\u003C/p>\u003Ch3 data-section-id=\"mzir3k\" data-start=\"2941\" data-end=\"2957\">Tech Focus\u003C/h3>\u003Cul data-start=\"2958\" data-end=\"3065\">\u003Cli data-section-id=\"ka8bft\" data-start=\"2958\" data-end=\"2967\">React\u003C/li>\u003Cli data-section-id=\"7b7ym7\" data-start=\"2968\" data-end=\"2983\">Material UI\u003C/li>\u003Cli data-section-id=\"1c8tfjv\" data-start=\"2984\" data-end=\"3028\">State synchronization between components\u003C/li>\u003Cli data-section-id=\"1p8bm6z\" data-start=\"3029\" data-end=\"3065\">CRUD + cart logic implementation\u003C/li>\u003C/ul>\u003Cp>&nbsp;\u003C/p>\u003Ch3 data-section-id=\"mlm2cg\" data-start=\"3072\" data-end=\"3085\">Insight\u003C/h3>\u003Cp data-start=\"3086\" data-end=\"3211\">This project introduced me to the idea of a \u003Cstrong data-start=\"3130\" data-end=\"3168\">mini ecosystem inside a single app\u003C/strong> — where one role directly affects another.\u003C/p>","json",{"path":318,"body":319},"/projects/webapp-pizza",{"title":301,"slug":300,"summary":320,"url":20,"isArchived":241,"rarity_star":20,"client":20,"agency":20,"date":314,"description":315,"thumbnail_image":321,"category":323,"types":324,"stacks":328,"roles":329,"contents":330},"A mini food ordering system featuring user cart interactions and admin-controlled product management. Simulated a dual-role ecosystem where admin-side product updates dynamically reflected across the user ordering interface.",{"url":322,"alternativeText":20},"/media/projects/thumbnails/food-app.webp",{"title":305,"slug":306},[325],{"title":326,"slug":327},"Dev","dev",[182,177],[233],[331],{"__component":309,"title":20,"description":20,"images":332,"videos":333},[],[334],{"url":313,"alternativeText":20},[233],[182,177],"projects/webapp-pizza",{"url":322,"alternativeText":20},[340],{"title":326,"slug":327},"tHF969L2sBQu072zbASAxmiRTDmbmqdgxFYym4Mwu_Q",1791727491389]