Portfolio

Games, web platforms and tools.

Software engineering student. Online games in Unity, web platforms in Next.js, tools and automation in Python.

support@makaronhub.com

Sites

Each one has its own job; this page is where they meet.

Toolbox used in two or more projects

Projects

20 projects: games, web platforms, tools and university work.

Highlights

More projects

A mage in an open meadow with forests and distant ruins, the health and mana bars at the bottom of the screen
Alpha Oct 2026 - now

High Magic Arena

Online PvP between mages, 1v1, 3v3 or free-for-all. Most of the fighting happens in the air, where mana pays for flight, spells and shields alike.

Everyone starts on foot with no mana on a wide, gently rolling map with a river, a lake and forests. Flight is open from the start but paid for in mana, so the fights rise into the air: volleys of light against hexagonal barriers, with mana as both the fuel and the tell. Spell books picked up around the map unlock and level up spells.

What was built

  • Online multiplayer: 1v1, 3v3 and free-for-all, with bots to fill a room
  • Third-person flight, a spell wheel and a chargeable shield
  • Ground that breaks: earth walls shatter into fragments shared by every player

How it works

  • Host and client on Netcode for GameObjects, with the server deciding every hit
  • Rooms through Unity Relay join codes, or a direct IP for local tests
  • Networking, menus and the sound library carried over from Force Express
  • Windows player builds compiled with IL2CPP

Built with

  • Unity 6
  • C#
  • URP
  • Netcode for GameObjects
The Force Express steam locomotive waiting at a dim underground platform lit by street lamps
In development Jun 2026 - now · 5 months

Force Express

Online co-op scavenging horror. The crew lives aboard a moving train, steps off at each stop to strip procedural stations for scrap, and has to make the quota.

The crew pulls the whistle, rides to the next stop and heads out into a procedurally built station to scavenge before the train moves on. At certain stops the quota is checked, and missing it starts the punishment phase.

What was built

  • Online co-op for a crew, with voice, walkie-talkies and text chat
  • Stations generated from a seed: rooms, corridors, basements, loot and hazards
  • Creatures with their own navigation, a shop, crew gear and an economy around the quota
  • Every creature, item and sound is a real asset placed by the game, not generated by code

How it works

  • Server-authoritative Netcode for GameObjects: shared state lives on the host
  • The map is rebuilt from the seed alone, so every machine sees the same station
  • Unity Relay join codes for online play; the lobby layer is ready for a second provider
  • Windows player builds compiled with IL2CPP

Built with

  • Unity 6
  • C#
  • URP
  • Netcode for GameObjects
In development Apr - Sep 2026 · 6 months

Bruteforce Survival

A horde survival action roguelike with three playable characters, each with their own weapons and way of fighting.

Waves of enemies, runs that end when you fall, and a build that grows over each run. The three characters play differently:

  • Frieda: a sword and a bolt-action rifle
  • Priscilla: close combat and shape-shifting
  • Aemilus: a revolver that fires chaos rounds

What was built

  • Floors that end at a door and a reward screen, a boss on the fifth floor, then an endless mode
  • Upgrade cards that stack into a build, capped per category
  • Unlocks that carry over between runs

How it works

  • One stats component is the single source of truth that every card writes to
  • The map and terrain are regenerated on each floor from a runtime copy, never the saved asset
  • Enemies, projectiles and pickups come from object pools, so large hordes stay smooth

Built with

  • Unity 6
  • C#
  • URP
The MakaronHub reader library page with a series card showing the latest and next chapter
Beta Feb 2026 - now · 9 months

MakaronHub

A membership reading platform where authors publish serialized stories and readers unlock chapters through their membership tier. Running as a public beta.

Built so independent authors can run a paid serial in one place: chapters, schedule, lore and readers. Series pages are public: cover, synopsis, chapter list and a teaser of every chapter. A membership unlocks the full chapters and the right to post and react.

What was built

  • Patreon sign-in with tier-gated chapters, and Stripe billing
  • An author dashboard: chapter manager with scheduling, a lore wiki and interactive world maps
  • A reader that each reader sets up their own way
  • Per-reader fingerprinting of chapter text, so a leaked chapter can be traced to an account

