Michał "DualFroz" Fox

Michał "DualFroz" Fox

Full-stack developer aka dualfroz

I'm a full-stack developer from Kraków. I build products end to end - infrastructure, backend, and the interface on top - most of them under VulCode, a developer studio set on building a strong Polish brand in IT. I care about systems that are honest about what they actually do.

How I think

Short answers, no filler - the fastest way to know how someone works.

What drives you?

A healthy fear of shipping bad code. It keeps me reading my own diffs as if someone else had written them.

The path here

How a first website turned into a stack of products.

Beginnings

First lines of code

I wrote my first lines of code in 2020. It started with simple static sites, nothing serious, but every next one taught me something the previous one did not. Everything after this was me chasing that same feeling of something I wrote working for the first time.

SCP:SL

Servers & community

Ran SCP:SL game servers and wrote custom addons for them in C#. Those addons grew into Nebula, a plugin suite whose flagship tool handles server moderation and analytics. My first real users, and my first taste of shipping to people who complain when it breaks.

MatHost

Support & marketing

At MatHost I handled technical support across hundreds of tickets: game servers, Discord bots, Pterodactyl, and over time marketing as well. Every ticket showed another way hosting can break, and that is where I learned what it really looks like from the inside.

Freelance

Client projects

In 2024 I started freelancing heavily. I built projects for people end to end, with a focus on architecture and infrastructure rather than one-off features.

VulCode

My software house

VulCode is the Polish software house I run: websites, panels and dashboards, applications and scalable platforms. The numbers below come live from my repositories.

24 484 commits
335 repositories
6 656 184 lines of code
Aphrodi

Branding & marketing

Aphrodi is a branding, digital and marketing studio. It owns the visual language and strategy that complement what VulCode builds in code.

Open source

Open source contributions

I contribute to open source projects used by millions of people, from developer tools to libraries. Some of my own tools, like vulp, are open too.

82 OSS projects contributed to
1 301 773 stars on those projects
335 repositories
SaaS

My own platforms

I build my own SaaS products: Flaem, a hosting platform with a Rust and Elixir core, Atrium for hotels and accommodation, and Lokal for restaurants.

The toolkit

Measured in lines across every repository - not self-rated stars.

26languages
Language LinesProjects %
TypeScript 3 152 61751 51.7
Rust 1 171 41211 19.2
Go 343 64713 5.6
Kotlin 206 2507 3.4
C# 162 8728 2.7
JavaScript 144 03639 2.4
Other (20) 918 236- 15.1

Counted by my own ghstats - last snapshot available, from 26/10/2026.

What I use and what for

I do not tie myself to one language, the tool has to fit the job. Most days that is TypeScript, and when something has to hold up under load, Rust and Go.

Day to day

TypeScript is my default. My frontends, backends and panels run on it, because in most projects the language is not the hard part.

TypeScript

frontends, backends and panels

3 152 617 lines

52% of all my code
  • React frontends, panels, React Native
  • Node.js backends with Express and Prisma
  • TailwindCSS styling in every frontend
  • JavaScript browser interactions, this site

When it has to hold up

Where speed and control over memory matter. Rust carries the Flaem core, the Gyred server and vulp, Go runs the Plazer backend and the Lunatic Chess server, and Elixir keeps an eye on Flaem nodes.

  1. Rust the Flaem core, servers, CLI tools 1 171 412 lines11 projects
  2. Go fast backends and game servers 343 647 lines13 projects
  3. Elixir node supervision in Flaem 105 343 lines2 projects

Underneath

Almost every service runs in a Docker container behind Nginx. Data lives in PostgreSQL, in smaller projects in SQLite, and Redis works as the cache.

Browser

React, TailwindCSS

Dockera container under almost every service

Reverse proxy

Nginx

Backend

Node.js, Go, PHP, Python

Data

PostgreSQL, SQLite, Redis

For phones

Kotlin for Android, Swift for iOS. Along the way Kotlin got my own database engine and Swift a Scheme interpreter.

