I pride myself on being an AI enthusiast. These days, anything related to AI easily becomes my favourite topic. While I try not to wear people out with my newfound passion, I can’t always help myself.
I’ve also noticed that people react very differently to AI. At one extreme, some deliberately avoid it altogether — afraid they might “lose the ability to think” or somehow become… less intelligent.
Huh?
Others see AI as just another tool — useful for summarising articles or doing a quick search. Some even believe that every interaction is simply “training the machine”.
So what do I think?
To me, working with AI feels like collaborating with someone who knows vastly more than I do — someone who can recall information instantly, brainstorm endlessly, and push me harder than I would ever push myself. It doesn’t get tired. It doesn’t slow down. And because of that, I haven’t felt this kind of intellectual stretch in a very long time.
Over the past weekend, we worked through everything — rescuing data from my ageing NAS, fixing character encoding issues on my website, and somehow still finding time to talk about music I love, like Prince.
And then I decided to do something I hadn’t done in over twenty years.
I went back to programming.
Back to Where It Started
The last time I did any serious programming was more than two decades ago. Inspired by Bongo Cat — currently one of the more popular idle games on Steam — I wanted to build something similar in spirit.
Not a game, but a companion.
Something I could display alongside Bongo Cat while recording or streaming my favourite games on YouTube.
A Simple Idea (At First)
The idea started small:
A floating overlay timer
A female character in a Ghibli-style aesthetic
Changeable outfits
Why a timer?
Because I like my activities to be time-bound — especially when I’m gaming. Efficiency matters to me. I want to see whether I’m improving, and to plan my day accordingly.
A Weekend of Pushing Limits
I won’t walk through every step of how ChatGPT and I built this. What I will say is this:
We pushed each other.
Hard.
The weekend was full of trial and error, debate, frustration, breakthroughs, and the occasional compromise. It didn’t feel like following instructions. It felt like building something together.
What I Actually Built
According to AI, I didn’t “just learn Python”.
Behind the scenes, this is what emerged:
🧱 A Real Desktop App (Not Just a Script)
- A stateful desktop app with settings persisted via SQLite
- A custom UI built with PySide6 (layout, styling, controls)
- A frameless, always-on-top overlay window
- Deep Windows integration (click-through, DWM tweaks, system behaviour)
- Global hotkeys with responsive input handling
⚙️ Interaction & Feedback That Feels Alive
- Clickable character with randomised outfit changes (no repetition)
- Clear separation of behaviours (reset ≠ outfit change)
- Lightweight logging with timestamps and session context
- Animated status messages with subtle transitions
- A lightweight animation system (breathing, bounce, float)
🎨 A Character System, Not Just Images
- A consistent base character with fixed identity, pose, and proportions
- A reusable outfit system with structured clothing and accessories
- A styling framework to maintain visual consistency
- A shift from “random images” to a cohesive character design system
🤖 AI as a Tool, Not a Crutch
- Prompt-engineered asset generation with controlled outputs
- Proper PNG transparency handling (learned the hard way)
- A workflow that treats AI images as inputs, not final assets
- Same-context generation to preserve geometry consistency
🧪 A Hybrid Asset Pipeline (Where Things Got Serious)
Separation of concerns:
- AI → generation
- Code → precision and consistency
Compositing approach:
- Base character (locked)
- Outfits layered on top
Technical pipeline:
- Mask-based extraction (manual + assisted)
- Image alignment (anchor points, affine transforms)
- Python compositing using PIL for deterministic rendering
🎮 A Game-Like Rendering Model
- Transition from simple image swapping to a layered system
- Base, outfit, and accessories as independent components
- Deterministic visuals (no drift, no cumulative degradation)
- Closer to a 2D game rendering system than static images
🧠 Design Decisions That Mattered
- Removed unstable features early (e.g. blinking animation)
- Replaced hardcoded assets with dynamic folder scanning
- Derived user-friendly names from filenames (no JSON overkill)
- Improved layout through spacing, not complex positioning
- Recognised when problems were layout issues, not code issues
- Chose simplicity and stability over over-engineering
What It Became
What started as a timer became something else entirely:
- A lightweight desktop companion
- Visually alive, but not distracting
- Extensible without touching the code
- Simple on the surface, structured underneath
The Real Outcome
In the end, this project wasn’t about building a timer — or even a character.
It was about learning how to work with something powerful, but imperfect.
Both AI and I have our limits.
The trick is figuring out who should do what — and not asking either of us to do the impossible.