Game Design · QA · Development

Hi, I'm Sofiia.

I'm studying for a Master's in Mathematical Methods in IT at Brno University of Technology (VUT FIT), where I also completed my Bachelor's in Information Technology. I enjoy making small games and prototypes, watching people play them, and using their feedback to improve them.

Games have been part of my life for as long as I can remember. I'm curious about how they work and what makes them fun to play. Making my own lets me explore that through both design and programming, drawing on what I've learned in IT and maths.

Sofiia standing under a large araucaria tree in Italy
With an araucaria, my favourite plant

Featured work

Games, prototypes & research

For each project: the idea, the mechanics, the decisions behind them, and what I'd change next.

01

Voice Painter

Paint without hands — your voice is the controller.

Solo project JavaScript p5.js ml5.js · CREPE

Sound on: Voice Painter painting along to “Přemžitky”, the album I recorded percussion for.

The idea

What if the only input was sound? Voice Painter listens to the microphone, detects pitch with a neural network (CREPE) and loudness in real time, and turns them into brush strokes. Singing, whistling, clapping or playing an instrument all become ways to paint.

The core loop is immediate: make a sound → see it on the canvas → adjust your voice. Players start experimenting within seconds, without a tutorial.

Input → output mapping

Loudness→Brush / shape size and speed
Pitch (note)→Color, and shape in Kandinsky mode (C = circle, E = triangle…)
Low / high notes→"Gravity" pulling the brush down or up
Silence→The brush rests — a natural pause button

Next steps

I'm currently building a mobile version of the game.

02

Hangman — mobile word game

A classic, rebuilt with hints, difficulty levels, a scoring system and a leaderboard.

Team of 4 · I wrote the Android app Kotlin Jetpack Compose Player surveys

My role

  • Wrote the whole Android app in Kotlin + Jetpack Compose: main menu, game screen, hints, settings, multiplayer setup and leaderboard, connected to the team's backend.
  • Ran player surveys about mechanics and difficulty, and turned the answers into design suggestions.
  • Tested gameplay interactions and UI behavior against the design.

Game systems

  • 7 lives, shown by the hangman drawing.
  • Categories & 3 difficulty levels (easy / medium / hard word pools).
  • Two hints, each costs a life: reveal a letter, or eliminate wrong letters. A deliberate risk/reward choice.
  • Multiplayer mode: one player enters a custom word and category for the other.
  • Scoring: lives × 20 × difficulty (×1 / ×3 / ×5), minus 0.1 per second.
  • Global leaderboard by nickname.
03

Music notation as a formal language

Bachelor's thesis — generating darbuka rhythm exercises with a formal grammar.

Bachelor's thesis · 2025 Python Formal languages Procedural generation

The idea

