Not just imagined. Actually built.


lupfa, from Southern German “lupfen”: to lift, to raise.Independent software studio · Augsburg region

I build apps and tools, mostly because something annoyed me first. Some end up in the App Store, some as open source on GitHub.

Products

01 · checked 15 Oct 2026
01

Merkma

A memory for your skincare products. Purchase history, reorders, shelf life and routines across every shop.

Platform
Web
Status
Prototype
Mobile
iOS and Android via Capacitor, not built yet
Open
Trademark search, domain, feed interface
Data
Supabase, EU · Frankfurt
As of
Project README, 30 Sep 2026
Merkma home page: the headline “Welche Creme war das nochmal?” next to a list of saved products with rating and price.
Web app · home page · as of 30 Sept 2026
02

Tellunia

Personalised AI picture books for children: describe a character, pick an idea, and every page shows the same hero. Exports as PDF.

Platform
Web
Status
Beta
As of
Project roadmap, 12 Oct 2026
03

Vylea

Clients, appointments, invoices with SEPA QR code and cash-basis accounts for freelancers and small practices.

Platform
iOS · Web
Status
Beta
As of
App Store: resubmission pending after the backend rebuild

More work

Released, in progress, experiments

Under the hood

02 · Why it is built this way
Case 001 · Merkma

That cream from last summer.

Problem

Product databases know the big brands. Small makers and purchases from different shops are missing, and your own verdict gets lost over the years.

Decision

A personal product memory that works without a complete catalogue. Discovery and trends are left to other platforms.

Build, Tech, Deliberately not
Build

Your own photo instead of a mandatory catalogue entry, barcode recognition, purchase history, routines, shelves shared among friends.

Tech

One web codebase in vanilla JS, mobile later via Capacitor. Supabase in Frankfurt for sign-in, data and access rules.

Deliberately not

No trend feed, no discovery algorithm, no ingredient analysis.

Case 002 · Ruttla

Every bug only once.

Open source Apache-2.0 Source code on GitHub

Problem

Coding agents and I kept repeating the same mistakes that no linter sees: a check that reports green although it measured nothing, for example. Every repeat cost time and tokens.

Decision

Every proven bug becomes a fixed rule. Every rule needs a broken and a healthy sample, or it does not load. “Not measured” is a result of its own and never counts as passed.

Thinking bigger

If many people share their bugs as rules, none happens twice to anyone. That is what ruttla-hub with its reviewed rule packs is for. Checks run without AI, often before the bug is even in the code.

Build, On this site, Deliberately not
Build

Rules as data, run by a Rust engine with linear-time patterns. Python only where a pattern is not enough.

On this site

Ruttla runs over the changes before every commit. On top come checks of its own: brand from one source, no text bypassing the catalogue, no product image without a source.

Deliberately not

No language model, no network and no telemetry while checking. The code under test is read, never executed.

Studio

03 · Augsburg region

I am Johannes Hehl, and I build the products behind lupfa. My background joins technical plant engineering and systems operation with software development.

Most projects start with irritation. Henga exists because NAS connections on the Mac kept hanging, and the store apps for it cost money or sell every feature separately. Lugga, because Synology Photos only runs in the browser on the Mac, and the yearly photo book turned into a test of patience there. Ruttla, because I did not want to hunt the same bugs three times.

Vocabulary · 001

lupfa. from Southern German “lupfen”: to lift, to raise.

Something bugging you that software could fix?

04 · Contact
[email protected]

Tell me what it's about. Two or three sentences are enough. I reply personally.