Android

Kotlin

206 250 lines

7 projects

iOS

Swift

116 812 lines

4 projects

Where it started

First came C# plugins for SCP:SL servers, which grew into Nebula. Today it is Lua scripts, a voxel engine in C++ and graphics for whatever I build.

C#

This is where it all started. I ran SCP:SL servers and wrote my own addons for them, which grew into Nebula, a plugin suite whose flagship handles server moderation and analytics. Later it also got retro console emulators written from scratch and a homelab dashboard in Avalonia.

162 872 lines8 projects

Lua

Lua and TOML describe the pieces with abilities, the maps and the area effects in Lunatic Chess, online chess with modifiable rules running on an engine written in Go. I also wrote a roguelike game in it, with a bestiary and gear.

32 053 lines2 projects

C++

C++ holds my voxel game engine with its own renderer. I have wanted to make my own game since I was a kid, and here it grows from the lowest layer up, with no ready-made engine underneath.

57 275 lines2 projects

Blender

In Blender I model and render 3D for the things I build myself. I also make 3D models at Aphrodi: a product from any angle in photorealistic renders, ready for the store and for ads.

Photoshop

Photoshop is where I make raster graphics for my projects. Graphics are also a separate part of my work: at Aphrodi I do brand identity, illustrations and social media graphics.

DaVinci Resolve

In DaVinci Resolve I edit video for whatever I make. At Aphrodi I also edit clients' footage: pacing, colour, sound and captions, exported for every platform.

Out of curiosity

In each of these I built one specific thing, to understand how it works from the inside.

  • Zig An embedded key-value store with a write-ahead log.
  • Haskell A SAT solver with a formula parser and propositional logic tools.
  • Solidity A decentralised exchange with liquidity pools, staking and a timelock.
  • F# A small, statically typed ML-family programming language written from scratch.
  • Scala A simple chess engine.
  • Ruby A web framework of my own built only on the standard library, with WebSocket support.
  • Dart A spreadsheet engine with its own formula language.
  • C A hobby x86_64 operating system that boots in QEMU, with its own scheduler and user mode.
  • Assembly The startup code of my operating system, which switches the CPU into 64-bit mode.

Everything I use, by layer

Frontend

I write interfaces in TypeScript on React and style them with Tailwind, from websites to panels. Plain JavaScript stays where the browser is enough on its own, like on this site, which has no build step at all.

TypeScript 3 152 617 lines
My main language: React frontends, Node.js and Express backends, panels and apps. Almost half of the code in my repositories is TypeScript.
JavaScript 144 036 lines
Browser interactions and animations, like on this site written in plain JS. In bigger projects TypeScript takes its place.
TailwindCSS
The standard in my frontends, from websites to panels.
React
The base of my frontends and panels, and through React Native also the Plazer apps.

Outside the daily set: Bootstrap (responsive UI, since replaced by Tailwind), Vue (a UI framework), Angular (a frontend framework).

Backend and APIs

Most backends are Node.js with Express and Prisma. Go comes in where performance and simplicity matter, like in Plazer and the Lunatic Chess server. PHP runs the backend of this site, and Python does scripts, bots and monitoring.

Go 343 647 lines
The Plazer messenger backend, the Lunatic Chess game server and smaller online games. I reach for it where performance and simplicity matter.
PHP 130 914 lines
The backend of this site, an online shop on a custom micro-framework and customisation of the Pterodactyl panel.
Python 85 699 lines
Scripts and automation for server work, Discord bots and a service monitoring backend.
Java 13 788 lines
The statistics server behind the numbers on this site, and a booking platform in Spring Boot.
Node.js
Node.js and Express backends with Prisma, behind most of my panels and websites.
FastAPI
The backend of the VulCode service monitoring.
Laravel
Customisation of the Pterodactyl panel, which is built on Laravel.
Symfony
The Symfony components that Laravel builds on inside the Pterodactyl panel.

Outside the daily set: ASP.NET Core (.NET APIs), Flask (smaller Python services), Django (large Python web apps).