How it works

  • Server-rendered Next.js running on Cloudflare Workers
  • Supabase Postgres with row-level security on every table
  • Jest and Playwright tests, lint at zero warnings in CI, regular security audits
  • Built for a target of around 100 authors and 5,000 readers

Built with

  • Next.js 16
  • React 19
  • TypeScript
  • Supabase
  • Stripe
  • Cloudflare Workers
  • Tailwind CSS
The SweetBoard demo board in dark mode with notes, a to-do list, board tiles, a table and the tool dock
In development Oct 2026 - now

SweetBoard

A visual board app for notes, images and links, in English and Turkish. A desktop app and a phone PWA with real-time sync, plus a demo board that needs no account.

Built to move a whole collection of boards off another app and use them the same way on a Windows PC and a phone. Boards hold cards that can be placed freely: rich-text notes, to-do lists, images, links with previews, tables, drawings and nested boards.

What was built

  • One build: an Electron desktop app and an installable PWA for the phone
  • Real-time sync, offline editing, shared boards and view-only links
  • Export to Markdown, Word, PDF, PNG, HTML, zip backups and JSON Canvas, the open format Obsidian opens
  • A presentation mode that walks a board one card at a time
  • AI tools over MCP, so an AI assistant can read and edit boards

How it works

  • React 19 and Zustand; every edit goes through one commit path that drives undo, local storage and sync
  • Supabase Postgres with row-level security; edits merge field by field, so two devices can change the same card
  • Rich text on Tiptap, with Yjs keeping text from two devices in step
  • IndexedDB keeps everything on the device first; unit tests with Vitest

Built with

  • React 19
  • TypeScript
  • Electron
  • Vite
  • PWA
  • Supabase
  • Tiptap
The MakaronComiks browse page with a search bar, sort and filter controls and a grid of series covers
Beta Sep 2025 - now · 14 months

MakaronComiks

A manga, manhwa and manhua reader: browse and search the catalogue, read chapters, keep a library and reading history, comment, and carry settings across devices.

A reader for the MangaDex catalogue with accounts, a personal library and comments on top. It stores no chapters itself: pages come through the site’s image proxy, and official releases are linked where they exist.

What was built

  • Search with include and exclude tags, status, demographic, rating, language and year filters, plus header search with suggestions
  • Content filters for ratings, adult covers, blocked tags and hidden scanlation groups, respected by every list
  • Series pages with banners, scores and characters from AniList, and chapters grouped by number with language and group filters
  • A reader with long strip and single page modes, reading direction, zoom, auto-scroll, data saver and keyboard shortcuts
  • A library with statuses and scores, history, followed-series updates and a reading heatmap; history kept while signed out moves into the account
  • Comments with spoiler tags, and an interface in English, Turkish and Spanish

How it works

  • Next.js 16 server components, with the data cache and retries keeping MangaDex calls under its rate limit
  • Neon Postgres for accounts, libraries and comments, with Neon Auth and emailed confirmation codes
  • The image proxy serves only the pages MangaDex lists for a chapter, so it cannot be used as an open proxy

Built with

  • Next.js 16
  • React 19
  • TypeScript
  • Tailwind CSS 4
  • Neon Postgres
  • Neon Auth
  • MangaDex API
The tier list page ranking characters by role, with tabs for two endgame game modes
Finished Jan - Jun 2026 · 6 months

Wuthering Waves Tier List

A tier list and build guide site for Wuthering Waves players, with filterable tier lists and a page per character.

A fan site that answers the two questions players ask most: which characters are strongest right now, and how to build them. Rankings follow the game’s patch, with a date on every update.

What was built

  • Interactive tier lists for characters and team compositions, with a tab per endgame mode and live filtering
  • A guide per character in tabs: skills, builds with weapons and echoes, upgrade materials and analysis
  • Weapon, echo and set-bonus galleries
  • Fully responsive for phones

How it works

  • Next.js 16 App Router with React 19 and TypeScript, styled with Tailwind CSS 4
  • One typed data file per character, so a patch update is a data change, not a code change
  • A generated sitemap and robots file for search engines; deployed on Vercel

