Applications

Applications we built for ourselves — and use every day. Two you can open right now, the third we set up for you. Three more run on our own data, so here we only describe them.

Ours · on their own domain

These are our own applications, not a supported service: no price list, no guaranteed uptime, no on-call. When something breaks we fix it — because we use them too.

A group at a festival, a trip or a party · PWA · syntrofi.com

Syntrofi

You create the event, send out invite links and the group joins — the invitation authorises, signing in only confirms who you are. Everyone marks where they are going. When two marked items overlap in time, the app says so in the list itself and names what they clash with. And you can see where the rest of the group is heading — not so that you follow them, but so that you know where to find them at midnight.

Running a festival, a trip or a party for your group? Write to us — we will set the event up. Get in touch →

What it looks like

A conflicts screen: two pairs of performances, one flagged "overlaps by 15 min", the other "only 10 min between them", with the walk between stages below.
Clashes. When two marked items overlap, the app says so in the list and names both, with the minutes at stake.
A programme with Crew, Place and Category filters; the "Anybody" filter is on and the names of the people going sit under each performance.
Where the rest of the group is heading. The filter narrows the programme to what anyone in the crew marked.
An event programme in a terracotta and turquoise palette with a round mark in the header.
The same screen in two brands (1/2): the "syntrofi" profile — terracotta and turquoise.
The same programme screen in an amber and mauve palette, with a different typeface and a different mark in the header.
And the same in the "lubomier" profile (2/2). The palette, the typeface and the mark change; the data and the features do not.

The screenshots use sample data, not real people's accounts.

I have the official festival apps on my phone, from Pohoda and from Grape. After two days I stop opening them. This one we had open all week at Ozora — it was the only one that worked where there was no signal, and the only one that showed me where the rest of the group was heading.

Lenka OZORApp · OZORA Festival 2026

Packing for trips and camps · PWA · farangur.com

Farangur

Every item moves through three states: taking → ready → packed, plus a to-buy flag. The catalogue holds over two hundred things, and each event carries its own master list, so the next trip starts where the last one finished. In a group everyone agrees who brings what — so that four people do not each bring a stove and nobody brings the tent.

What it looks like

A list of items by category, each with its state written out; two carry a "to buy" badge. A bar at the bottom counts taking, getting ready and packed.
Three states for every item: taking → ready → packed. Anything still to buy carries a to-buy flag.
The Shared screen: two missing items, one marked "nobody yet", the other carrying a member's note and initials, with the covered items listed below.
In a group you can see what nobody is bringing yet — and where the group has already agreed who brings how many.
An event detail with its master list: nine items by category and a button to start a new pack.
A finished trip leaves a master list behind, so the next pack does not start from an empty page.

The screenshots use sample data, not real people's accounts.

Expectations in a couple · web · objatie.sk

Objatie

Two partners set their expectations across relationship themes independently, and the app reveals them theme by theme — only ever what they have already revealed to each other. The whole run works anonymously, without an account. The AI comment on the result receives only axis names and a coarse band, never the raw answers — a raw answer never leaves the server.

What it looks like

A results screen: a circular gauge showing eighty-four percent alignment for a sample couple.
A couple's result: one alignment figure, and under it the themes where the two of you differ most.
A comparison of individual topics, each with a slider and both partners' values side by side.
Topic by topic, both partners' values side by side. Only what the two have revealed to each other shows.

The screenshots use sample data, not real people's accounts.

Internal tools

They run on our own data, so we only describe them

These three carry not one screenshot in this text, and that is deliberate: one holds invoices, another other people's listings, and the third health data. Showing them would mean showing their contents.

  • Quvanto

    Accounting for three legal entities. FastAPI over PostgreSQL, statements parsed with pdfplumber, invoices typeset to PDF with WeasyPrint and a pay-by-square QR code on them. Payments leave either as SEPA XML in the pain.001.001.03 format for upload to the bank portal, or straight through the bank payment API, where account access and payment initiation clear in a single authorisation: the whole batch from one screen with one signature.

  • Inzerátor

    It sells on Bazos: you photograph the item, a model identifies it, researches the market price through a search service of our own and writes the Slovak listing, you confirm and the app posts it. The model is called through the same gateway as everything else, so the app itself holds no provider key. And since Bazos blocks the hosting provider IP, the work is done by a daemon at home that has no inbound port open at all and picks up jobs through a database notification.

  • Health Bro

    A FastAPI backend on PostgreSQL, reachable only over VPN. It ingests a ring and a Garmin and joins them to what a watch cannot see: supplements, training, lab results, goals. Out of that it derives a readiness state for the day — go hard, or back off. Roughly as much test code as production code, and every warning fails the build.

What they taught us

We learned it in stages, each of them on a different layer.

OZORApp taught us that "offline-first" is not about the network being off, but about a network that lies: on the Hungarian EDGE network a call to the server neither succeeded nor failed — it simply hung, so the service worker waited forever and the app would not load at all, despite being entirely in the cache. Since then no project of ours makes a network call without its own timeout.

Inzerátor taught us to read an obstacle correctly: when a WAF blocks the hosting provider's IP, the wrong answer is to punch a hole into the home network; the right one is to reverse the direction and have a daemon listen on a database channel.

Health Bro taught us that a field name is not a contract — a field whose name promised seven days was quietly carrying fifty-nine, and the payload sent to the model had grown to a hundred and thirty kilobytes before anyone noticed.

Objatie taught us the bug need not be in the code: the deploy uploaded only part of the repository, so a registration living in a file that never shipped worked locally and returned a 500 in production.

Farangur taught us what is not worth building: working without a connection was a third of the design's complexity and it fell to a single sentence — we pack at home, on wifi. Next to OZORApp, where a dead connection decided whether the app opened at all, it is the same problem with the opposite answer. The difference is not technical; it is where a person is standing when they hold it.

Syntrofi taught us what a copy costs. We made the second generation by copying the first and rewriting the names in it — and broke sign-in at every entry point at once, because the path to the private data was suddenly called something else than the code expected. An event has been data rather than a fresh deploy ever since, and the deploy carries a guard that checks that path.

And the accounting system taught us the most expensive one: the hard part was never the code. The bank's consent expires roughly daily while the access token lives for months — so the token keeps refreshing over a consent that is already dead, the bank returns an error that never mentions consent, and you go looking for the bug in your own code. Nothing in the documentation says this. You find it the evening before payroll taxes are due, when a batch that cleared last month suddenly does not.

Need something like this?

We will build it — and hand it over with the source, and then it is yours. Renting your own software back to you is not our business. The first hour is free and ends in a straight answer, including "do not have this built".

Get in touch What exactly we do →