01 / 19
Before Kristeni
My name is Stoyan Dimitrov. I was born in Plovdiv in 1982.
My professional path has never been particularly straightforward.
I graduated from a technical high school with a specialization in Architecture and Construction. I then became a mechanical engineer specializing in Cold Metalworking, and later earned a master’s degree in Financial Management.
I also studied Structural Engineering. I completed the coursework but never reached the thesis and formal graduation stage.
I have worked as a fruit and vegetable vendor at markets and wholesale markets. I have done agricultural fieldwork. I have worked as a process engineer, a foundry worker, and a structural drafter.
In 2009, while working as a drafter, I met Elena—an architect and my future wife.
A year later, I started working as an architectural drafter. In 2011, our older daughter, Kristiana, was born, and by 2013, I was already in a senior management position.
In 2015, our younger daughter, Niya, was born. That same year, Elena and I founded our own architectural studio.
Since then, we have completed more than 400 projects, many of them single-family houses. Architecture gradually became more than a profession—it became a central part of our entire family’s life.
At that time, Kristeni did not exist yet.
But almost everything it would later be born from was already there: architecture, engineering thinking, family, and the desire to create things of our own.
02 / 19
How Kristeni Came to Be
In 2020, we began exploring the possibility of expanding beyond architectural design and into construction.
That was when we bought the domain kristeni.com.
The name came from our family:
That is how Kristeni came to be.
After some time, we abandoned the idea of starting a construction business. Our research showed that it made more sense for us to remain focused on what we already knew how to do—architectural design—rather than scatter our attention across too many different directions.
The construction idea was gone.The domain remained.The name remained.
We simply had no idea yet what we would eventually need it for.
03 / 19
My First Software Love
That same year, I discovered Unreal Engine.
For me, it was my first true software love.
Over the years, I had worked with many different programs, but Unreal was different. I did not want merely to use it. I wanted to understand it and build worlds inside it.
My usual workflow went through Archicad, Blender, and finally Unreal Engine. Every change meant another export, another import, and another interruption.
Elena found 3D modeling software difficult to work with. She is an architect and knows what she wants to create, but the tools often stand between the idea and the final result. I wanted to make something that would allow her to model easily as well—without having to think like a 3D artist or a programmer.
I wanted a tool that would allow us to model directly where we could see the final result.
The problem was that I did not know how to create it.
For architectural visualization, this workflow meant constantly moving between different programs and having too little control over the things that mattered to me—walls, intersections, openings, UV coordinates, and the final mesh.
“I need to make something that I would want to work with myself.”
Unreal seemed like the natural place. It was insanely good for visualization, and it also allowed you to program inside the environment itself.
There was just one small problem.I could not program.
04 / 19
“I’ll Make It with Python”
My original plan was very simple:
I would learn Python.I would write a tool.Done.
I enrolled in a Python course.
About a week later, I realized that if I wanted to build something truly serious in Unreal, I would have to learn C++.
My reasoning went roughly like this:
“With Python, I could probably build the tool in three or four months. They say C++ is more difficult. How much more difficult could it be? Six or seven months.”
And so I enrolled in a C++ course.
That was when the adventure truly began.
I did not know what a variable was, but I was absolutely convinced that I had to learn.
During my first exam at SoftUni, Kristiana sat beside me to help. At the time, she already had two years of experience with JavaScript, which made her the most experienced programmer in the family.
She tried to understand what exactly I was attempting to do. We passed the exam.
A month later, I discovered that there was another small problem.
C++ alone would not be enough.
I also needed mathematics.
“It’s too late to quit. I’ve already been studying for an entire month.”
And I kept going.
05 / 19
The Mathematics I Had Never Actually Learned
There is a slightly ironic detail here.
I had studied linear algebra at university.
At least on paper.
The truth is that I had cheated on the exam, and years later, I had to admit to myself that I knew practically nothing about it.
This time, however, there was nobody to copy from.
If I wanted to build the tool, I had to genuinely understand vectors, matrices, coordinate systems, and transformations.
So, years after university, I started learning mathematics from the beginning.
This time, by choice.
I began learning C++, studying mathematics, and writing code in Unreal at the same time. For several months, I literally dreamed about variables, vectors, and functions.
During an introductory mathematics course for programming, I learned what graphs were for the first time.
“What on earth would I ever need this for?”
I had no idea that, before long, a graph would sit at the very heart of my wall system.
Little by little, I realized that C++ was not the only thing I needed.
I needed computational geometry.I needed triangulation.I needed polygon Boolean operations.I needed to understand coordinate systems, transformations, and linear algebra.
Almost everything useful was in English—documentation, books, lectures, forums, and GitHub repositories. And my English was not good.
First, I had to understand the language.Then the terminology.Then the mathematics.Then the algorithm.Only then could I try to write it.
That was when I discovered Gilbert Strang’s lectures on linear algebra.
I watched them with automatic translation. I paused, rewound, searched for unfamiliar terms, and tried what I had learned in code.
I did not understand everything. Sometimes, I probably did not understand even half of it.
But gradually, I began to see the logic.Things started falling into place.
06 / 19
My First C++ Core
I decided to write my own C++ core and connect it to Unreal.
The idea was simple:
The core calculates. Unreal visualizes.
Initially, I connected them through buffers. The core calculated the geometry and passed a flat C array that Unreal read and converted into a mesh.
One day, I built a face from fixed triangles whose UV coordinates I could freely modify.
Today, that sounds like something small.
To me, it was incredible.
It worked.My mathematics.My code.My C++.And Unreal was displaying it.
To continue, however, I needed two fairly serious things: triangulation and polygon Boolean operations.
07 / 19
“If You Can, Write Them Yourself”
I asked a programmer friend what I should do.
“If you can, write the algorithms yourself.”
At the time, neither he nor I fully understood what triangulating a complex polygon actually involved.
“How difficult could it be?”
I started with triangulation.
It turned out to be difficult.Insanely difficult.
I opened the Poly2Tri source code, and at first, I had almost no idea what was happening. After a few days, however, I began to grasp parts of the logic.
I decided to write my own algorithm.
I wrote a constrained triangulation algorithm using a sweep-line approach, but without the Delaunay condition. Recursively traversing the triangles was brutal to debug.
That was when Niya joined the adventure.
For several days, we came up with the nastiest cases we could imagine.
We ran them.We looked at the result.Something broke.I fixed it.We ran it again.
And when it finally stopped crashing and worked, we danced the Macarena with joy.
Literally.
One reason the algorithm was relatively stable was that I strictly controlled the input data. The coordinates had a precision of two decimal places, allowing me to avoid an entire class of numerical robustness problems whose unpleasantness I did not yet fully appreciate.
The algorithm was not universal.
But it was mine. I had understood it well enough to write it, and it worked for what I needed.
I was incredibly proud of myself.
08 / 19
And Now the Boolean Operations
“If I wrote the triangulation, how difficult could Boolean operations possibly be?”
I opened Clipper2.I looked at the code.I read.I looked again.I read again.I understood almost nothing.
This time, I truly despaired.
For a few hours.
“Fine. I’ll invent my own algorithm.”
Once again, I started with a sweep line.
Gradually, all the nasty cases appeared: overlapping segments, coincident segments, shared endpoints, and combinations that I had never imagined would require special behavior.
And once again, Niya and I debugged together.
We invented a nasty case.We ran it.It broke.I fixed it.
And once again, we danced the Macarena when it worked.
Today, I would not claim that those algorithms were universal or particularly robust. They certainly were not. The code was the most delicious Italian spaghetti.
But they were mine.
I had understood them well enough to write them, and they worked for what I needed.
I learned more from those two algorithms alone than I probably would have learned from ten courses.
09 / 19
Raw Pointers and Other Wonderful Stupid Ideas
After that, I began integrating the core more seriously with Unreal.
“Why am I bothering with these buffers? Unreal is C++. My core is C++. I write C++. I’ll connect them directly.”
And I began accessing the core through raw pointers.
It was brutally cool.And extremely wrong.
At the time, however, I did not care. For the first time, I felt as though I was truly digging into the system.
I was not merely using Unreal.I was connecting it to my own geometry core.
10 / 19
How Unique Builder Was Born
Around that time, we began thinking about a name for the plugin.
“Unique.”
I liked it immediately. Perhaps because, in my mind, the word was already connected to C++ and std::unique_ptr.
“Well, it’s going to build.”
Unique.Builder.That was how Unique Builder was born.
There was no branding agency.There was no meeting.There was no brainstorming session.
There was Niya, std::unique_ptr, Elena, and a thing that built.
Later, we registered Kristeni as a trademark.
The name that had originally been invented for a construction business gradually became the name of a software project.
11 / 19
Another Lightning Strike
At the beginning of 2026, it felt as though a bolt of lightning exploded inside my head.
“What on earth am I doing?”
Unreal already had an enormous geometry infrastructure—triangulation, Boolean operations, math types, vectors, transforms, and many other things developed by people with tremendous experience.
All of it was undoubtedly many times more robust than my algorithms.
And I was digging through memory byte by byte using raw pointers just to keep the core separate.
Why?
I decided to move everything inside Unreal.
And I did.
That was when things began moving much faster.
12 / 19
The Frontend in Unreal
After moving the system inside Unreal, I began building the frontend for the tools.
Kristiana joined me again.
Together, we began writing state machines that controlled the behavior of the different tools—the state a particular tool was in, how it responded to the user’s actions, and how it moved from one operation to the next.
I was focused mainly on the geometry.Kristiana helped me organize the logic around it.
This was one of the first moments when Kristeni began transforming from my experiment into something we were building together.
At the time, we still did not have a fully formed idea of what the project would become.
We simply sat beside each other, wrote state machines, and tried to make the tools behave the way we saw them in our heads.
13 / 19
The Walls Began to Come Alive
I made the walls.Then the openings.Then the intersections.I created stable and controllable UV coordinates.Finally, I connected the walls in a graph.
The very same graphs that had made me wonder, only months earlier:
“What on earth would I ever need this for?”
It turned out that I needed them.
When I moved one wall, the system understood which other walls were affected and recalculated them.
If several walls formed an intersection and I removed one of them, the remaining walls automatically reconnected.
When I created an opening, it appeared in the geometry. When I moved it, the wall was recalculated. The UV coordinates were updated as well.
At last, I could see something beginning to resemble the picture in my head.
This was no longer just a mesh generator.It was beginning to become a system.
14 / 19
“Now People Will Understand It”
I gradually began publishing videos on YouTube, LinkedIn, Reddit, and the Unreal forums.
The first videos received almost no response.
“That’s normal. The videos are boring. I’m showing technical things that are probably interesting only to me.”
I made the next one better.
Then another.
Finally, I created a video that I was convinced clearly demonstrated why the system was interesting.
I built a house.I moved the walls.They automatically fixed their intersections.I removed a wall, and the others reconnected themselves.
“There. Now they’ll see it.”
The response was almost nonexistent.
And it crushed me.
Not because anyone owed me their attention. Not because of sales.
But because, in the meantime, I had burdened the project with far too many expectations.
15 / 19
I Had Forgotten Why I Was Doing It
In less than two years, Kristeni had gone through several different versions inside my head.
First, it was a tool for personal use.Then, a potential product.Then, a larger project.Then, I started thinking about a MegaGrant.Then, once again, about a product and a business.
I had wound myself up too tightly.
Something I had originally been doing because I found it incredibly interesting had gradually become burdened with expectations about what it was supposed to become.
Elena noticed.
“All right, but why are you doing it?”
If I was making it for my own use, was it essential to me?
No. I could create visualizations without it.
If I was making it as a commercial product, did I depend on it financially?
No. We had a functioning architectural business.
If I was making it for a MegaGrant, did we need one?
Again, no.
Then she smiled and said:
“Don’t overthink it. Just have fun.”
And it felt as though another bolt of lightning flashed.
That was it.
Kristeni did not necessarily have to become a product, a business, or something big.
I did not have to prove anything.
I could simply write code.Solve geometry problems.Break something.Spend two days searching for the cause.And finally experience that incredible feeling when it worked.
I could simply have fun.
When I understood that, I felt free.
16 / 19
And I Started Playing Again
After that conversation, I did not stop.
Quite the opposite.
I created an IFC importer for Archicad and began bringing in our real projects—their walls and openings.
It worked.
Then I wrote a PNG importer so I could bring drawings directly into Unreal and model over them.
I continued publishing.
The response from the Unreal community remained limited.
And then I realized something about myself.
17 / 19
I Need Validation
This has little to do with business.It also has little to do with money.
Sometimes, I need someone to tell me:
“Man, well done. This is cool.”
“How did you write this?”
“Man, you’re crazy. This is insanely complicated.”
I wish there were people I could talk to about these things.
To discuss why one algorithm works. Why another one breaks. How it could be improved. What somebody else would do.
When you work almost entirely alone on something, it is difficult to maintain a realistic sense of whether it is interesting only to you or whether it has value for other people as well.
I do not need that validation to continue.
But I would be lying if I said I did not want it.
I did not receive it from the Unreal community.
Perhaps Unreal simply is not the natural place for a tool like this.
Most people do not open Unreal to model architecture. They import finished models from Archicad, Revit, 3ds Max, or Blender and use Unreal for what it is incredibly good at—visualization.
“All right. Let’s try somewhere else.”
18 / 19
Back to Pure C++
The story came almost full circle.
I decided to take the geometry core out of Unreal and make it independent again.
This time, it was not because I did not know how to integrate it or because I did not like Unreal.
Quite the opposite.
After everything I had built, I understood much more clearly what I wanted the core to be.
I want it to be independent.Pure C++.Unreal can be one frontend.Blender can be another.And one day, there may be a third.
This time, I also made a different decision about the fundamental algorithms.
I had already written my own triangulation system and my own polygon Boolean operations. I had learned an enormous amount, but I no longer needed to prove to myself that I could write them.
There are people who have spent years developing robust computational geometry libraries.
Why should I spend more years solving the same fundamental problems?
It would be better to use proven solutions and invest my time where Kristeni’s real idea lies:
the walls,the graph,the automatic intersections,the openings,the topology,the UV coordinates,the interactive behavior.
The things that make the system different.
19 / 19
This Is Not a Story with an Ending
This is not the story of a finished product, a successful company, or a person who knew what he was doing from the beginning.
This is the story of our family building something together.
Of Kristiana, who sat beside me during my first exam and later wrote state machines with me.
Of Niya, who invented impossible cases for the algorithms and danced with me when they worked.
Of Elena, who reminded me why I had started in the first place.
Now I am going to try Blender. If there is no response there, I will show it in Omniverse. Then in Unity. Then in Godot. If necessary, somewhere else as well.
Maybe somewhere, someone will say:
“Man, this is cool.”
Or even better:
“How did you make this?”
And if no one ever notices it? If no one likes it or asks how I made it?
It does not matter.
“I will still keep having fun.”