Built with

  • Next.js 16
  • React 19
  • TypeScript
  • Tailwind CSS 4
The Sight Maker editor with a simple crosshair drawn on the 16:9 screen, a toolbar above and file and settings panels on the right
Live Mar 2025 - now · 20 months

War Thunder Sight Tools

Browser tools for War Thunder players: a sight maker and converter, and a gallery of ready-made sights.

Custom sights in War Thunder are .blk text files that are hard to write by hand. These tools let players draw one visually, turn a picture into one, and flip through the sights they already have exactly as they look in the game.

What was built

  • Sight Maker: lines, filled shapes, circles and text on a true 16:9 screen, with snapping, undo, mirroring and keyboard shortcuts
  • A converter that turns a picture of a sight into lines and filled shapes
  • Opening, editing and saving .blk files, and keeping work in the browser between visits
  • Sight Gallery: open a folder of sights and page through them; nothing is uploaded

How it works

  • Plain HTML, CSS and JavaScript with no build step and no server
  • One shared core reads and writes the .blk format for both tools
  • The converter thins dark strokes to one-pixel centre lines, traces outlines with marching squares and merges rows into a few filled shapes

Built with

  • HTML
  • CSS
  • JavaScript
Finished Jul - Sep 2026 · 3 months

MakaronHub Discord Bot

The Discord bot for the MakaronHub community: self-assign role panels, notifications, bug reports and suggestions, set up with slash commands.

Built to run the MakaronHub community server without manual moderation. Server admins set the bot up with slash commands (/setup-roles, /setup-notifications, /setup-bugreports, /setup-suggestions), and it keeps the panels up to date.

What was built

  • Role panels members use to pick their own roles
  • A post for every new chapter, with its own spoiler thread
  • Bug reports through a form with a severity level, seen only by the team
  • A ticket system that saves each closed ticket as a readable transcript
  • Suggestions kept in step with the website, with an admin review panel

How it works

  • discord.py with slash commands, buttons and modal forms
  • The platform calls the bot’s own small aiohttp server when a chapter goes out; both sides sign requests with a shared secret
  • Runs as a systemd service on a small Linux cloud server
  • GitHub Actions deploys each push over SSH, and the job fails loudly if the service does not come back up

Built with

  • Python
  • discord.py
  • aiohttp
Three frames from a devlog reel the tool prepared, with captions reading Bigger Fireball, Destruction and Counter Attack over spell effects
In development Oct 2026 - now

InstaManager

An MCP server that lets an AI assistant publish devlog reels to Instagram and read their stats through the Instagram Graph API.

Built to post development updates for High Magic Arena every few days without hand-editing each video. The assistant prepares a reel and writes the caption from the latest commits, and nothing is published until a person approves that exact post.

What was built

  • Tools to prepare and post reels, post photos and carousels, and read profile, post and account insights
  • Reels built from raw game recordings: clips cut on the music’s beat, a caption per clip, a 4:5 frame and the game’s own audio track
  • A publishing quota check and weekly token refresh

How it works

  • A Python MCP server, so any MCP-capable assistant can use the tools
  • FFmpeg re-encodes the recordings into a format Instagram accepts
  • The Graph API only fetches media from a public URL, so local files are served through a temporary tunnel for the length of one post
  • The access token stays in a local file and never appears in logs

Built with

  • Python
  • Model Context Protocol
  • Instagram Graph API
  • FFmpeg
Finished Sep 2026

MakaronHub Watch

A local tool that watches MakaronHub's Cloudflare Workers usage and sends a desktop notification when spending looks abnormal.

Built after an uptime monitor alone ate a large share of the platform’s monthly request budget. It runs on the desktop, separate from the platform itself, and reads Cloudflare’s own analytics every five minutes, so it never sends a single request to the site it watches.

What was built

  • Six signals: burn rate against a 7-day baseline, cold-start traffic, traffic from one network, new expensive paths, the month-end projection and real overage
  • A desktop notification only when two independent signals agree, or when money is actually moving
  • A small local dashboard with the history and the current level

How it works

  • Node.js with no dependencies: a polling loop, a detector and a local HTTP server
  • A read-only Cloudflare token kept in environment variables, never in a file
  • Prices and thresholds in one config file, so a pricing change needs no code change
  • If Cloudflare cannot be reached the level is “unknown”, never “fine”

