As I reflected back on my final week at Aptiv, I was astounded by how many messages I received, not just of best wishes, but of genuine gratitude, personal memories, and reflections on how I impacted others. I decided to feed them into an LLM to extract the traits and descriptors people used for me… and I was blown away. That led to a simple but powerful idea: what if anyone could paste a bunch of text into a tool, ask AI to extract specific kinds of words, and instantly generate a word cloud?
The hardest part of any project is getting started. Blank canvas. Empty page. In an effort to embrace coding-assist tools as much as possible, I kicked things off with OpenAI Codex and described the functionality I had in mind. It proposed a tech stack (React, Tailwind, and OpenAI API), and once that was locked in, it split the work into two tasks: one for the frontend, one for the backend. I kicked off both tasks in Codex, caught up on email, and came back to reviewed pull requests. With those merged, the slate was no longer blank, and I moved into Cursor to start iterating.
The first bump in the road was (I think) a CORS issue between the frontend and backend. Rather than spend too long debugging it, I combined everything into a single backend app to simplify running and sharing it. I kept the README updated throughout. Within about 90 minutes, I had a working (if raw) version up and running.
Next challenge: which AI service to use? I initially considered ChatGPT before realizing that the ChatGPT interface and the OpenAI API are two different things. I wanted this to be easy for others to try, so I ended up going with Gemini since it felt like the lowest barrier to entry.
From there, it became a fun cycle of polish and tweak. I adjusted the layout and formatting, added functionality like ignoring vague terms (as flattering as “great” or “best” are, they don’t say much on their own), and tried out different word cloud shapes and color palettes. At one point, I even had a big spinning word cloud GIF, which was hilarious, but totally unreadable.
I also added a way to cache the word list so that you could make visual changes without repeatedly calling the Gemini API. These small improvements came together in short bursts while multitasking, and eventually, I had a working, shareable app that delivered on the original vision.
The entire process was fun, and a great reminder that while coding-assist tools are powerful, they still need a knowledgeable driver. There were plenty of moments where I had to redirect or clarify. My favorite? I asked for the text boxes to each take up 50% of the screen and be centered. I even pasted in a screenshot. The model interpreted that literally rendering the text boxes as 550 pixels wide (50% of my screenshot), absolute rather than relative. A funny misunderstanding, and a good example of why specificity still matters.
I’m looking forward to building more personal projects like this one and continuing to explore how AI and modern dev tools can amplify creativity and speed without removing the joy of building.
Here’s the final word cloud based on the messages I received:
Check out the GitHub repo if you want to try it yourself or fork the project.