With tech moving at warp speed these days, B has kinda allowed herself to become a luddite by spending most of her productive hours camped inside the (2023) ISLP textbook instead of actually building stuff with the latest available tools.
So in March 2026, she decided to hop on the Codex bandwagon to:
- Understand the buzz around Codex
- Take baby steps into building again — this time with the help of the “latest” AI tools
As a first small but real project, I used Codex to help me build AWhitePen Observatory (https://github.com/a-white-pen/awhitepen-observatory), the custom WordPress theme for this site.
Here are B’s review & reflections on the process — what I learned, what surprised me, what worked, and what didn’t.
Expectation vs. Reality
B isn’t new to WordPress, JavaScript, or PHP. And B technically could have coded the theme “by hand” instead of using AI, like she would have if we were still living in 2005.
But they say the AI can code faster than the human, right?
Well, B spent approximately 20–25 hours over the course of a week building this theme with the help of Codex 🤷♀️
To be fair, the theme was built with some custom features — like the API-powered footer bits, and some classic editor and TinyMCE customisations. It would have probably taken human B just as long, possibly longer, to build everything given the time required to re-familiarise herself with the technical docs.
The AI also custom-built some of the theme’s visual assets such as the favicon, logo, and footer icons.
The 20–25 hours also included the time spent on setting up LocalWP for testing purposes, figuring out workflows, connecting to hosting, etc.
How the build actually went
After spending quite a lot of time imagining the site out, I finally started building.
In my mind, the process was going to be simple. I would prompt Codex step by step, in a neat and logical order — like a good Product Manager — to avoid unnecessary chaos, scope creep, and AI confusion:
- Create visual assets with GenAI
E.g. logo, favicon package, footer icons, etc. - Build the NavBar
- Build the footer
- Add Dark Mode and Mobile Mode
Step 1: Generate the visual assets
I’d talk to ChatGPT (the older brother) to brainstorm potential ideas, and then say: “Based on what we’ve just discussed, please generate a prompt for your brother Codex to build.”
Yes. I really did say “your brother Codex”. And I did it a lot just because I was slightly irritated the whole time. Did I just kill the planet by adding those additional words? 😂
This was the very first prompt that ChatGPT wrote for me:
Now create a favicon asset package for this WordPress theme repo:
/Users/bwan/repo/awhitepen
Important:
- put all favicon files in the top-level theme folder under:
/Users/bwan/repo/awhitepen/assets/favicon/
- do not place them inside nested duplicate folders such as /Users/bwan/repo/awhitepen/awhitepen/assets/
- keep the existing classic WordPress theme structure intact
Design brief:
- minimalist fountain pen nib only
- no full pen body
- black outline only
- transparent interior
- transparent background
- nib rotated about 45 degrees, pointing toward the bottom-left corner
- elegant, editorial, refined, slightly classic
- extremely simple and legible at 16x16
- thick outline
- optional very minimal breather hole only if it remains legible at tiny sizes
Do not include:
- fill inside the nib
- shading
- gradients
- textures
- shadows
- text
- decorative background
- extra objects
- intricate detail
- thin lines
Implementation requirements:
1. create the favicon as a clean hand-authored SVG, not a raster illustration
2. use that SVG as the master source asset
3. generate a favicon package inside:
/Users/bwan/repo/awhitepen/assets/favicon/
Deliverables:
- favicon.svg
- favicon-16x16.png
- favicon-32x32.png
- favicon-48x48.png
- apple-touch-icon.png
- site.webmanifest
- favicon.ico containing 16x16, 32x32, and 48x48 if possible
- preview.html
- README.md
- generate-favicon.sh with commands to regenerate PNG and ICO assets from the SVG if needed
WordPress integration:
4. update the theme so favicon files are referenced correctly
5. add the exact favicon and manifest tags needed for a classic WordPress theme
6. use proper WordPress functions and paths, not hardcoded localhost URLs
7. put integration in the appropriate place, preferably via functions.php and wp_head, or clearly explain the preferred approach
Output:
- show the final favicon file tree
- show the contents of each created file
- show exactly which existing theme files were modified
- if ICO generation cannot be done directly, create the script and instructions for generating it locally from the SVG or PNGs
Do not:
- convert the theme to React, Next.js, or a block theme
- move unrelated theme files
- create duplicate nested theme folders
- put favicon assets in the wrong assets directory
So did it work? Technically, yes.
But the generated assets were crap — they looked more like a poorly drawn raindrop than the pen nib I asked for.
And it took the GenAI something like 10-15 minutes each time to create the asset set. Halfway through I even got irritated and tried to put the same prompt into ChatGPT and even CapCut instead lol.
On hindsight, I should probably have reduced the deliverables such that the AI only creates 1 image for me to ‘pass or fail’ before creating the rest.
So after something like an-hour-and-a-half fighting with the AI, I gave up and went on to Step 2 instead.
Step 2: Build the NavBar
Codex was, thankfully, much better at building the NavBar. It followed instructions well, the results were clean, and this was probably the smoothest step in the whole process.
Step 3: Build the footer
Then came the footer, which was a whole different story.
I was switching between ChatGPT, Codex, and actually reading the official documentation myself to figure out the available embeds and APIs, token access, and how to to implement.
The API for Strava kept failing. It got to a point whereby regardless of the prompt I used, the API connection just wouldn’t work!
Honestly, by this step, I was just approving Codex’s work without really checking through (c’mon let’s be honest here, we’ve all been there).
I probably spent 2+ hours being stuck here before I finally decided to do this manually. Reading the docs, testing the API ‘by hand’ via PostMan… turns out Codex was pinging a deprecated API 💩
Step 4: Add Dark Mode and Mobile Mode
Thankfully this step was relatively pain free to implement.
And ChatGPT pretty much generated all the font colours for Codex to implement.
The painful part was having to fight with GenAI again to complete Step 1: Create necessary media materials with GenAI to complete the project.
Yes, I know that if we look closely at the logo, it still doesn’t look like the words were written by the pen. But at this point, I’ve simply given up prompting the AI 🏳️.
Am so done with generating images with prompts. Why does it have to regenerate images from scratch over and over again instead of simply editing the bits that need editing? Is there anything I’m doing wrong here? Please send tips if anyone out there has a solution 🙏😭
Extra Step: Customising the Classic Editor
Actually, I totally forgot to plan one step lolol: customising the Classic Editor.
I didn’t realise that this was necessary until I realised that I wasn’t able to do things I’d typically be able to do on WordPress – like adjusting line spacing, embedding HTML, or customising font size by px.
This step ended up involving quite a bit of trial and error. Even with the reasoning level set to extra high, I still had to prompt Codex very specifically — telling it which files to inspect, what order to test things in, and sometimes even where and how to make changes.
Codex would often change one part e.g. the Classic Editor toolbar itself, but fail to change the other linked parts e.g. the corresponding visual output inside the editor, or the actual HTML rendered on the page.
It’s like the worker downstairs your house build the wall, then tear down, then build again. IYKYK.
Stress levels: expectation vs. reality
Coding with Codex wasn’t any less stressful than coding by hand.
The exact same uncertainties still existed: not knowing whether something would work, not knowing how long a bug would take to fix, and not knowing whether the current approach was actually the right one.
And that was stressful.
There were also new layers of uncertainty that came with AI-assisted coding — like figuring out the “correct” level of reasoning to use, or constantly making little trade-offs between speed and accuracy.
I probably overkilled it by leaving the reasoning level on Extra High for basically every task 🤷♀️. Probably just a kiasu Singaporean problem.
On hindsight, that was unnecessary for a lot of what I was doing.

And honestly, in between waiting for things to generate, I probably scrolled more TikTok and Instagram in the past week than I normally do in an average month. And that would have contributed a bit to my heightened levels of anxiety and irritation as well, lolol.
At some point, I also started editing the README and some of the hardcoded text manually myself. Partly because it was faster, and partly because I had reached my limit for explaining obvious things to a machine.
So no, AI did not remove the stress of coding. It just changed the shape of it.
What I’d have done differently
I admit, I mega-screwed-up the last line of Codex’s official best practices:
Using one thread per project instead of one thread per task. This leads to bloated context and worse results over time
Source: https://developers.openai.com/codex/learn/best-practices
The entire theme was coded in 1 thread 😂. And I did not have a proper AGENTS.md set-up.
All good for a random hobby project. But not good for actual work.
Gonna learn next:
a.k.a next rabbit holes 🕳️
- How to write effective AGENTS.md files
- Open Claw
- Model Context Protocol (MCP)
Do drop me links if you’ve got good resources!