Projects
This page lists various projects I have worked on in the past, in approximate reverse-chronological order.
See also: my CV
Filter projects:
Category: ( )Scope:
Affiliation:
bojidar-bg.dev (current)
A website where I host a blog, experiment with web technologies freely, and use as a base for all operations marketing.
Links: Homepage (you are looking at it)
Technologies used: HTML/CSS, Pandoc, Tup, Git, Bash, AWK (learn more)
Programming with Bojidar (current)
"Programming with Bojidar" is an online JavaScript group programming course (so far, in Bulgarian) for kids (11-15). In it, I strive to attend to each kid individually, ensuring they don't get frustrated and discouraged over time, and to complement lectures with discussions and small projects, thus solidifying the material and leaving the students with tangible proof of their progress. So far, I've taught the basics of using JavaScript, with an emphasis on the fundamental pieces of computer programs and how they all come together.
I organized and marketed the course myself, along with teaching it, and it was naturally been as much of a learning experience for me as it was for the kids. So far, I've got one group of ~18 students through a 10-week course, and am now continuing it as a more of an on-going group.
Links: Marketting and signup page (in Bulgarian)
Technologies used: JavaScript, p5.js (✨), Zoom, the Google Docs suite, Zulip, Jitsi, Docker (Mongo/FerretDB/Redis/Nginx), LDAP, ...
Affiliations: HomeschoolingBG, Author Conservatory
Potential FOSS consulting? (soon!)
Stay tuned! (Or, you know, contact me. I sure wouldn't mind!)
Trusted Pods / Apocryph
Trusted Pods is a decentralized marketplace for confidential compute—think Azure's Confidential Cloud, but without the centralized authority. It allows server owners with Trusted Execution Environment-enabled CPUs to offer their hardware through a smart contract, which then allows developers and users to deploy software into a TEE enclave for a payment.
I oversaw the initialization of the project repository and codebase, and worked on getting an initial proof-of-concept beaten into shape. I meticulously documented the project along the way, so that teammates would be able to pick it up from where I left it. In addition, I aimed to keep the code as clean as possible, going as far as writing an extra adapter for the currently-standard container registry protocol instead of just passing tarballs around.
Technologies used: Go, Ethereum/Solidity, TypeScript, IPFS, Kubernetes
Links: Repository, Homepage
Affiliations: Comrade Cooperative
Validated Streams
Validated Streams is a consensus mechanism and framework for agreeing on real-world events in a decentralized network. Was financed through the Web3 Foundation's Grants program. I worked on managing our side of the grant application from the initial proposal to the final deliverable review, and led the development effort with maintaining the codebase/repository and synchronizing the other team members' work on the project.
Technologies used: Rust, Substrate
Links: Blog post, Repository
Affiliations: Comrade Cooperative
Roadkeeper
Historical fiction novel roughly set in the Rhodope mountains in pre-WWI Bulgaria. Drafted as practice for plotting and outlining within a fiction writing program.
When he gets sent to visit their sick grandfather, Luka, Mihail expects it is going to be just another chore—only slightly complicated by his sister's sprained ankle. But when the two of them show up on Luka's doorstep, Mihail ends up finding so much more—someone to learn both patience and skill from.. along with starting small before moving on to larger tasks. Yet, when Luka is no longer by his side, does Mihail have the strength to finish what they started—rebuilding the road to the village? Novel blurb
Links:
Debbie Coll from The Book Balladiers composed a beautiful theme inspired by the story. ✨ You can listen to it on SoundCloud.
Stay tuned for more!
Affiliations: Author Conservatory
Parallax wallpaper plugin
I got annoyed with how little my wallpaper changes when switching between workspaces in KDE, and ended up creating a small plugin that gently moves the wallpaper in sync with the user's workspace. Apparently it's garnered a few thousand downloads since.
Technologies used: Qt/QML, KDE Frameworks
Links: KDE Store page, Repository
Perper
Perper is a serverless stream-processing framework designed for horizontal scaling and ease of use—all the while providing powerful primitives to build, compose, and aggregate streams of data. It was built on top of Apache Ignite, and hoped to improve the productivity of our team as we could reuse it across a number of projects.
I helped maintain and review the code, developed core parts of the framework's internals, participated in architecture design discussions, and supported teammates in using the framework in their own projects. Also, landed my first bugfix in an Apache project. ✨
Technologies used: Kotlin, C#, Python, Kubernetes, Docker, Apache Ignite
Links: Repository
Affiliations: Obecto
Wetonomy / StrongForce / Apocryph-chain
Wetonomy was a library of smart-contracts for creating DAOs, or Decentralized Autonomous Organizations, based around message-passing and the actor model.
StrongForce was the framework behind that library, allowing for writing smart contracts as C# classes that pass messages to each other.
The original project was left frozen after organizational priorities shifted on creating our own blockchain, Apocryph-chain, that would unlock the full capabilities of the actor(/agent) model, including being able to register triggers after a set amount of time and to parallelize computational work.
The later two projects at Comrade stemmed from this initial work.
Initially, I integrated the core Wetonomy code with Tendermint. Then, I abstracted all that into StrongForce, so that the rest of the team could build the main product on it. Later, I participated in a lot of the design discussions and coding groundwork for Apocryph (-chain).
Technologies used: Rust, Substrate
Links: Wetonomy Repository, StrongForce Repository, Apocryph-chain Repository
Affiliations: Comrade Cooperative
Gattakka / Scynet
Gattakka is a framework for defining Genetic Programming experiments using Akka.
Scynet is a project for decentralized machine learning that Gattakka was originally made for and used to genetically modify different neural network architecture. In the end, we scrapped some of the work to use Bayesian Optimization instead.
I coded most of Gattakka, and later integrated it with Scynet, with help from the rest of the team. While the work didn't end up being used in production, I'm rather happy with how the Scala code came out; in the end, it was quite easy to create new experiments.
Technologies used: Scala, Akka
Links: Gattakka Repository, Scynet Repository
Affiliations: Comrade Cooperative
Godot Asset Library
The Godot Asset Library is a place for developers to upload Godot addons for others to find. While the project is currently deprecated and in the process of being replaced, at the time I worked on it, I was main lead and maintainer and helped ensure smooth operation of the asset library for its users.
Technologies used: PHP, CSS, HTML, Slim framework
Links: Homepage, Repository
Affiliations: Godot
Godot
Godot is an open-source feature-packed game engine well suited to both 2D, 3D, offline and networked games. As a early user of Godot post-opensourcing, I was naturally drawn into the codebase. My journey as a contributor started with low-hanging documentation tasks, before moving on to fixing an issue that had been bugging me personally, and from then on, I was in. I ended up fixing issues in many of the nooks and crannies of the codebase, supporting the community on various channels, and attaining a core developer status by stepping up as GDScript co-lead.
Technologies used: C++, Scons
Links: Homepage, Repository
Affiliations: Godot
KOBUGE Games
After the success of Minilens, we, the team of contributors behind it, tried to capitalize on the hype and energy and launch another game. Unfortunately, volunteer dynamics and life's busyness got in the way, so we never got particularly far with that. Nevertheless, the whole experience was a ton of fun along the way, resulted in a couple of lasting friendships, and a better command of English and interpersonal dynamics than I would have gotten otherwise.
Technologies used: Godot/GDScript, Blender, Gimp, Inkscape
Links: A few projects from this time I'm fond of would include multiball - a multiplayer neverball-like game, Logorithm - a word-matching puzzle, and Project Kumquat - a tower defense game.
Minilens
Minilens is a puzzle platformer initially conceptualized by @alketii, drawn by @fry-, coded by yours truly, and with music by no other than @obani -- and all of that coming into a neat blend of hand-crafted levels that challenge one's ability to plan out ever more complex sequences of moves so that no level objective gets left behind.
My involvement with the project started after lurking in the Godot IRC room. It was one of my first collaborative project with others, and I'm very much pleased with how it all turned out. A few memorable moments are coding the level select menu's grid and later reworking it to use Godot's built-in controls; solving a puzzle by another contributor with a few extra 'bombs' left over (I believe we left those in); and seeing the new graphics for the first time (they are gorgeous!).
Technologies used: Godot/GDScript, Gimp, Inkscape, MuseScore
Links: Homepage, Repository (Refactored)
Affiliations: KOBUGE Games
Neuchenik
Neuchenik was my study blog, made as part of an experimenting whether writing about the things I study could be a helpful part of my homeschool education. Somehow ended up with more history-related articles than programming-related articles, but I suppose that's what I needed the most help studying.
While the experiments proved unsuccessful (note-taking is much more efficient for studying than writing whole articles), the experience sparked my interest in writing and opened my eyes to the process of publishing works online.
Technologies used: Blogger, HTML
Links: Homepage
Music experiments
After starting to play the piano, I worked on various compositions. A quick count reveals somewhere in the vicinity of 200 MuseScore files, all of them in different states of being "done" (but most nothing more than just a quick sketch). Ultimately, opted to pursue programming instead of music, and composing was relegated to being just a hobby.
Technologies used: MuseScore, Ardour, ABC notation
Links: One of those compositions, "Prepare Your Swords", ended up on OpenGameArt and is overall one of the best of the lot.
DocuWiki Callflow plugin
A relative's company used DocuWiki and wanted an easier way to create call-flow / UML sequence diagrams in-wiki. This was my first taste of working on open-source for someone else; unfortunately (or maybe, fortunately), it never got used, so it ended up abandoned in the corners of the internet.
Nowadays, mermaid and plugin:mermaid exist and would be much better projects for that usecase.
Links: Homepage, Repository
Game experiments
After learning to program in JavaScript, I dedicated some of my spare time to developing games—especially after my parents gave me the ultimatum that if I'm going to play games, I should play games that I've made myself. Most of those were made using the (now-gone 😢) Raphaël.js SVG library, but the later ones used any library or engine I could get my hands on, such as THREE.js, Pixi.js, Phaser.js, Unity, raw Canvas, or Godot.
Technologies used: JavaScript (HTML5, SVG/Raphaël.js, Pixi.js, Phaser.js, CoffeeScript), Unity, Godot, and more. Links: Two of my favorite projects from this would be Isoliners - a simplistic setup with particles and signed distance functions, where finding the odd object out is surprisingly more difficult that it sounds, and Hyperspaced - a low-resolution game that I would love to see a reinforcement-learning AI play some day.
Pitata (meaning: honeycomb)
Pitata was a website made together with other homeschooled friends and led by one of our parents. It came about as an extension of a programming course, and remained around for a few years until we all grew busy with other life commitments.
I wrote a few blog/newspaper articles and programmed many of small games for the website—including a rudimentary pixel art editor, a math game, a hangman game, a memory game, a coding game, and two find-the-right-label games. Ended up named tongue-in-cheek "minister of fun things" on our website for the amount of game content I put out.
Technologies used: JavaScript, Raphaël.js
Links: Homepage (archived)
Affiliations: HomeschoolingBG