Built with

  • Node.js
  • Cloudflare API
The My Comics page with a genre sidebar, a search bar and cards for six comics, each with a genre tag and edit and delete buttons
Finished University project Feb 2026

Personal Library

A Flask collection app on Azure: user accounts, a private comic collection per user, covers in Blob Storage and deployment through GitHub Actions.

A university final project for a cloud course: a working web app deployed to Azure end to end, from the database to continuous deployment. Each user keeps their own collection, with search and a genre filter.

What was built

  • Registration, login and per-user data isolation
  • Add, view, edit and delete entries, with an optional cover image
  • Search by title or author, and filtering by genre

How it works

  • Flask with Flask-Login for sessions and SQLAlchemy for the data model
  • Azure SQL in the cloud, with SQLite as the local fallback
  • Cover images uploaded to Azure Blob Storage
  • Continuous deployment to Azure App Service through GitHub Actions on every push

Built with

  • Python
  • Flask
  • Azure App Service
  • Azure SQL
  • Azure Blob Storage
  • GitHub Actions
The Planio home screen with today's progress, a task list with categories and an add-task form
Finished University project May - Jun 2026 · 2 months

Planio

A task and focus app built on AWS (DynamoDB, S3 attachments) with a focus timer, weekly statistics and notifications. The live demo keeps tasks in the browser.

A final project for a cloud course: a productivity app that runs fully on AWS. The public demo runs without AWS and keeps each visitor’s tasks in their own signed session cookie, so visitors never see each other’s data.

What was built

  • Tasks with custom categories, file attachments and a drag-to-scroll time picker
  • A calendar, a focus timer and a water tracker with system notifications
  • A weekly chart of completed and pending tasks, and end-of-week and end-of-month summaries
  • Profile pictures and attachments stored in S3

How it works

  • Flask with Jinja templates and plain JavaScript, no frontend framework
  • DynamoDB for tasks and the profile, S3 for files, both through boto3
  • Deployed on Elastic Beanstalk behind its load balancer and Nginx
  • Charts drawn with CSS from values calculated on the server

Built with

  • Python
  • Flask
  • AWS Elastic Beanstalk
  • Amazon S3
  • DynamoDB
Line chart of the best route distance dropping from about 26,000 to about 9,200 over 1,000 generations
Finished University project Oct 2024 - Feb 2025 · 5 months

Genetic Algorithm for the TSP

A genetic algorithm for the travelling salesman problem with tournament and roulette selection, ordered crossover and systematic parameter testing.

A university project: find a short route through every city in a map, a problem too large to solve by trying every order. The algorithm evolves a population of routes instead.

What was built

  • Solutions as lists of city IDs, a random first population and a fitness score from the route length
  • Swap mutation, ordered crossover, and tournament and roulette selection
  • Separate scripts that test population size, mutation rate and the selection method
  • A comparison with random and greedy routes, with mean, deviation and variance

How it works

  • Tested on standard TSPLIB maps: berlin52 and kroA100 to kroA200
  • pandas loads the city files, NumPy does the distance maths
  • Matplotlib charts the best distance per generation for each map

Built with

  • Python
  • NumPy
  • pandas
  • Matplotlib
A correlation heatmap of age, resting blood pressure, cholesterol, fasting blood sugar, maximum heart rate, oldpeak and heart disease
Finished University project Jul 2025

Heart Disease Prediction

Predicting heart disease from clinical data with logistic regression, from data exploration to a confusion matrix and classification report.

A machine learning course project: predict whether a patient has heart disease from routine clinical measurements, and explain how good the prediction is.

What was built

  • Exploration of the dataset: class balance and a correlation matrix of the numeric features
  • A logistic regression model that reaches about 89% accuracy on the held-out test set
  • Evaluation with a confusion matrix and precision, recall and F1 per class

How it works

  • pandas for loading and one-hot encoding the categorical features, scikit-learn for scaling, the train and test split and the model
  • seaborn and Matplotlib for the charts

Built with

  • Python
  • pandas
  • scikit-learn
  • Matplotlib
  • seaborn
