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.
- 2025+ AI-orchestrated delivery
- 2026
TaleCheck
Static analysis for fiction, built solo with Claude Code and parallel agents: 1,446 commits in under three months, live with paid users.
TypeScriptNestJSClaude CodeAnthropic API
- 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.
- 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.
- 2017+ Web3 & real-time platforms
- 2022–
Fractional CTO
Technical partner to founders: fixed-scope builds, architecture reviews and due diligence.
- 2021
Generative NFT trees that grow 📷 2
For a Web3 game I made trees that grow on-chain. Each NFT gets a 256-bit genome from Chainlink VRF, and my decoder turns it into the tree’s character: branch length and thickness, angles, sagging and curvature, the pull of gravity, crown density. Then a recursive algorithm draws the tree into a voxel grid, block by block in the style of Minecraft, with 3D simplex noise for the shape of the crown and the bends of the branches. Every growth step, up to ten of them, is a transaction, and every branch has its own seed, so the tree grows rather than being redrawn: a twig from the previous step becomes a branch and splits further. The world around it also gets into the picture: the crown thickens or thins with the token price between steps (from a Chainlink price feed), the colour of the bark comes from the owner’s address, the sky changes over an hourly day–night cycle, lamps glow in the leaves, and owners who had just voted for the project got golden or pink crowns. At first the pictures came from a voxel ray tracer that a studio introduced by my partners offered: I sent it the grid over an agreed protocol, it queued the job, and I polled for the result. But it only drew cubes, it was paid, and I depended on someone else’s servers. So I switched to Blender: each model is exported to GLTF and rendered on the server in Blender Cycles by a Python script, and now I could add any objects, ground plates, cameras and lights, on a mature open-source engine. A metadata service serves the picture of every growth step. About a month of work in October 2021, on Polygon and BNB Chain. The renders below I made again in 2026 from the original code, with Blender 2.93 and the original scene.
TypeScriptNode.jsBlenderChainlink
Twelve random genomes, each at its last growth step.
- 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
- 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
- 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
- 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.
- 2010+ Unity & a 35-person studio
- 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.
UnityZebrainy ABCs review on GameGrin (2017) ↗
Zebrainy ABCs: the world of the letter A.
- 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#BlenderGameDev Workshops on YouTube ↗
Me presenting at a MadSword workshop, December 2015.
- 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 - 2013
Physics club for preschoolers
A volunteer physics club in Riga for children of preschool age. Friends started it for their own kids, then for the kids of acquaintances, and I joined as an instructor; the children paid a token fee, and I took no money. We launched rockets on compressed air and CO₂, played with dry ice, density and toy cars. The video is one of the rocket experiments.
- 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
- 2012–2018
MadSword 📷 7
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
- 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 - 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.
- 2011
Unity: Bastions
First Unity game: two towers, build yours and shell the opponent’s with cannons. Planned as multiplayer.
UnityC# - 2004+ C++, OpenGL & own engines
- 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
- 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 - 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
- 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.
- 2005
ULTRA ParaShop: my own CMS 📷 3
An online shop for a paragliding club — wings, harnesses, hang gliders, microlights — on my own engine over PHP 5 and PostgreSQL rather than a ready-made CMS. Every page is a tree stored in the database: location, blocks (left, centre, right), groups, pagelets. Each piece is drawn by a template that is also stored in the database and edited in the admin, in my own template language with variables, conditions, loops and nested components. The admin edits the live page in place: every block and group gets a toolbar to add, move, hide or delete. Products with colours and model tables, a basket with orders sent by e-mail, comments, visit and sales statistics, three languages (RU, EN, LV), images kept in the database, and backup and restore from the admin with the dump sent by e-mail. About 10,000 lines of PHP. In 2026 I brought it back up in Docker from the November 2005 backup to take these screenshots.
PHPPostgreSQLJavaScript
The shop’s home page in Russian, restored from the 2005 backup.
- 2005
- 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.
- 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 - 1994+ BASIC, Pascal & olympiads
- 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.
- 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 - 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 - 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 - 2003
My own PHP course
Wrote my own web-programming course in PHP for Progmeistars and taught it.
PHPMySQL - 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. My method: the problem first, then the tool. At night I ran LAN parties that brought together olympiad kids, university groups, teachers and musicians.
Progmeistars, 2006: a student lost a bet to his teacher and paid up on the whiteboard.
- 2002
Half-Life and Counter-Strike maps 📷 10
Maps for Counter-Strike, built from years of playing it: we didn’t like running for half a minute to the enemy only to die. cs_mini is a small map with many routes — terrorists start in a house under siege, counter-terrorists can go round it from two sides, down into the sewers or up to the roof three ways. ge_roy is even smaller, for 4 on 4.
Valve Hammer Editor - 2002
kindex.times.lv — my first website 📷 2
My first site, on the free times.lv hosting, written by hand in HTML and JavaScript: an intro, about me, a CV, the story of my nickname, photos, my Winamp playlist, links and a guestbook. The main page was progs, my programs to download: Doom RF (“fits on one floppy”), Space War 2K, F(x) and two Counter-Strike maps. The demos I wrote that year invited people to it in their scrolling text. Also from that time, in Delphi: Ticker, a metronome for my guitar practice. The screenshots are of the December 2004 version.
HTMLJavaScriptDelphi
kindex.times.lv, the version of December 2004.
- 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).
- 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. In the video below is our faculty, modelled in my own engine, Steel Engine, with textures from photos I took there myself.
C++Numerical methods
At the whiteboard: the Fourier method, University of Latvia.
- 2002
IOI gold medal
From algorithm books and the Progmeistars sponsored elite group to 2nd place at the Latvian olympiad and bronze at the Baltic one, then gold at the International Olympiad in Informatics in Yongin, Korea — 18th place overall, one of 23 gold medals (listed as Andrejs Ivanovs, Latvia). At the Latvian olympiad I was the only one to score 100 on two problems, one of them “Operācija @”, choosing where to put brackets in a 250-digit expression with a non-associative operation, which earned the Progmeistars special prize for quality of solutions. For the olympiads I received awards from the Government of Latvia and the Riga City Council.
AlgorithmsPascal
- 2001
Pinball: vector physics 📷 2
I wanted a third Space War without its collision problems, so I started on vector physics. Each ball is a rotating polygon, walls are arbitrary segments, and the step from the old position to the new one is intersected with every wall and nearby ball, so a fast ball can’t tunnel through. Penetration is pushed out along a mass-weighted normal, a bounce keeps 98% of the speed and adds spin, and balls can attract each other like planets. Free Pascal and a grid over the world took it from about 39 to over 200 frames per second. This is where the road to my physics coursework, Steel Engine and the master’s thesis began.
Free PascalPhysics
Pinball, September 2001: balls piling up, the line in each shows its rotation.
- 2000–2003
Lamer test
A humour test that tells you who you are with computers: a dummy, a lamer, a user, a hacker, a programmer or a gamer. Every answer adds points to each of the six types, and the types closest to the top score win. First as a DOS program in December 2000, then in 2003 as a website in PHP and MySQL with registration by nickname and statistics of answers.
Turbo PascalPHPMySQL - 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 PascalSDL2Download for Windows / Linux ↗
- 2000
Money & Power
A strategy game in the spirit of Heroes of Might and Magic, mixing turn-based and real-time battles: taxes give money, the army gives power, spells give magic, and in the design document, dated July 2000, there were already unit stats, a morale formula and skills such as telepathy and raising the dead. The team was IVAvision: Sergey Trasko and I wrote the code, my friend Pavel Burakov drew the art. The game itself was never finished, but the pieces survived.
Turbo PascalVGA - 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 - 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 - 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 - 1998–2002
Demoscene
Small programs that just draw something beautiful, from points on a sphere in 1998 to a fire intro with scrolling text in 2002. Most are a few dozen lines that write straight into video memory.
PascalFree PascalVGA
- 1998–2002
DiVision projects
Everything that was not a game. Our school ran a programming contest every winter, and for a few years it was my main reason to write code. In January 1998 I brought four programs and got the prize for the most original one; for the 1999 contest I had ten; in 2001 I took first place in three categories and the audience award. Most of all I made what I needed myself: a file manager, a shell, a vocabulary trainer, a metronome.
Turbo PascalFree PascalDelphi
- 1998–2001
DiVision games
The smaller games I made between the big ones (Tank, Space War, Lamer-Killer, Doom RF), in Turbo Pascal and later Free Pascal. Most of them were written for the school programming contest, and all of them still run in DOSBox.
Turbo PascalBGIText mode
- 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 - 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 - 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 - 1996
Pascal
Moved to Pascal — the language of every olympiad and my first real games. In class we almost competed over who had written more programs: everyone carried their own floppy disk, “I’ve got a hundred programs” — “and I’ve got a hundred and twenty”. The programs were very simple, like entering two numbers and printing their sum, but every lesson added something. After that I wanted to make a big game of my own, and started Tank.
Pascal - 1994
First programs in BASIC
Started programming in BASIC on a Soviet BK-0010 home computer, then QBasic on a PC.
BASICBK-0010QBasic