I am an AI-holic. You know that guy who once in a while has a lot of fun drinking, has a huge hangover the next day, and swears “never again”? I am sort of that guy, but with AI.
Going all-in on AI, burning out on it, and promising “never again.”
Last week, I started ramping up my AI usage, thinking, It’s not bad, it’s quite useful. It’s not annoying anymore—maybe it improved. I played around with local LLMs, and they can do stuff; it’s not bad. Some rough edges, but it’s salvagable. I thought maybe I was getting better intuition, or maybe AI was just getting better. Yesterday, I decided to give AI a task: rewrite my build scripts. Over ten years, I’ve been maintaining my own set of build scripts just to make my life less miserable in the big AAA machine with its AAA setup. I never intended to share those scripts, so they were sloppy, ugly, and required nonstop maintenance and tweaking. So, I composed the prompt and let an agentic AI—let’s give some specificity: Sonnet 5 under a Copilot harness—refactor my scripts and make them ergonomic and beautiful.
It did the job very well. It actually did it too well, except for one small footgun. That was two days ago. I was enjoying the scripts for one day, and today everything fell apart. You know, a day passes, and I thought I had introduced some regression or oversaw something in the past. I bisected the game code with git, went back two months, and everything was broken.
I am in AI euphoria. I asked the AI to figure out what was going on, and for the whole day, we were chasing ghosts. You know what happened? I have rsync. There is a switch: --cvs-exclude. I’ve had those scripts for ten years; that switch is old, and I barely remember what it does, but it excludes a lot of heavy binaries. However, in our codebase, some binaries are included in the repository and are important, so I had to explicitly include one folder called core in the rsync arguments.
Without that explicit inclusion, a handful of files weren’t syncing with the build machine, failing the build. But our build scripts aren’t perfect either, so things only fell apart on a completely clean build. You wouldn’t hit it just cleaning in Visual Studio—you had to manually delete files first, and only then would the build break. Which is exactly why everything was working fine yesterday.
AI isn’t there yet. The idea of rewriting software from scratch might sound great, but prepare to painfully rediscover a lot of tribal knowledge—like that little switch that just wasted a whole day of useful development.
Never again, AI. Until tomorrow… AI?
Once in a while I’m in the mood to try AI-assisted, not even vibe coding, just as an experiment — checking the boundaries. On some tasks it’s very fast and feels really good, but sometimes it gets stuck badly, missing steps that are obviously needed. It just hammers away in different random places, “yelling” that it gathered crucial information that explains everything, then reports the issue is fixed. You say, “no, it isn’t.” After several iterations of this, you’re losing patience, so you ask the AI to make a small test harness so it can verify the fix itself. Then it gets stuck in an infinite loop of reasoning, and you end up walking it through the fix step by step, finally resolving the bug. And after 4 hours, you’re thinking it probably would’ve taken you 30 minutes to fix it yourself.
🤔

It should have two checkboxes instead of three radio buttons. The checkboxes should be “Spoiler Channel” and “Age Restricted Channel” instead of the radio buttons “Default,” “Spoiler Channel,” and “Age Restricted Channel.” This allows users to select both “Spoiler Channel” and “Age Restricted Channel”.

🌸 Sun, Aug 2, 2026 🌸
I tried to use the teleprompter feature in Meta Display Glasses. On the camera, it made me look like I had a lazy eye.
Flight 13 Starship did not explode on the landing. It reminds me about a classic: “I asked a girl out and she actually said yes. Wtf do I do now? 😭😭”
Why is this becoming illegal? 👿 So much code is broken!
#include <print>
enum { Fps = 60 };
auto main() -> int
{
std::println("frame time: {} sec", 1.f / Fps);
}
Add persistent settings UI with audio, video, and look controls
- Add a full settings screen with persistent prefs and separate audio buses.
- Replace the placeholder settings tab with controls for master/SFX/music volume, fullscreen, V-Sync, show FPS, look sensitivity, and invert Y, backed by a Settings singleton saved under the SDL pref path.
- Add a Slider widget and layout tweaks so the pause UI can host these options.
- Route volumes through MasterSpeaker/SfxSrc/MusicSrc,
- Support exit to title (stub) or desktop via the game-mode loop.
WIP Pause Screen UI
- Bring up the pause screen when pressing the Esc button.
- Pause the game if the pause screen is shown.
- Start implementing the Settings UI.
- Hide any UI screen by pressing the Esc button.
Finalize Crafting Table UI
- Remove crafting table, keep only recipes.
- Craft directly from the recipe list.
- Crafted item goes directly to the inventory.
- Add tabs, and have only one tab: “Crafting Table.”
- On closing the crafting table UI, if something is in the hand, it automatically go into the inventory.
- Add XP to the player when crafting an item.
- Instead of appending, try to find a free slot and put the new item in the free slot.
- Bug: After clicking on the recipe, selection jumps to the other recipe.
- Bug: Shortcut inventory with B when the crafting table UI is displayed should not overlap with the crafting table UI.
- SFX for failed craft.
WIP Crafting Table UI
- Pass player’s level to crafting table UI.
- Pass callback on item crafted, so player can update encountered items list and regenerate unlocked recipes.
- Add “hand” to the crafting table UI.
- Move hand dimensions setup into the Hand constructor.
- Implement hand and inventory interaction in the crafting table UI.
- Implement item stacking.
- Visualize the number of items in the slot.
TODO: - [ ] Show number of items in the hand, not only icon. - [ ] On closing the crafting table UI, if something is in the hand, it should automatically go into the inventory.
Have you ever wondered why the Google Search spellchecker works better than the Chrome one? You can actually use the Google Search spellchecker; it is in the settings under enhanced spellcheck.