Systems and low level

Rust gets the things that have to be fast and under full control of memory: the Flaem core, the Gyred server and the vulp terminal app. Elixir on OTP keeps an eye on Flaem nodes. At the very bottom is a hobby operating system in C, with assembly startup code, that boots in QEMU.

Rust 1 171 412 lines
The core of the Flaem hosting platform, the Gyred server and the vulp terminal app. I pick it where I need full control over memory and performance.
Elixir 105 343 lines
The OTP-based node supervision in Flaem and an in-memory key-value server that speaks the Redis protocol.
C 49 346 lines
A hobby x86_64 operating system that boots in QEMU, with its own scheduler and user mode.
Assembly 397 lines
The startup code of my operating system, which switches the CPU into 64-bit mode.
Mobile apps

For phones I write native: Kotlin on Android, Swift on iOS. Kotlin also got a relational database engine of my own, and Swift a Scheme interpreter.

Kotlin 206 250 lines
Native Android apps, a relational database engine of my own and a small scripting language.
Swift 116 812 lines
Native iOS apps and a Scheme interpreter.
Games, modding and graphics

It started with games: C# plugins for SCP:SL servers that grew into Nebula. Today it is Lua scripts for Lunatic Chess, a voxel engine in C++, and the graphics, models and editing around what I make.

C# 162 872 lines
SCP:SL plugins that grew into Nebula, a homelab dashboard in Avalonia and retro console emulators written from scratch.
C++ 57 275 lines
A voxel game engine with its own renderer.
Lua 32 053 lines
A roguelike game with a bestiary and gear, plus the piece and map scripts in Lunatic Chess.
Photoshop
Raster graphics.
DaVinci Resolve
Video editing.
Blender
3D modelling and rendering.

Outside the daily set: Unity (a game engine), Godot (an open source game engine), Unreal Engine (3D games).

Databases

SQLite through Prisma by default, because a smaller project needs nothing more. When a project grows, like Plazer and Flaem, PostgreSQL comes in and Redis acts as the cache. MySQL stayed from hosting panels and Pterodactyl.

MySQL
The database behind the Pterodactyl panel and hosting panels.
SQLite
The default database for smaller projects and panels on Prisma.
JSON
The data interchange format, including between my statistics server and this site.
PostgreSQL
The database behind Plazer and Flaem, when a project needs more than SQLite.
Redis
The cache in Plazer and Flaem.

Outside the daily set: MongoDB (document NoSQL database), ClickHouse (real-time analytics), Cassandra (distributed, high availability).

Infrastructure and tools

Almost every service of mine runs in a container on Docker Compose, behind Nginx as the reverse proxy. I manage over a hundred repositories with Git and vulp, and write code in VS Code.

Git
The foundation for working on over a hundred repositories, managed together with vulp.
Docker
Almost every service of mine runs in a container, usually on Docker Compose behind Nginx.
Nginx
The reverse proxy in front of every service on my servers.
VS Code
My main code editor.
Visual Studio
An IDE for C# and .NET.

Outside the daily set: Kubernetes (orchestration at scale), Grafana (metrics dashboards), JetBrains IDEs (JetBrains IDEs).

Out of curiosity

Languages where I built one specific thing to understand how it works inside: a key-value store in Zig, a SAT solver in Haskell, an exchange in Solidity, a language of my own in F#.

Dart 6 013 lines
A spreadsheet engine with its own formula language.
Solidity 4 688 lines
A decentralised exchange with liquidity pools, staking and a timelock.
Ruby 37 655 lines
A web framework of my own built only on the standard library, with WebSocket support.
Zig 44 583 lines
An embedded key-value store with a write-ahead log.
Haskell 3 609 lines
A SAT solver with a formula parser and propositional logic tools.
Scala 3 133 lines
A simple chess engine.
F# 3 017 lines
A small, statically typed ML-family programming language written from scratch.

Lines and projects for languages are measured across my repositories.