Skip to content

Our story

Four systems, and what each one taught us

We have no funding round to describe and no founding myth worth your time. What we have is four systems that went into production and stayed there, and a short list of things we would build differently if the same brief arrived tomorrow. This page is that list, project by project, including the parts that were our fault.

A notebook of hand-drawn system diagrams open on a desk beside a laptop showing code
300K+
listings on the European car marketplaceThe scale that turned the build into a normalisation and crawl-budget problem rather than a feature problem.
beron.mon.bg
the Ministry of Education dictionary, published at beron.mon.bgPublicly inspectable. It is the one reference on this site you do not have to ask us for.
−85%
manual typing on repeat trading questions, after the NLP moduleThe client’s measurement of their own before-and-after across email and Instagram. Every reply is still approved by a person before it sends.
−60%
outreach time after the beauty-brand email automationThe client’s measurement of their own before-and-after, on the same campaign workload.

01

The car marketplace: 300,000 rows that disagreed with each other

Aggregating vehicle listings across a European market is not a search problem. It is a normalisation problem: sources disagree about what mileage means, what a trim level is called, whether a field is a number or a string with the unit inside it. The interesting work happens before anything is indexed.

The decision that shaped the build was to let ambiguous records fail loudly into a review queue rather than guess. A wrong odometer reading on a car listing is a legal exposure, not a data-quality annoyance, and a pipeline that silently rounds is worse than one that stops.

Growth then turned into a crawl-budget question. At six figures of listing pages, whether pages are server-rendered and how internal links are structured decides how much of the catalogue a search engine ever sees. That is why we default to static and server-rendered output on everything we build, including this site.

02

beron.mon.bg: building something a ministry has to keep running

The digital dictionary we built for the Bulgarian Ministry of Education is reachable from any school in the country. That single sentence changes every engineering default. Traffic is not uniform; it arrives in a September-shaped spike aligned to a school timetable, and the failure mode is not lost revenue but a teacher improvising in front of a class.

Public-sector work also fixes constraints you do not get to negotiate: accessibility is a requirement rather than a later task, Cyrillic has to be correct through every layer including collation and search, and the client is an institution with a procurement process and change control rather than a product owner in a chat channel.

What it taught us was to design for the low end of the connection and the device, and to treat "works on a nine-year-old machine in a classroom" as an acceptance criterion rather than a nice-to-have. That habit is why performance appears in our proposals as a constraint and not as a phase.

03

The NLP module: the model drafts, a person still presses send

A trading team was answering the same product and pricing questions by email and by Instagram direct message, in two different inboxes, from the same head. The module reads each incoming message, classifies it against the categories the team already used, and drafts the answer from the product and pricing data they already maintain, so the person on the other side edits a draft instead of typing from a blank box. Their measurement, on their own before-and-after: about 85% less manual typing on repeat trading questions.

The decision that made it usable was refusing to let it send. Every reply is approved by a person before it leaves, which caps the worst case at an awkward draft nobody sent rather than a wrong price quoted in writing to a customer. It also makes the economics legible: the running cost of a system like this is the review time, not the inference bill.

The transferable lesson is that the hard part is never the model. It is the category list — the questions a team actually receives, written down as something a human can argue with — and the pricing data existing correctly in one place rather than three. Where both exist, the drafting is the easy fortnight. Where they do not, the model faithfully reproduces whichever version of the price it was shown.

04

The beauty brand: the 60% is the least interesting number

Email-marketing automation for a beauty brand removed roughly 60% of the time the team spent on outreach — their measurement, their before-and-after. We publish it as theirs, because it is theirs.

What made it work was not the automation. It was that segmentation and the trigger conditions were agreed and written down first, in a document of about a dozen rules a human could argue with. The tooling then had almost nothing left to decide, which is exactly the property you want when a campaign goes out to a live list.

The general rule fell out of that project: a process that is broken by hand does not improve when you automate it — it breaks faster, and now nobody is watching. Where the audit says the process is the problem, the correct deliverable is the audit.

05

What we would do differently

On more than one of the four we started building before the baseline existed on paper. It made the early weeks feel productive and it made the final claim weaker, because a delta measured against a remembered number is not a delta. We now refuse to start a build without the before-measurement, even when the client would rather we did not spend the fortnight.

We have also shipped reporting nobody opened. Dashboards are cheap to build and easy to sell, and they are frequently a substitute for deciding what the number is for. The fix we adopted is blunt: no chart without a named person and a decision it changes, and if either is missing we do not build it.

And we treated handover documentation as the last task rather than a running artifact, so it was written by people who had stopped being surprised by their own system. It is now written during the build and validated by a client engineer performing a full recovery from it unaided. That test failed the first time we ran it, which is precisely why it is now standard.

06

What the four projects became

The method we sell now is those four projects with the mistakes removed: measure before touching anything, name the constraint that rules out the obvious fix, build the smallest thing that moves the number, re-measure with the same instrument, and write down what you would reverse.

Each stage carries a stopping condition, which is the part that makes it a method rather than a sequence. A phase that cannot end the engagement badly never had stakes, and a proposal without one is a brochure with dates in it.

A process that is broken by hand does not improve when you automate it — it breaks faster, and now nobody is watching.

The general rule the beauty-brand project left us with.

When we are the wrong choice

  • If you are looking for a decade-long client list, this is not it. Four systems, described honestly, is what we have, and padding the list with landing pages would be the fastest way to make the rest of this page untrustworthy.
  • If a case study without a named client is disqualifying in your procurement, say so early. Two of ours are publicly inspectable and two are not, and we will not pretend otherwise.
  • If you want the version of this page with a funding round, an office photograph and a milestone timeline, we did not write one, because none of it happened.
  • If you want one of these four architectures lifted wholesale onto your problem, we will argue with you. What transfers is the method and the constraints we hit, not the design: a listing pipeline and a ministry dictionary have nothing in common except how the work was measured.

Questions we get asked

Why are there only four projects here?

Because there are four. We could pad the list with landing pages and small integrations, and most agencies do, but these are the four where we owned the architecture and lived with the consequences. The count is deliberately precise: four systems in production is a fact you can interrogate, while "50+ projects delivered" is a number with no denominator.

Can we speak to the clients?

For two of the four, yes — once a conversation is serious enough to be worth their time, and we make the introduction before you sign rather than after. For the public-sector work the reference is the deployment itself: beron.mon.bg is open in your browser right now, which is a stronger reference than a quote we wrote and someone approved.

What did you get wrong, in one sentence?

We built before we measured, more than once, and it cost us the ability to prove what the work was worth. Everything in our current method that looks like bureaucracy — the baseline fortnight, the signed acceptance threshold, the handover recovery test — exists because one of these four projects taught it to us the expensive way.

Do you still work on the systems in this story?

Some of them under maintenance arrangements; others were handed over completely and run without us, which is the outcome we design for. We do not treat a client’s continued dependence on us as a success metric, and the handover document is written so that leaving is a decision rather than a project.

Why is there no timeline of milestones?

Because milestone timelines are the easiest section on a company site to inflate and the hardest for a reader to check. We would rather spend the space on what each project constrained and what we would reverse — the two things a competitor’s marketing team could not have written without doing the work.

Abstract warm light on a dark field

Ask about the parts that went badly

The four projects above are the whole file. In thirty minutes we will walk through the decisions we would reverse in each, and tell you which is closest to the problem you are describing. If none of them is close, you will hear that instead of a pitch.

You will be talking to the person who wrote the code, not an account manager. Thirty minutes, no deck.