Journey

From BASIC to AI agents

Every five years or so I relearned the craft: Pascal, C++ and OpenGL, Unity, Solidity, TypeScript, and now AI-orchestrated delivery. Here is what I built along the way.

  1. 1994+ BASIC, Pascal & olympiads
  2. 1994

    First programs in BASIC

    Started programming in BASIC on a Soviet BK-0010 home computer, then QBasic on a PC.

    BASICBK-0010QBasic
  3. 1996

    Pascal

    Moved to Pascal — the language of every olympiad and my first real games.

    Pascal
  4. 1997

    Super Amik 📷 9

    Designed a platformer on paper, level by level in a school notebook: game design before there was a machine to build it on.

    Paper
  5. 1998

    Tank — my first finished product

    My first big program taken from idea to a finished game: a tank battle in Pascal, drawn in text mode on an 80×50 grid, with levels, weapons, a menu and a title screen. About a thousand lines, grown from March to May 1998 through version 1.60; that autumn followed Tank 2 with graphics.

    Turbo PascalText mode
  6. 1999

    Space War

    My first good game: two ships in a duel, rotation by sine and cosine worked out on my own, ships that deform on ramming, a vector ship editor, a dozen weapons, missions and my own BMP/WAV loaders.

    PascalBGIVector graphics
  7. 1998–2001

    DiVision games

    More self-made games, among them Capture or Destroy.

    PascalFree PascalDelphi
  8. 2000

    Lamer-Killer: 3D with no engine

    A top-down shooter with a classmate that turned into my own software 3D renderer — no engine, no GPU, every pixel computed on the CPU with a projection formula I derived myself, years before I knew how Doom did it. The level editor stored the map as a walkability grid, and an optimiser merged long walls into single polygons.

    PascalSoftware rendering
  9. 2000

    Space War 2K: one engine, three games 📷 4

    Inspired by how Half-Life mods worked, I built one engine and one executable that ran three different games — ship dogfights, top-down tanks in the spirit of GTA, and a Worms-like artillery game — just by swapping resource folders and config rules. The main menu played a video rendered in 3ds Max, through my own delta-frame format and BMP loader, in Pascal, which had no video support at all.

    PascalEngineVideo codec
  10. 2000

    Russian Pascal

    A translator that let you write Pascal in Russian — a way in for those who didn’t know English. Keywords came from an editable dictionary, so any language would do; Russian identifiers were transliterated automatically; << and >> stood for begin and end, and there were inline macros. It plugged into the Borland Pascal IDE as a Tools hotkey: Shift+F9 translated the file, compiled it with Borland’s own compiler and ran it. A small resident program highlighted the Russian keywords right in the Borland editor.

    PascalBorland Pascal
  11. 2001

    Doom RF 📷 2

    Made in two weeks as a birthday present for a classmate, then polished for a year: 4 players on one computer plus 8 waypoint bots, a level editor, and a bank-switching trick to draw 640×480 past the 64 KB video window. In 2026 ported to 64-bit and SDL2, with sound, as a proper release.

    Borland PascalFree PascalSDL2
    Doom RF
  12. 2002

    IOI gold medal

    From algorithm books and the Progmeistars sponsored elite group to 2nd place at the Latvian olympiad and the Baltic olympiad, then gold at the International Olympiad in Informatics in Yongin, Korea — 18th place overall, one of 23 gold medals (listed as Andrejs Ivanovs, Latvia).

    AlgorithmsPascal
    IOI gold medal
  13. 2002–2008

    University of Latvia 📷 3

    Computer Science at the University of Latvia, bachelor’s and then master’s degree. The bachelor’s thesis, “Modelling mechanical motion in computer graphics” on my Steel Engine, made the top ten of 125 theses in e-Dimensija 2006, a Microsoft Latvia and Ministry of Economics contest.

    C++Numerical methods
    At the whiteboard: the Fourier method, University of Latvia.

    At the whiteboard: the Fourier method, University of Latvia.

  14. 2002–2006

    ACM ICPC

    Five seasons of the ACM International Collegiate Programming Contest for the University of Latvia. In 2002, as first-year students — Alexander Belov, Sergey Kozlovich and me, all three from IOI 2002 — we came 1st in the university selection, 6th at the quarterfinal in Minsk and at the Northeastern Europe semifinal in St Petersburg became the best team from the Baltic States. It was thanks to that first-year result that the university was allowed to send four teams to the next quarterfinal instead of two. Later, as team BUGS-XP and then BUGS.NET, we took 3rd place at the 2004 quarterfinal in Minsk and 5th at the 2005 one.

    AlgorithmsC++
    Our University of Latvia team: Alexander Belov, Sergey Kozlovich and me (right).

    Our University of Latvia team: Alexander Belov, Sergey Kozlovich and me (right).

  15. 2002

    Maps, demos and F(x) 📷 10

    Half-Life / Counter-Strike maps, small programs that render pretty graphics, and F(x) — a function plotter with zoom and scroll, written in Delphi.

    Delphi
  16. 2002–2011

    Teaching at Progmeistars

    Nine years teaching programming to groups of students at Latvia’s largest children’s programming school; built a new curriculum.

    Progmeistars, 2006: a student lost a bet to his teacher and paid up on the whiteboard.

    Progmeistars, 2006: a student lost a bet to his teacher and paid up on the whiteboard.

  17. 2003

    My own PHP course

    Wrote my own web-programming course in PHP for Progmeistars and taught it.

    PHPMySQL
  18. 2003

    IRC bouncer

    IRCdaemon: an IRC proxy and bouncer in C++ on bare WinSock, with no networking libraries. You connected your IRC client to it with a password; when you left, it stayed in your channels with an away message. Several users, each with their own nick, server and channels, admin rights, and a debug mode that logged all traffic.

    C++Borland C++ BuilderWinSockIRC
  19. 2003

    Tournament of Computer Programs

    Won the 12th Tournament of Computer Programs at Progmeistars (as Andrey Ivanov), where programs play a game against each other. The trick was a precomputed table of 16 million positions packed into 2 MB.

    PascalAlgorithms
  20. 2003–2004

    Testing Suite

    With Sergey Kozlovich and Alexander Belov, my ACM teammates, we built a system for running programming olympiads. Sergey wrote the testing kernel: a queue of submissions, participants’ programs run under a separate user in a chroot with limits on time, memory and child processes, C++ and Free Pascal compilers. Alexander wrote the checker plugins. I built the web part in PHP and MySQL: logins, submissions, results, questions to the jury, and per-olympiad settings such as when participants and guests may see the standings.

    PHPMySQLC++Linux
  21. 2003–2007

    Sysadmin at Progmeistars 📷 2

    Alongside teaching, I was the school’s system administrator: set up and ran its Linux servers on Gentoo and kept the students’ classroom computers working, down to building my own kernels.

    LinuxGentooNetworking
    Configuring a Linux 2.6 kernel for a school machine, October 2005.

    Configuring a Linux 2.6 kernel for a school machine, October 2005.

  22. 2004+ C++, OpenGL & own engines
  23. 2004

    C++ and OpenGL: Chess 3D 📷 2

    Moved to C++ (the STL made olympiad work far easier) and to full 3D. First commissioned project: a 3D chess game with bump mapping and reflection maps.

    C++OpenGL
  24. 2004–2006

    Physics 2D

    Coursework that grew into the 3D physics of my bachelor’s thesis on Steel Engine: an own physics engine and a full game on top of it, inspired by Elasto Mania and Half-Life 2. The 2005 coursework, “Collision Detection”, supervised by Prof. Paulis Ķikusts, set the goal: a hundred rigid polygon bodies in real time that never pass through each other, even at a low frame rate. It surveyed how games had done it — bounding boxes in Doom and Mario, grid hashing in Warcraft, polygons in Quake and Havok — and added methods of my own: the cylinder method, which treats a moving, rotating body in 2D plus time as a twisted cylinder so a collision inside a time step is found exactly, a sequential collision algorithm, and the moment of inertia of an arbitrary polygon.

    C++STLOpenGL
    From the coursework: a star that moves and rotates, drawn in space plus time, becomes a twisted cylinder. Collision detection becomes finding where such cylinders intersect.

    From the coursework: a star that moves and rotates, drawn in space plus time, becomes a twisted cylinder. Collision detection becomes finding where such cylinders intersect.

  25. 2005

    Xray

    Commissioned demo on my engine: X-rays passing through a semi-transparent bone.

    C++OpenGL
  26. 2005–2018

    muo.lv

    A private MuOnline server I co-founded and programmed: 300–400 players online within weeks of the 2006 launch. I built everything around the game — a PHP site with a player market, rankings, auctions, item trade and quests, SMS payments, a credit economy, a VIP server, public ban lists — plus my own anti-cheat, server tunnel, launcher and auto-updater, and a bot that ran in-game events.

    PHPSQL
    muo.lv in the Season 6 years: character rankings and who is online.

    muo.lv in the Season 6 years: character rankings and who is online.

  27. 2006

    Steel Engine 📷 5

    An own C++ engine: scenes defined in config, prefabs with overridable parameters — the idea Unity later made mainstream. It was also my bachelor’s thesis, “Modelling mechanical motion in computer graphics” (University of Latvia, 2006, supervisor Dr. Paulis Ķikusts): separate graphics and physics engines, where an object only describes how it looks and the engine decides how to draw it; and a rigid-body physics model written from scratch in 3D, with six degrees of freedom — the cylinder method and the sequential collision algorithm carried over from my 2D coursework, scripted trajectories alongside free motion, collisions resolved by conservation of momentum and energy, about a hundred bodies in real time. The reviewer noted that the motion in the demos really obeys the laws of physics, which many graphics engines of the time did not. Source is public.

    C++OpenGL
    Steel Engine
  28. 2006–2012

    whiteCryption

    Software architect for white-box cryptography and code protection (RSA, ECC, SHA, AES). Designed the v5 architecture, still in production ~15 years later, now inside Zimperium.

    C++Cryptography
  29. 2008

    Labyrinth 📷 6

    My master’s thesis at the University of Latvia (2008, supervisor Doc. Kārlis Freivalds): Steel Engine, grown to about 30,000 lines of C++, and Labyrinth, a networked race through a generated maze, as its demo. I founded and led our DiVision team and wrote everything except sound, which was by Andrejs Movļaiko. Highlights: per-pixel lighting in GLSL, where every combination of light count and material flags compiles its own shader once and is then cached; shadow volumes with Carmack’s reverse, chosen over shadow mapping for exact shadows; a visibility algorithm for mazes that made a 100×100 labyrinth playable instead of 14×14, because the number of drawn objects no longer depends on the maze size; and a network protocol on top of the enet library with a sync method of my own, penalty synchronization — bodies of different players may briefly overlap, and forces push them apart.

    C++OpenGLGLSLNetworking
    Labyrinth
  30. 2010+ Unity & a 35-person studio
  31. 2011

    Unity: Bastions

    First Unity game: two towers, build yours and shell the opponent’s with cannons. Planned as multiplayer.

    UnityC#
  32. 2011

    Nunnery

    A two-day game jam at a London hackerspace, full of soldering irons, robots and servers. I went at the invitation of Igor, a university acquaintance who had worked at Sony and now made 2D games on his own cross-platform engine, IGE, aimed mostly at consoles like the PSP. Our team made two games; I was the main programmer of Get Me to a Nunnery, a platformer about a jumping nun. I picked IGE over Unity to learn the engine for future games, and spent two more days at home refactoring.

  33. 2012

    MyCountry at innoWate

    Two months at a Game Insight studio on MyCountry, a city builder with 5M+ installs on Google Play: bug fixes and bringing back old mechanics.

    C++Mobile
  34. 2012–2018

    MadSword 📷 4

    Co-founded a game studio and grew it to 35 people. Started Steam Defense at a kitchen table, raised an investor, then moved to contract games for publishers: one reusable Unity engine with a level editor and shared server shipped 100+ titles and reskins and thousands of levels. 160+ games and 20M+ downloads in total, largely through a Dutch publisher. VR titles too.

    UnityC#Java
    MadSword
  35. 2013

    Global Game Jam: Tankraft

    A networked multiplayer tank battle built in one weekend with a teammate: own server or a dedicated one, two weapons, physics-driven tanks. Shipped for Windows, macOS, Linux and the browser.

    UnityC#Networking
    Global Game Jam: Tankraft
  36. 2013

    Steam Defense launch

    MadSword’s first own release, on Kongregate, VK and Odnoklassniki: own scenario scripting, skirmish and PvP AI, and BotWars — a night-long stress test of tens of thousands of units that made the game crash-free in three weeks.

    UnityC#Networking
    Steam Defense launch
  37. 2015–2016

    Free game-dev workshops 📷 2

    We opened the MadSword office to the local community for free evening workshops: how games are made in Unity and Blender, and the nuances we had learned in production — from rigging characters to building anti-cheat in Unity C#. Recordings are on YouTube.

    UnityC#Blender
    Me presenting at a MadSword workshop, December 2015.

    Me presenting at a MadSword workshop, December 2015.

  38. 2015–2020

    Zebrainy 📷 3

    Co-owner and technical director of an educational games company for young children. One of its apps, Zebrainy ABCs, teaches the alphabet: a child drags glowing spheres into the shape of a letter, then explores an illustrated world of words that start with it — 26 letters, 26 worlds.

    Unity
    Zebrainy ABCs: the world of the letter A.

    Zebrainy ABCs: the world of the letter A.

  39. 2017+ Web3 & real-time platforms
  40. 2017

    Decrypted Kitties 📷 4

    A CryptoKitties-style game built in about a week and published on Google Play on 31 December 2017 as “Crypto Kitties Decrypted Simulator” — the first step into crypto games. Collect, breed and sell cats with their own genes, no wallet or ether needed.

    Unity
    Decrypted Kitties, Google Play, December 2017.

    Decrypted Kitties, Google Play, December 2017.

  41. 2017–2021

    Blockchain Cuties

    Wrote Ethereum contracts for others, then co-founded Cuties and launched it in four months (April 2018), before ERC-721 was final. Characters and breeding on-chain, items and battles on the server with one-time signatures verified by contracts. Ethereum, then EOS, TRON, NEO and Polygon — a multi-chain design later extended to 7. #1 on DappRadar; 2021: governance token contracts and IDO.

    SolidityNode.jsEOSTRON
    Blockchain CutiesBlockchain Cuties
  42. 2020–2024

    Dice Chess

    Real-time chess with a dice variant, owned from idea to launch: spec, architecture, own test system for chess positions; load-tested for 20,000 concurrent players.

    JavaVueTypeScriptMicroservices
    Dice Chess
  43. 2021–

    Roach Racing Club 📷 9

    Web3 racing game from scratch, steered by live crypto trading: smart contracts, tokenomics, a custom WebGL engine for live races of 10, a race model balanced in my own simulator, and a microservice backend. On the web and in Telegram.

    SolidityThree.jsTypeScript
    Roach Racing Club
  44. 2022–

    Fractional CTO

    Technical partner to founders: fixed-scope builds, architecture reviews and due diligence.

  45. 2025+ AI-orchestrated delivery
  46. 2025–2026

    Griddle Fun 📷 4

    A game on a live crypto chart: you tap the grid cell you think the price will hit, and win at that cell’s multiplier. The hard part was the maths of pricing every cell. I did it together with a mathematician: I set the task, tested his results and sent back what was off, while also building the game itself. The simulation testing was mine — bots playing different strategies, greedy and otherwise, against the payouts — until the odds held up. A run over 604,800 seconds of prices (one week) came out almost exactly at break-even, ROI about 0.4%, as designed.

    The grid: each cell ahead of the price line has its own multiplier.

    The grid: each cell ahead of the price line has its own multiplier.

  47. 2026

    Voxel world in a week 📷 4

    A Minecraft-style voxel world in Unity, built in about a week in February 2026 with Claude Code: procedural terrain with mountains, rivers and forests, a world split into chunks, and editing with a block brush — down to planting trees.

    UnityC#Claude Code
    Procedural terrain: a river, hills and mountains.

    Procedural terrain: a river, hills and mountains.

  48. 2026

    TaleCheck

    Static analysis for fiction, built solo with Claude Code and parallel agents: ~2,300 commits in under three months, live with paid users.

    TypeScriptNestJSClaude CodeAnthropic API
    TaleCheckTaleCheck