{"id":119,"date":"2026-06-02T15:43:10","date_gmt":"2026-06-02T15:43:10","guid":{"rendered":"https:\/\/www.yuridek.com\/blog\/?p=119"},"modified":"2026-06-02T15:43:10","modified_gmt":"2026-06-02T15:43:10","slug":"how-i-built-a-web-app-using-codex","status":"publish","type":"post","link":"https:\/\/www.yuridek.com\/blog\/2026\/06\/02\/how-i-built-a-web-app-using-codex\/","title":{"rendered":"How I built a web app using Codex"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">In today\u2019s design world, our work has moved beyond the purely aesthetic to become a multidisciplinary field that combines psychology, business strategy and, increasingly, AI-powered programming.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Recently, I faced a challenge with one of my clients, Colegio San Jorge de Arica, which led me to cross that boundary: from being a user of tools to becoming the creator of one.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The Challenge: Performance<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">My work with my client isn\u2019t just about \u201credesigning a website\u201d. The aim is to transform their platform into a tool that reflects their identity: a blend of innovation and tradition. By professionalising their corporate image, we\u2019re not just seeking visual impact, but also aiming to meet clear business objectives, such as increasing interest in enrolments.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">However, aesthetics (the <a href=\"https:\/\/lawsofux.com\/aesthetic-usability-effect\/\">Aesthetic-Usability Effect<\/a> suggests that beauty is perceived as more usable) are of no use if the platform is slow. This is where theory meets technical reality: the <a href=\"https:\/\/lawsofux.com\/doherty-threshold\/\">Doherty Threshold<\/a> tells us that productivity and satisfaction skyrocket when the system response time is under 400ms. In the context of a school, where parents are looking for information quickly, every millisecond counts; this is why it is so important to focus on image optimisation, and all the more so for this project, given that 68% of users access it via mobile phones.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The Image Problem and the AVIF Solution<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Images are the lifeblood of a school\u2019s website, but they are also its biggest drag on loading speed. This is where the AVIF format comes in. It is currently the king of compression: it offers an impressive reduction in file size without any noticeable loss of visual quality.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Although Elementor offers <a href=\"https:\/\/elementor.com\/products\/image-optimizer\/\">an AVIF optimisation tool<\/a>, it does so via an additional paid service. So, NOT wanting to pay for this service was what motivated me to create my own AVIF image optimiser.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At first, we tried to solve this directly within a WordPress plugin. The plugin could take images uploaded to the media library and generate optimised versions. However, a major problem arose: image conversion relies heavily on the resources and capabilities of the server hosting WordPress.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On shared hosting, such as that typically used for WordPress sites, there isn\u2019t always full support for AVIF, WebP, Imagick, GD or modern compression libraries. Furthermore, converting large images consumes CPU, memory and processing time. This can lead to errors when uploading images, queued processes, timeouts or a poor user experience.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That\u2019s why I decided to split the problem into two parts:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Create an external web app dedicated exclusively to optimising images.<\/li>\n\n\n\n<li>A WordPress plugin that communicates with my web app and uses the optimised result within WordPress.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Creating my own web app<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Up until now, my workflow for optimising images has been manual. I would crop my image and then drag it onto <a href=\"https:\/\/squoosh.app\">https:\/\/squoosh.app<\/a>, a brilliant web app that compresses images into AVIF format, leaving them weighing practically nothing whilst still looking great. So, once I had the resulting AVIF image, I\u2019d manually upload it to WordPress, which took up valuable time.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As this web app works so well, what I did was use <a href=\"https:\/\/openai.com\/es-419\/codex\/\">Codex<\/a> to create an app inspired by Squoosh, but called Squishy (a name inspired by the jellyfish from Finding Nemo \u2013 delicate, yet powerful \ud83e\udebc\ud83d\ude02).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I now had my own web app for optimising images, at a fraction of the price Elementor would charge me for its image optimisation service. If you\u2019d like to try it out, you can do so here: <a href=\"https:\/\/squishy.yuridek.com\/\">https:\/\/squishy.yuridek.com\/<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The next task would be to create a WordPress plugin that uses my app, compresses the image \u2018externally\u2019, and then uses the result in WordPress.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2014 Continued in part two<\/p>\n","protected":false},"excerpt":{"rendered":"<p>What started as a website performance problem became an unexpected leap into AI-assisted development. This post explores how I used Codex to build \u201cSquishy,\u201d my own AVIF image optimisation web app, turning a manual workflow into a faster, scalable solution for WordPress and mobile-first design.<\/p>\n","protected":false},"author":1,"featured_media":120,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-119","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.yuridek.com\/blog\/wp-json\/wp\/v2\/posts\/119","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yuridek.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yuridek.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yuridek.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yuridek.com\/blog\/wp-json\/wp\/v2\/comments?post=119"}],"version-history":[{"count":1,"href":"https:\/\/www.yuridek.com\/blog\/wp-json\/wp\/v2\/posts\/119\/revisions"}],"predecessor-version":[{"id":121,"href":"https:\/\/www.yuridek.com\/blog\/wp-json\/wp\/v2\/posts\/119\/revisions\/121"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.yuridek.com\/blog\/wp-json\/wp\/v2\/media\/120"}],"wp:attachment":[{"href":"https:\/\/www.yuridek.com\/blog\/wp-json\/wp\/v2\/media?parent=119"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yuridek.com\/blog\/wp-json\/wp\/v2\/categories?post=119"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yuridek.com\/blog\/wp-json\/wp\/v2\/tags?post=119"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}