A windmill with a red roof and white blades on a green hill surrounded by cone-shaped trees under a blue sky
Finished University project Jun 2026

3D Windmill Landscape

An animated 3D windmill landscape rendered with PyOpenGL and GLFW for a 3D graphics course.

The final project for a 3D graphics course: a scene with several 3D objects, a meaningful setting and animation, written directly against OpenGL.

What was built

  • A windmill, its four blades, trees and a ground built from cylinders, cones, cubes and a flattened sphere
  • Blades that turn continuously and a camera that orbits the whole scene
  • The same scene rebuilt in Blender through its Python API

How it works

  • PyOpenGL for drawing and GLFW for the window and the clock
  • Hierarchical transforms with the matrix stack place every part relative to its parent
  • Ambient and diffuse lighting with colour tracking gives the shapes depth

Built with

  • Python
  • PyOpenGL
  • GLFW
  • Blender
Chrome driven by the test: the term Robot Framework typed into the search box of a public encyclopedia site
Finished University project Feb 2026

Browser Test Automation

Automated browser tests in Robot Framework with SeleniumLibrary: search flows, explicit waits and result checks, with logs, reports and screenshots per run.

A testing course exercise in keyword-driven browser automation. Test cases drive a real Chrome browser through a public site’s search, wait for elements explicitly and verify the results.

What was built

  • An end-to-end search test: open the site, type the term, follow the result, check the page title
  • Explicit waits for every element instead of fixed pauses
  • A second suite of plain Robot Framework tasks working with lists and conditions

How it works

  • Robot Framework’s keyword syntax with SeleniumLibrary driving Chrome
  • Variables for the site and the search term, so the same test runs against other inputs
  • Every run writes an HTML log and report, plus a screenshot of the browser when a step fails

Built with

  • Robot Framework
  • Selenium
  • Python
A terminal showing the current weather for Wroclaw and Tokyo, then an error message for a city that does not exist
Finished Mar 2026

Weather CLI

A command-line weather app: type a city, get the current temperature and wind. Uses the free Open-Meteo API, so no API key is needed.

A small, complete command-line tool: one command, a clear answer, and sensible errors.

What was built

  • python weather.py <city> prints the temperature, wind speed and whether it is day or night
  • City names with spaces work without quotes
  • A clear message for an unknown city or a network problem, instead of a crash

How it works

  • argparse reads the city name
  • Two calls with requests: the geocoding API turns the name into coordinates, the forecast API returns the current weather
  • No API key, no configuration, one dependency

Built with

  • Python
  • Open-Meteo API
A terminal showing a multiple-choice cloud question answered correctly, with progress at the top and an explanation below
Finished Feb 2026

Exam Practice Quiz

A terminal practice-exam app for a cloud architecture course: questions parsed from a Markdown file, instant feedback and a final score.

Built to prepare for a cloud architecture exam: 238 questions in one plain Markdown file, practised until every one is answered right.

What was built

  • Questions and answer options shuffled on every run, so answers are not learned by position
  • A wrong answer is put back into the queue at a random later point and comes up again
  • An explanation after every answer, and progress shown at the top

How it works

  • A parser reads numbered questions, options, the answer and the explanation from Markdown with regular expressions
  • New questions are added by editing the text file, never the code
  • Standard library only

Built with

  • Python
A canal-side street scene with a dialogue box at the bottom reading: Where am I? The air feels... heavy.
Finished University project Feb 2026

The Unknown

A browser prototype of a narrative exploration game for a university project: a small dialogue engine built around story and world-building.

A university project on the design and development of a narrative-driven exploration game. The prototype tests the core of such a game in the browser: a scene, a speaker and lines of dialogue that the player clicks through.

What was built

  • A dialogue box with the speaker’s name and text that types itself out
  • A click finishes the line at once; the next click moves the story on
  • History and settings controls over the scene

How it works

  • Plain JavaScript split into model, view and controller: the story data, the rendering and the engine that reacts to input
  • The engine runs as a small state machine (typing, waiting for input) driven by DOM events
  • No libraries and no build step, so it runs from a single folder

Built with

  • HTML
  • CSS
  • JavaScript