🌸 Thu, Jul 9, 2026 🌸
Graphics engineers are trying to move computation from the CPU to the GPU; C++ engineers are trying to move computation from the CPU to the compiler.
🌸 Sun, Jul 5, 2026 🌸
My laptop crashed. It feels like the equipment reflects my mental state. Unstable mental state, unstable equipment.
🌸 Fri, Jul 3, 2026 🌸
Finalize Healing Father cutscene and refactor observer pointer casting
- Implement healing phase for crystals, where elemental elements move toward Roran, shrink, and are absorbed.
- Implement Roran’s healing behavior, stopping skin flickering and transitioning to a healed idle animation.
- Add skip button for Cutscene 5.
- Add and register voice-over audio for Roran and Alar/Alara.
- Simplify and refactor callback timer code across multiple files by capturing
thisdirectly and usingobserver_from_this()without casting. - Inline one-off helper functions
applyDmgToPlayer,checkSurroundingsTick,wakeUp, andtypeOneChar. - Remove debug prints for GroundState, velocity, and ambient colors.
- Update cutscene script and todo documentation.
🌸 Fri, Jul 3, 2026 🌸
WIP Cutscene 5
- SFX for typing, sending, and receiving messages.
- Finalize msg bubble and msgs widget.
- Teleporter skeletal mesh.
- Animation of installing and activating the teleporter.
- Implement texting between hero and Roran.
- Tune the timings for different events in the cutscene.
🌸 Wed, Jul 1, 2026 🌸
WIP Msgs
- Make Roran’s userpic.
- Make two background images for the message bubble: personal and contact.
- Create the background for the messaging app.
- WIP: MsgBubble
- Use an interactive ico for interactive objects instead of the mob HUD in the Player.
WIP Cutscene 5
- Move the player to the viewpoint.
- Temporarily disable Guardian so he would not bark during the cutscene testing.
- Implement startCutscene/stopCutscene in the Player class.
- Start implementing the Msgs class for the messaging UI.
Refactor text rendering subsystem
- Fully remove Render dependency from text rendering.
- Make Label own TextBuf and draw text in uiPass via Render::UiIn.
- Add Label::setText(), setColor(), and setSz().
- Update checkbox, fps-label, menu-item, stats-ui, tab, and related UI code to use the new Label API.
- Fully remove FontManager class.
- Delete font-type.hpp.
- Convert Atlas to a singleton.
- Rename cube-atlas.{hpp,cpp} to atlas.{hpp,cpp}.
- Add Atlas::init() and Atlas::shutdown(), called from BgfxInit.
- Font loads TTF data directly and caches SizedFont per pixel size.
- Extract TrueTypeFont from the old font-manager code.
- Add sized-font.{hpp,cpp} for sized font instances and glyph lookup.
- Remove text-metrics and move dimension logic into Font::getDimensions.
Roran Flickering VFX
- Finalize Roran’s mesh, texturing, and rigging.
- Implement skin glow flickering VFX.
- Implement Roran’s idle animation.
- Implement Roran’s walk animation.
- Hack SkMesh to override Roran’s mesh material loading.
- Add
scene.hppinclude innode-types-registry.hppso user of NodeTypesRegistry would not need to includescene.hpp. - Clean Jolt build artifacts with the
clean-allMakefile target.
WIP Roran

Some WIP

Stats UI
- Implement showing all player stats except armor.
- Move close button from Inventory UI to player.
Vibecoding is truly gambling. Waste of time. Never again.
Implement player stats HUD and mechanics
- Replace stats icon with new StatsHud UI component.
- Bind HP, mana, hunger, thirst, and energy percentage callbacks to StatsHud.
- Return 0.0 for mana percentage if the player uses a weapon requiring more mana than available.
- Halve character movement velocity when hunger or thirst is depleted.
- Make walk footstep SFX less often when hunger or thirst is depleted.
- Regenerate player HP slowly over time.
- Implement StatsHud class rendering five radial stat indicator arcs.
- Define stats-hud-ui.frag fragment shader to color code status indicators and handle blinking at zero values.
- Register stats-hud-ui.frag shader in assets.
- Update TODO list for survival stats framework, mechanics, and UI.
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 18 - 19 - 20 - 21 - 22 - 23 - 24 - 25 - 26 - 27 - 28 - 29 - 30 - 31 - 32 - 33 - 34 - 35 - 36 - 37 - 38 - 39 - 40 - 41 - 42 - 43 - 44 - 45 - 46 - 47 - 48 - 49 - 50 - 51 - 52 - 53 - 54 - 55 - 56 - 57 - 58 - 59 - 60 - 61 - 62 - 63 - Next