I took a base rhythm from Arabic percussion (an iqa') and designed a right-linear grammar whose rules are generated from that rhythm. Running the grammar produces new practice sequences for darbuka players: variations that stay true to the original rhythm but get gradually harder.

Generation runs in two phases of increasing complexity (K-phase and R-phase), and the model works for different rhythms, both predefined and entered by the user.

Real output — Malfuf rhythm

base rhythmDSS
+1 ornamentDSSk
+3DkkSSk
full (+5)DkkSkkSk
finalD

D, S and k are different strokes; empty cells are rests. Each line adds more ornament strokes, then the piece resolves.

Next steps

I want to turn this into a web app where users can enter/generate any rhythm, get new exercises and listen to them.

How I work

Designer's curiosity, tester's skepticism, developer's hands

Design

Start from what the player feels, find the smallest loop that delivers it, and expose the numbers that control "feel" so they can be tuned instead of guessed.

Test

Check behavior against the spec, try the edge cases a real user will hit, and write it up so a developer can reproduce it: steps, expected vs. actual, environment. I've used Valgrind, Wireshark and automated tests to dig deeper.

Build

I prototype my own ideas — systems code (C/C++, Python), web (JavaScript) and Android (Kotlin). A playable build beats a long design doc for getting honest feedback.

More projects

Engineering & testing

Not games — but they show how I handle specs, systems, data and edge cases.

Team of 3C++17Qt · QMLUDPDoxygen

Visual tool for interpreted finite automata

A desktop app for drawing, running and live-monitoring timed state machines (Moore automata with variables, conditions, delays and state actions). Basically a small visual scripting tool.

  • Design: place states and drag transition arrows on a canvas. Each transition is written as input [condition] @ delay, and each state runs a small C-like action script.
  • Simulate: one click starts the automaton in its own interpreter process. The editor highlights the current state live, shows outputs and variables, and lets you inject inputs at any time.
  • Reconnect: automata keep running in the background; you can reconnect to them later, or stop them.
  • My part: the core C++ library (automaton model, text-file parser, interpreter, condition evaluation) and the QML editor. In the final phase I integrated all the modules into one working program and fixed most of the bugs.
  • We wrote a design document with component, class and sequence diagrams before coding.
in == 1 in == 0 in == 1 @ timeout (5 s) IDLE out = 0 ACTIVE out = 1 TIMING waiting…
Example automaton: a “timer-off” switch. The output turns off only 5 s after the input drops, unless it comes back first.
Editor (GUI) Qt · QML draw · simulate · monitor Interpreter separate C++ process states · timers · conditions Automaton file (.txt) saved / loaded by the parser Running automata list name · port · file path inject input status: state, outputs, vars UDP · localhost
How it fits together: the editor and the running automaton are separate processes talking over UDP.

Demo

Building a small automaton, then loading the TOF timer, simulating it and injecting inputs.

Team of 3PHP · LaravelSQL

Zelný trh — farmers' market system

A web marketplace where farmers post offers and customers order produce. The goal of this project was not visual design or user comfort, but a correct, complete connection to the database: full CRUD (create, read, update, delete) for every part of the system.

  • Designed the ER model and relational database.
  • MVC architecture with REST APIs to create, show, edit and delete offers, orders and users.
  • Tested the role system end-to-end: admin, moderator, farmer, customer — who can see and do what.
Entity-relationship diagram of Zelný trh
SoloC++OpenSSLPython tests

IMAP client with TLS

A command-line email client implementing IMAP4rev1 (RFC 3501) over encrypted TLS.

  • Implemented the protocol strictly from the specification.
  • Tested against real mail servers (Seznam, Pobox) — real servers don't always behave like the spec says.
  • Wrote Python unit tests; used Wireshark to inspect traffic and Valgrind to catch memory errors.

Skills

What I bring

Game design

Gameplay prototypingPlayer surveysPlaytestingInteraction designScoring & difficulty

Testing

Manual testingBug reportingRequirement analysisUnit testsValgrindWireshark

Games I keep coming back to

Hearthstone Dota 2 Overwatch Don't Starve Together Planet Zoo Farming Simulator

Programming

C / C++PythonPHP · LaravelSQLJavaScriptKotlinJetpack Compose

Tools

GitLinuxMake / CMakeLaTeXAI-assisted coding

Languages

Ukrainian — nativeRussian — nativeCzech — fluentEnglish — advanced

Education

Master's, Mathematical Methods in IT — VUT FIT, 2025–present
Bachelor's, Information Technology — VUT FIT, 2022–2025

Sofiia with her Bachelor's diploma in the university garden

Beyond code

Percussion & rhythm

I play darbuka, cajon, congas, Brazilian percussion, drums and bass guitar, and I love performing on stage. I recorded percussion for the album “Přemžitky”, my first studio recording.
Music is the big and important part of my life.

Recording percussion in the studio for the album Playing darbuka on stage, black and white Playing bass guitar on stage Holding the Přemžitky vinyl for the first time Playing caixa on stage with a Brazilian percussion band Playing drum set in a rehearsal studio Lifting a drum overhead in stage lights at a Brazilian percussion concert Playing cajon with a band at an outdoor concert

Let's make something playable.

Open to game design, game QA and development internships.