Ohne TitelUntitled, Acryl auf Leinwand, acrylic on canvas · Seed ·

Software Studio · Vienna

Software-Studio · Wien

Software with purpose. And beauty.

Software mit Sinn und Nutzen. Und schön.

  • Web- & Mobile-AppsWeb & mobile apps
  • Datengetriebene ProdukteData-driven products
  • KI, die nützlich istAI that's actually useful
  • Gestaltung, die man merktDesign you notice
Sechs Apps, alle liveSix apps, all live
“The fastest way to learn is to build.”
„Der schnellste Weg zu lernen ist zu bauen.“
“You have to keep the old world running while you build the new one.”
„Du musst die alte Welt am Laufen halten, während du die neue baust.“

Sechs Produkte, alle live.

Six products, all live.

Alle live, alle allein gebaut, alle in Tagen statt Quartalen. Was als Nächstes kommt, steht daneben — nachprüfbar.

All live, all built solo, all in days rather than quarters. What comes next is listed alongside — verifiable.

alle liveall live Gebaut, nicht geredet.Built, not talked about.

None of these started as a plan. They started because I needed them.

Keines dieser Projekte war geplant. Sie sind entstanden, weil ich sie gebraucht habe.

I wanted to know what finish time I could realistically aim for on race day, so I built Run with Alva. And I was tired of calling around to find out which tennis court was free, so I built the MTV Hernals app to just book one and see what's open. Both began as my own small annoyance, and then I started building — talking through the idea, trying things, watching it actually come together on screen. What got me hooked was the pace: ten or fifteen features in an afternoon, fixing bugs, tweaking the branding and cleaning up the UI as I went. But the best part was learning a whole new area step by step, figuring out how it really works while I built it.

Ich wollte wissen, welche Zielzeit am Renntag realistisch ist — also habe ich Run with Alva gebaut. Und ich hatte es satt, herumzutelefonieren, um herauszufinden, welcher Tennisplatz frei ist — also habe ich die MTV-Hernals-App gebaut, um einfach einen Platz zu buchen und zu sehen, was offen ist. Beides begann als eigene kleine Frustration, und dann habe ich angefangen zu bauen: die Idee durchsprechen, Dinge ausprobieren, zusehen, wie am Bildschirm wirklich etwas entsteht. Was mich gepackt hat, war das Tempo: zehn oder fünfzehn Features an einem Nachmittag, Bugs beheben, am Branding feilen und nebenbei das UI aufräumen. Am schönsten war aber, ein völlig neues Gebiet Schritt für Schritt zu lernen und beim Bauen zu verstehen, wie es wirklich funktioniert.

But the tools are not the point. The point is staying close to the real problem you set out to solve — not losing your time hunting for the ten killer prompts that will supposedly change everything. The fastest way to learn is to build. So I build. Digital products in days, not quarters. That's the whole idea behind staying curious: stop reading about it, and start.

Aber die Tools sind nicht der Punkt. Der Punkt ist, nah am eigentlichen Problem zu bleiben, das man lösen will — und nicht seine Zeit damit zu verlieren, nach den zehn Killer-Prompts zu suchen, die angeblich alles verändern. Der schnellste Weg zu lernen ist zu bauen. Also baue ich. Digitale Produkte in Tagen, nicht Quartalen. Genau darum geht es bei stay curious: nicht länger darüber lesen, sondern anfangen.

Solo · Web App

Solo · Web App

2026

Next.js 14 Supabase Vercel Anthropic API

Run with Alva — Race Prognosis & Training Planning

Run with Alva — Wettkampfprognose & Trainingsplanung

A personal running-analytics web app that turns scattered training data into a clear answer to one question: can I actually hit my race goal? A full training history flows in automatically via Strava — every run with its splits, heart rate and temperature — alongside real race results and daily readiness values, feeding a VDOT-based prediction engine that projects finish times for 5K, 10K, and half-marathon — and shows the gap to your target. A race-day correction adjusts the forecast for the weather and terrain you'll actually run in, and the result sits next to Garmin's estimate — as a deviation, not a verdict, because only real races settle which was closer. Designed, developed, and deployed end-to-end as a solo project.

Eine persönliche Lauf-Analytics-Web-App, die verstreute Trainingsdaten in eine klare Antwort auf eine Frage verwandelt: Kann ich mein Wettkampfziel tatsächlich erreichen? Die komplette Trainingshistorie fließt automatisch über Strava ein — jeder Lauf mit Splits, Puls und Temperatur — dazu echte Wettkampfergebnisse und tägliche Readiness-Werte, in eine VDOT-basierte Prognose-Engine, die Zielzeiten für 5 km, 10 km und Halbmarathon hochrechnet und die Lücke zum Ziel sichtbar macht. Eine Renntag-Korrektur passt die Prognose an Wetter und Streckenprofil an, die dich tatsächlich erwarten, und das Ergebnis steht neben der Schätzung von Garmin — als Abweichung, nicht als Wertung, denn welche näher lag, zeigen erst echte Rennen. Von Anfang bis Ende selbst konzipiert, entwickelt und deployt.

Run with Alva Dashboard: zwei Wettkampfziele mit Zielzeit, Prognose und Lücke zum Ziel, darunter Prognosevergleich und VDOT aus drei Säulen
01Dashboard mit zwei WettkampfzielenDashboard with two race goals
VDOT aus drei Säulen: Wettkämpfe 39,5, Laktatschwelle 38,3, Garmin VO₂max 44,1, gewichtet zu 40,1 gesamt
02VDOT-Prognose-EngineVDOT prediction engine
Prognosevergleich für 5 km bis Halbmarathon, Garmin neben Run with Alva, im Halbmarathon 1:48:50 gegen 1:50:42, Abweichung +1:52, ausdrücklich keine Wertung
03PrognosevergleichForecast comparison
VCM Winterlauf: Zielzeit 49:00, Prognose bei angenommenen 3,6 °C 49:55, 55 Sekunden über dem Ziel
04Renntag-KorrekturRace-day correction

Why I built this

Warum ich das gebaut habe

Run with Alva is really just everything I love about running in one place — tracking, chasing goals, the insights, building a plan, working backwards from a race date, running it, and then starting over. Every race becomes the starting point for the next one. Funnily enough, that's also how I build: try something, test it, do it again. For me the app sits on two things I genuinely enjoy: taking my own training seriously, with a clean and simple design, and getting AI to be useful rather than chatty — Alva answers questions about my training, but only from data that's actually there, and says so when it isn't. Honestly, the app itself is only half of it. The part I keep coming back for is the process — getting completely absorbed in it, head down, solving something that actually matters to me. That's why I want to keep building. A domain, a mail service, an app, whatever it is, it's never far from being real.

Run with Alva ist eigentlich nur alles, was ich am Laufen liebe, an einem Ort — tracken, Ziele verfolgen, die Insights, einen Plan bauen, vom Renndatum rückwärts rechnen, das Rennen laufen und dann wieder von vorn. Jedes Rennen wird zum Startpunkt für das nächste. Komischerweise baue ich genauso: etwas ausprobieren, testen, nochmal machen. Für mich steht die App auf zwei Dingen, die mir wirklich Spaß machen: mein eigenes Training ernst zu nehmen, mit einem klaren, schlichten Design, und KI dazu zu bringen, nützlich statt geschwätzig zu sein — Alva beantwortet Fragen zu meinem Training, aber nur aus Daten, die wirklich da sind, und sagt es, wenn sie fehlen. Ehrlich gesagt ist die App selbst nur die halbe Sache. Worauf ich immer wieder zurückkomme, ist der Prozess — völlig darin zu versinken, den Kopf unten, und etwas zu lösen, das mir wirklich wichtig ist. Deshalb will ich weiterbauen. Eine Domain, ein Mail-Service, eine App, was auch immer — Es ist nie weit davon entfernt, real zu werden.

Features

Funktionen

  • 02VDOT prediction engine — three-pillar model from races, threshold pace and VO₂max, time-weighted and converted to one common VDOT scale
  • 02VDOT-Prognose-Engine — Drei-Säulen-Modell aus Rennen, Schwellen-Pace und VO₂max, zeitgewichtet und in eine gemeinsame VDOT-Skala umgerechnet
  • 03Forecast comparison — Garmin and Run with Alva side by side per distance, shown as a deviation, not a verdict: only real races settle who was closer
  • 03Prognosevergleich — Garmin und Run with Alva je Distanz nebeneinander, als Abweichung ausgewiesen, nicht als Wertung: welche Schätzung näher lag, zeigen erst echte Rennen
  • 04Race-day correction — live weather and terrain adjust the forecast for the conditions you'll actually run in
  • 04Renntag-Korrektur — aktuelles Wetter und Streckenprofil passen die Prognose an die realen Bedingungen an
  • ·Condition-adjusted form — one race, two VDOT values: raw, and adjusted for heat and elevation, so a hot race doesn't read as a loss of form. The chart plots both.
  • ·Bedingungsbereinigte Form — ein Rennen, zwei VDOT-Werte: roh und um Hitze und Höhenmeter bereinigt, damit ein Hitzerennen nicht als Formeinbruch erscheint. Der Chart zeigt beide Verläufe.
  • ·Readiness score (0–100) from Garmin readiness, sleep and stress — recalculated on every visit
  • ·Readiness-Score (0–100) aus Garmin-Bereitschaft, Schlaf und Stress — bei jedem Aufruf neu berechnet
15 weitere Funktionen15 more features
  • ·Plausibility check — values outside VDOT 20–85 drop out of the forecast. If the estimates contradict each other and no race settles it, Alva shows no forecast rather than inventing one
  • ·Plausibilitätsprüfung — Werte außerhalb VDOT 20–85 fallen aus der Prognose. Widersprechen sich die Schätzwerte ohne gelaufenes Rennen, zeigt Alva keine Prognose, statt eine zu erfinden
  • ·Blood markers as health context only — ferritin, haemoglobin and more tracked over time, deliberately kept out of the forecast: no single lab value proves fitness, and the app says so
  • ·Blutwerte als reiner Gesundheits-Kontext — Ferritin, Hämoglobin und mehr im Verlauf, bewusst außerhalb der Prognose: kein einzelner Laborwert beweist Fitness, und die App sagt das auch
  • ·Base data with honest caveats — weight, VO₂max, threshold pace and BMI in trend, each with a note on what it does and doesn't say (BMI can't tell muscle from fat)
  • ·Grunddaten mit ehrlicher Einordnung — Gewicht, VO₂max, Schwellen-Pace und BMI im Verlauf, jeweils mit Hinweis, was der Wert aussagt und was nicht (BMI unterscheidet nicht Muskel und Fett)
  • ·Race lifecycle — every upcoming race shows the forecast and the gap to target; once the result is in, the goal moves to the archive without double entry, across 18 years of results. The forecast for a race is computed only from data before race day. A race can't predict itself.
  • ·Wettkampf-Lebenszyklus — jedes kommende Rennen zeigt Prognose und Lücke zum Ziel; mit dem Ergebnis wandert das Ziel ohne Doppeleingabe in den Rückblick, über 18 Jahre Ergebnisse hinweg. Die Prognose für ein Rennen wird nur aus Daten vor dem Renntag gerechnet. Ein Rennen kann sich nicht selbst vorhersagen.
  • ·AI-generated training plans — periodised backwards from race day into blocks and taper, with weekly volume and HR zones
  • ·KI-generierte Trainingspläne — vom Renntag rückwärts periodisiert in Blöcke und Taper, mit Wochenvolumen und HF-Zonen
  • ·Every plan explains itself — target pace checked against your threshold, recovery and weight read from real values, not assumptions
  • ·Jeder Plan begründet sich selbst — Zielpace gegen die Schwelle geprüft, Erholung und Gewicht aus echten Werten gelesen, nicht angenommen
  • ·Automatic Strava sync (OAuth) — full history, 200+ runs and 1,200+ km, each with splits, heart rate, temperature and indoor/outdoor
  • ·Automatischer Strava-Sync (OAuth) — komplette Historie, 200+ Läufe und 1.200+ km, jeweils mit Splits, Puls, Temperatur und drinnen/draußen
  • ·Personal bests — Strava best efforts across the full history, with a distance profile and a three-stage outlier filter: physically impossible, contradicting the same run, contradicting your own history
  • ·Bestleistungen — Strava Best Efforts über die ganze Historie, mit Distanzprofil und dreistufigem Ausreißerfilter: physikalisch unmöglich, Widerspruch innerhalb eines Laufs, Widerspruch zur eigenen Historie
  • ·Split analysis — threshold blocks are detected at split level, several per run if they're there. The weekly card shows kilometres per intensity, and wherever splits exist, HR efficiency comes from the easy ones only
  • ·Split-Analyse — Schwellenblöcke werden auf Split-Ebene erkannt, auch mehrere pro Lauf. Die Wochenkarte zeigt die Kilometer je Intensität, die HF-Effizienz stützt sich, wo Splits vorliegen, nur auf die lockeren
  • ·Training zones — threshold and easy ranges derived from your stored threshold pace, with a history of since when each value applies
  • ·Trainingszonen — Schwelle und Grundlage aus der hinterlegten Schwellen-Pace abgeleitet, mit Verlauf, seit wann welcher Wert gilt
  • ·Eight sports tracked alongside running — tennis, strength, cycling, swimming and more — filterable by period, distance, environment and races only
  • ·Acht Sportarten neben dem Laufen — Tennis, Kraft, Radfahren, Schwimmen und mehr — filterbar nach Zeitraum, Distanz, Umgebung und nur Rennen
  • ·Personalized insights across 18 categories from real data
  • ·Personalisierte Insights über 18 Kategorien aus realen Daten
  • ·Ask Alva — ask anything about your training in plain language; answers draw only on your stored data, and say so honestly when something's missing rather than guessing (currently a closed beta)
  • ·Frag Alva — Fragen zum eigenen Training in natürlicher Sprache; die Antwort stützt sich ausschließlich auf gespeicherte Daten und sagt ehrlich, wenn etwas fehlt, statt zu schätzen (derzeit geschlossene Beta)
  • ·Data on EU infrastructure (Supabase Paris, Vercel Frankfurt). AI features use the Anthropic API.
  • ·Daten auf EU-Infrastruktur (Supabase Paris, Vercel Frankfurt). KI-Funktionen nutzen die Anthropic API.
  • ·A dark theme with monospaced figures, because times are taken in at a glance, not read — and a light one in the original look
  • ·Dunkles Theme mit Monospace-Ziffern, weil Zeiten im Blick erfasst werden, nicht gelesen — dazu ein helles im Original-Look
Methodology — 18 chapters in the app explain every formula and cite their sources. No black box.Methodik — 18 Kapitel in der App erklären jede Formel und nennen ihre Quellen. Keine Black Box.

The VDOT model

Das VDOT-Modell

the base formula every time prognosis is built on

die Basisformel, auf der jede Zeitprognose aufbaut

Three data sources

Drei Datenquellen

why race, threshold, and Garmin are computed together

warum Wettkampf, Schwelle und Garmin gemeinsam berechnet werden

Time weighting

Zeitgewichtung

why an older race counts less than a recent one

warum ein älteres Rennen weniger zählt als ein aktuelles

VDOT trend

VDOT-Trend

your personal fitness development, charted

deine persönliche Fitnessentwicklung, visualisiert

Negative split

Negative Split

how the pace table distributes your target time across kilometers

wie die Pace-Tabelle deine Zielzeit über die Kilometer verteilt

Temperature & topography

Temperatur & Topografie

how heat and elevation affect the prognosis and VDOT

wie Hitze und Höhenmeter Prognose und VDOT beeinflussen

Raw vs. adjusted VDOT

Roher vs. adjustierter VDOT

why one and the same race can yield two VDOT values

warum ein und dasselbe Rennen zwei VDOT-Werte ergeben kann

Race weighting

Wettkampf-Gewichtung

what percentage each race contributes to the prognosis, and why

welcher Prozentsatz jedes Rennen zur Prognose beiträgt, und warum

Forecast comparison

Prognosevergleich

what Garmin and Run with Alva each estimate — and why the gap is not a verdict

was Garmin und Run with Alva jeweils schätzen — und warum die Lücke keine Wertung ist

Age correction

Alterskorrektur

when and why the model factors in your age

wann und warum das Modell dein Alter einrechnet

Training readiness

Training-Readiness

how Garmin readiness, sleep, and stress produce the readiness score

wie Garmin-Bereitschaft, Schlaf und Stress den Readiness-Score ergeben

BMI

BMI

what the value says, and what it doesn't

was der Wert aussagt, und was nicht

Race-day pacing

Renntag-Pacing

how the pace table splits the race into phases relative to your lactate threshold

wie die Pace-Tabelle das Rennen in Phasen relativ zur Laktatschwelle gliedert

Race lifecycle

Wettkampf-Lebenszyklus

how a goal becomes a result without double entry

wie aus einem Ziel ein Ergebnis wird, ohne Doppeleingabe

Dashboard overview

Dashboard-Übersicht

what the readiness card and weekly card show in detail

was die Readiness-Karte und die Wochen-Karte im Detail zeigen

Training analysis

Trainingsanalyse

why heart-rate efficiency is the main signal, not VDOT

warum die HF-Effizienz das Hauptsignal ist, nicht der VDOT

Personal bests from training

Bestleistungen aus dem Training

why every best effort from training is a lower bound

warum jede Bestzeit aus dem Training eine Untergrenze ist

Where the conditions come from

Woher die Bedingungen kommen

which source counts for temperature and elevation, and what happens when one is missing

welche Quelle für Temperatur und Höhenmeter gilt, und was passiert, wenn eine fehlt

Gebaut mitBuilt with

Frontend & Design

Frontend & Design

Next.js 16 (App Router, Server Actions)ReactTailwind CSSData Visualization (SVG)Responsive Design & Design Systems

Backend & Data

Backend & Data

Supabase (Postgres, Auth, Row Level Security)SQL / Database Design & MigrationsREST API IntegrationOAuth 2.0 (Strava)Geo/Weather APIs (Open-Meteo)Nominatim (Reverse Geocoding)Resend (Transactional Email)AES-256-GCM Encryption of Strava TokensData Modeling with Provenance TrackingEU-hosted architecture (Paris, Frankfurt)

AI & Analytics

KI & Analytics

Anthropic API / LLM IntegrationGrounded Q&A over own data (no hallucinated metrics)Prompt EngineeringStructured AI Responses (schema-based)AI training-plan generation (periodisation, HR zones)Sports Science Modeling (VDOT, Riegel, Lactate Threshold)Backtesting & Calibration

DevOps & Quality

DevOps & Quality

Vercel DeploymentGit / GitHub / Conventional CommitsTypeScriptVitest (580+ Tests)Data Integrity & Error Handling

Domain Knowledge

Domänenwissen

Running Performance DiagnosticsTraining Planning & Race Forecasting

als nächstesnext

Schwellentraining als vierte BerechnungssäuleThreshold training as a fourth calculation pillar

Solo · PWA

Solo · PWA

2026

Vite + React Supabase Vercel ntfy.sh

Alvida — Family Life in One Place

Alvida — Familienleben an einem Ort

A calendar for the whole family, built for phone and iPad. Appointments, lists and reminders live in one place, every person has their colour, every appointment an icon. Who has what and when is visible at a glance, by day, week or month.

Alvida opens from the home screen like an app and unlocks with Face ID. Everyone has their own account, nobody shares a password. A family is founded inside the app, members join via invite link and get their role. Kids have their own view, and leaving it takes a long press.

Under the surface every family is its own tenant. Row-level security on every data table means one family never sees another's data, even if something goes wrong in the browser. Notifications go to devices rather than accounts, recurring events are stored as a rule, and the weekly digest arrives every Sunday in local time.

Ein Kalender für die ganze Familie, gebaut für Handy und iPad. Termine, Listen und Erinnerungen liegen an einem Ort, jede Person hat ihre Farbe, jeder Termin ein Zeichen. Wer wann was hat, sieht man auf einen Blick, im Tag, in der Woche oder im Monat.

Alvida startet vom Home-Bildschirm wie eine App und entsperrt mit Face ID. Jede und jeder hat ein eigenes Konto, niemand teilt ein Passwort. Eine Familie gründet man direkt in der App, weitere Mitglieder kommen per Einladungslink dazu und bekommen ihre Rolle. Für die Kinder gibt es eine eigene Ansicht, aus der man nur mit langem Drücken wieder herauskommt.

Unter der Oberfläche ist jede Familie ein eigener Mandant. Row-Level Security auf allen Datentabellen sorgt dafür, dass keine Familie je die Daten einer anderen sieht, auch wenn im Browser etwas schiefgeht. Nachrichten gehen an einzelne Geräte statt an Konten, Wiederholungen sind als Regel gespeichert, und die Wochenübersicht kommt jeden Sonntag nach Wiener Zeit.

Alvida-Kalender in der Wochenansicht vom 12. bis 18. Oktober, je Tag mit Wetter; die Termine sind unscharf gestellt
01Wochenansicht mit Wetter je TagWeek view with weather per day
Benachrichtigungen in zwei nummerierten Schritten: Mitteilungen erlauben, dann dieses Gerät anmelden, darunter der Link zur Diagnose
02Push pro Gerät, nicht pro KontoPush per device, not per account
Hilfeseite „Was Alvida kann.“ mit Erklärungen zu Terminen: verschieben, ganztägig, Foto anhängen
03HilfeHelp

Features

Funktionen

  • ·Unlocks with Face ID, straight from the home screen. No password typing for something the whole family opens several times a day.
  • ·Entsperren mit Face ID, direkt vom Home-Bildschirm. Kein Passwort-Tippen bei etwas, das die ganze Familie mehrmals am Tag öffnet.
  • ·Multi-tenancy from the ground up. Every row carries a family id, enforced by RLS, not by filtering in the browser.
  • ·Mandantenfähig von Grund auf. Jede Zeile trägt eine Familien-ID, durchgesetzt über RLS und nicht über einen Filter im Browser.
  • 02Push per device, not per account. Numbered steps walk through setup, and a diagnosis page checks the whole chain and names the missing link. ntfy works as a second, independent channel.
  • 02Push pro Gerät, nicht pro Konto. Nummerierte Schritte führen durch die Einrichtung, eine Diagnoseseite prüft die ganze Kette und sagt, welches Glied fehlt. ntfy läuft als zweiter, unabhängiger Weg.
  • ·New appointments notify everyone except the person who created them. Reminders go to everyone, including the creator. Birthdays have no time of day, so they are reminded in days.
  • ·Neue Termine melden sich bei allen außer bei der Person, die sie angelegt hat. Erinnerungen bekommen alle, auch sie selbst. Geburtstage haben keine Uhrzeit und werden deshalb in Tagen vorher erinnert.
  • ·Photos on appointments, with a look back: exactly one year later the picture returns as “A year ago”. The photo lives only with the appointment and goes when it goes.
  • ·Fotos an Terminen, mit Rückblick: Genau ein Jahr später taucht das Bild als ‚Vor einem Jahr‘ wieder auf. Das Foto liegt nur beim Termin und ist mit ihm weg.
5 weitere Funktionen5 more features
  • ·Every appointment gets an icon, suggested from the title: “dentist” becomes a tooth. The icon says what it's about, the colour says who it's for.
  • ·Jeder Termin bekommt ein Zeichen, vorgeschlagen aus dem Titel: ‚Zahnarzt‘ wird zum Zahn. Das Zeichen sagt, worum es geht, die Farbe, wen es betrifft.
  • ·Drag appointments to another day or time. For recurring ones Alvida asks: just this once, or the whole series.
  • ·Termine per Ziehen auf einen anderen Tag oder eine andere Uhrzeit verschieben. Bei Serien fragt Alvida: nur dieses Mal oder die ganze Reihe.
  • ·Lists with templates for everything that starts the same way, from the weekly shop to the packing list. Only open items are saved, ticked ones belong to the last shop.
  • ·Listen mit Vorlagen für alles, was immer gleich anfängt, vom Wocheneinkauf bis zur Packliste. Gespeichert werden nur die offenen Einträge, abgehakte gehören zum letzten Einkauf.
  • ·Recurring events stored as a rule, not as rows, and expanded only for the visible range. A weekly series stays one record.
  • ·Wiederholungen als Regel statt als einzelne Zeilen, aufgelöst nur für den sichtbaren Zeitraum. Eine wöchentliche Serie bleibt ein einziger Datensatz.
  • ·Weekly digest every Sunday as a Vercel cron job, timezone-aware: “next week” means local time, not UTC.
  • ·Wochenübersicht jeden Sonntag als Vercel-Cron-Job, zeitzonenbewusst: ‚nächste Woche‘ heißt Wiener Zeit, nicht UTC.

als nächstesnext

Echte App für den App StoreA native app for the App Store

Solo · Web App

Solo · Web App

2026

Next.js 15 Neon Vercel Anthropic API Replicate

Living Art — Painting That Lives On

Living Art — Malerei, die weiterlebt

A web platform that lets analogue paintings live on digitally. You upload a photo of a picture you painted yourself, along with a title, a description and the year it was made. Claude Vision reads the painting the way a restorer would: palette, brushwork, composition, dominant colour. That analysis becomes the work's DNA, and a purpose-built painting engine uses it to produce a new state every 15 seconds, always in the style of the original. The painted picture stays visible throughout, with the digital re-creation beside it. Because every state is computed from a fixed starting point, every viewer anywhere in the world sees the same image at the same moment. The gallery is public, and there is a dedicated wall view for the TV. Designed, developed, and deployed end-to-end as a solo project.

Eine Web-Plattform, die analoge Bilder digital weiterleben lässt. Man lädt das Foto eines selbst gemalten Bildes hoch, dazu Titel, Beschreibung und Entstehungsjahr. Claude Vision liest das Bild wie ein Restaurator: Palette, Pinselduktus, Komposition, dominante Farbe. Aus dieser Analyse entsteht die DNA des Werks, und eine eigene Malmaschine erzeugt daraus alle 15 Sekunden einen neuen Zustand, immer im Stil des Originals. Das gemalte Bild bleibt dabei sichtbar, die digitale Neuschöpfung steht daneben. Weil jeder Zustand aus einem festen Startpunkt berechnet wird, sieht jeder Betrachter weltweit im selben Moment dasselbe Bild. Die Galerie ist öffentlich, für den Fernseher gibt es eine eigene Wandansicht. Von Anfang bis Ende selbst konzipiert, entwickelt und deployt.

Galerie von Living Art: Werke in unterschiedlichen Formaten mit Titel und Inventarnummer, etwa „Radfahrer im Wald“, „Libelle im Dschungel“ und „Einhorn“
01Galerie mit allen WerkenGallery of all works
Werkseite: links das Foto des gemalten Originals, Inventar 016, rechts die lebende Fassung in Ocker, Grün und Grau
02Original und Neuschöpfung nebeneinanderOriginal and re-creation side by side
Werkschild der Stilanalyse: Palette aus sieben Farben, Handschrift pastos, Aufbau zentriert, Energie 55, Dichte 95, Kontrast 67, Korn 100
03Stilanalyse mit Claude VisionStyle analysis with Claude Vision
Wandansicht auf dunklem Grund: die lebende Fassung von „Radfahrer im Wald“, rechts unten das Werkschild
04Wandansicht für den FernseherWall view for the TV

Why I built this

Warum ich das gebaut habe

A painting is finished the moment the brush is put down. I wanted to know what happens if it isn't — if a picture keeps its own handwriting and still carries on painting. The original remains the measure: the digital version may only do what the painting itself allows. Technically, the appeal was that nothing could be left to chance: same DNA, same moment, same image, on every device.

Ein gemaltes Bild ist fertig, sobald der Pinsel weg ist. Mich hat interessiert, was passiert, wenn es das nicht ist, wenn ein Bild seine eigene Handschrift behält und trotzdem weitermalt. Das Original bleibt der Massstab, die digitale Version darf nur, was das Bild selbst vorgibt. Technisch war der Reiz, dass nichts zufällig sein darf: gleiche DNA, gleicher Moment, gleiches Bild, auf jedem Gerät.

Features

Funktionen

  • 03Style analysis with Claude Vision — a painting protocol records palette, brushwork and composition; the dominant colour becomes the pigment of the work's page and tints the pulse line, the focus rings and the brushstroke under the title
  • 03Stilanalyse mit Claude Vision — ein Malprotokoll erfasst Palette, Duktus und Bildaufbau; die dominante Farbe wird zum Pigment der Werkseite und färbt Taktlinie, Fokusringe und den Pinselstrich unter dem Titel
  • ·Deterministic painting engine — a custom canvas renderer paints filled shapes, pressure gradients, bristle marks and dry breaks; the only source of randomness is a fixed seed, so every state can be reproduced
  • ·Deterministische Malmaschine — ein eigener Canvas-Renderer malt gefüllte Formen, Druckverläufe, Borstenspuren und trockene Abrisse; einzige Zufallsquelle ist ein fester Seed, jeder Zustand ist reproduzierbar
  • ·Global 15-second pulse — all works change in sync, counted from a fixed genesis on 1 September 2017; every state carries its own number
  • ·Globaler 15-Sekunden-Puls — alle Werke wechseln synchron, gerechnet ab einer festen Genesis am 1. September 2017; jeder Zustand trägt eine eigene Nummer
  • 02Original and re-creation side by side — the photo of the painted picture never disappears, and the living version always reads as a continuation
  • 02Original und Neuschöpfung nebeneinander — das Foto des gemalten Bildes verschwindet nie, die lebende Version ist immer als Weiterführung erkennbar
  • 04Wall view for the TV — a slideshow with crossfades, a dark background and Wake Lock, plus a five-layer wall label with a palette strip and the seed number
  • 04Wandansicht für den Fernseher — Diaschau mit Überblendung, dunklem Hintergrund und Wake Lock, dazu ein Werkschild in fünf Ebenen mit Palettenstreifen und Seed-Nummer
10 weitere Funktionen10 more features
  • ·Upload with title, description and year of creation
  • ·Upload mit Titel, Beschreibung und Entstehungsjahr
  • ·Sequential inventory numbers — format LA-0001
  • ·Fortlaufende Inventarnummern — Format LA-0001
  • ·AI variants in the style of the original — via Flux Kontext Pro on Replicate
  • ·KI-Varianten im Stil des Originals — über Flux Kontext Pro auf Replicate
  • ·Normalised work DNA — standardised before every read and write, so old and new works compute the same way
  • ·Normalisierte Werk-DNA — wird vor jedem Lesen und Schreiben vereinheitlicht, damit alte und neue Werke gleich rechnen
  • ·Calligraphic typography — Fraunces, Instrument Sans and Space Mono
  • ·Kalligrafische Typografie — Fraunces, Instrument Sans und Space Mono
  • ·Bilingual — German and English via custom locale routing
  • ·Zweisprachig — Deutsch und Englisch über eigenes Locale-Routing
  • ·TV-ready CSS — 0.5 px lines, no modern shorthands, no colour values written directly into components
  • ·TV-taugliches CSS — 0,5-px-Linien, keine modernen Kurzschreibweisen, keine Farbwerte direkt in Komponenten
  • ·Clean state numbers — typeset with narrow spaces
  • ·Saubere Zustandsnummern — typografisch mit schmalen Leerzeichen gesetzt
  • ·A gallery of all works as the home page
  • ·Galerie mit allen Werken als Startseite
  • ·Own domain — art.staycurious.art, with a redirect from the Vercel address
  • ·Eigene Domain — art.staycurious.art mit Weiterleitung von der Vercel-Adresse

als nächstesnext

Neuer Algorithmus ist live, bessere Darstellung am Fernseher folgtNew algorithm is live, better rendering on television screens follows

Volunteer · Web App

Ehrenamtlich · Web App

2026

Vite + React Neon Vercel Resend

MTV Hernals — Tennis Court Booking

MTV Hernals — Tennisplatz Buchung

A full-stack court booking system built pro bono for my tennis club MTV Hernals — replacing paper lists and phone calls with a self-service web app. Members book courts, manage fixed weekly slots, and receive opt-in email reminders. An admin panel handles member management, PDF export, and booking oversight. Built from scratch in my spare time: designed, developed, and deployed end-to-end.

Ein vollständiges Platzbuchungssystem, ehrenamtlich für den MTV Hernals Tennisverein entwickelt — als Ersatz für Papierlisten und Telefonanrufe. Mitglieder buchen Plätze selbst, verwalten Fixstunden und erhalten optionale E-Mail-Erinnerungen. Ein Admin-Panel deckt Mitgliederverwaltung, PDF-Export und Buchungsübersicht ab. Von Anfang bis Ende selbst konzipiert, entwickelt und deployt.

Tennisplatz-Buchung des MTV Hernals: Wetter, die nächste Stunde am Mittwoch, 24. Juni um 18 Uhr, das Kontingent mit 0 von 2 flexiblen Buchungen und 2 von 2 Fixstunden, darunter die Woche
01Buchung mit nächster Stunde und KontingentBooking with next session and allowance
Kontingent mit 0 von 2 flexiblen Buchungen und 2 von 2 eingetragenen Fixstunden, darunter die Woche vom 22. bis 28. Juni mit zwei Buchungen am Freitag
02Flexible Buchungen und FixstundenFlexible bookings and fixed slots
Hilfe und Informationen: Buchungsregeln, Kalender-Legende und Profil
03HilfeHelp

Features

Funktionen

  • 02Flexible bookings (max. 2/week, resets Monday)
  • 02Flexible Buchungen (max. 2/Woche, Reset montags)
  • 02Weekly fixed slots with admin override
  • 02Wöchentliche Fixstunden mit Admin-Override
  • ·Opt-in email notifications (confirmation, cancellation, 24h reminder)
  • ·Opt-in E-Mail-Benachrichtigungen (Bestätigung, Stornierung, 24h-Erinnerung)
  • ·Admin panel: member management, PDF export, full booking oversight
  • ·Admin-Panel: Mitgliederverwaltung, PDF-Export, vollständige Buchungsübersicht
  • ·GDPR-compliant data handling, hosted on EU infrastructure (Neon Frankfurt)
  • ·DSGVO-konformes Datenschutzkonzept, Hosting auf EU-Infrastruktur (Neon Frankfurt)
  • ·Moved from Supabase to Neon in September 2026 – own login, booking rules enforced in the database
  • ·Im September 2026 von Supabase auf Neon umgezogen – eigenes Login, Buchungsregeln direkt in der Datenbank

Solo · Web App

Solo · Web App

2026

Vite + React Neon Vercel Anthropic API

MyPocket — Conversation Notes from Recordings

MyPocket — Gesprächsnotizen aus Aufnahmen

Recordings and transcripts from a Pocket voice recorder are synced into my own database and post-processed with Claude in three modes: summary, action items, and a cleanup pass that strips filler words and fixes punctuation without shortening anything. Every result is cached under a key built from the recording, the mode, a hash of the raw transcript and the prompt version — so reopening costs nothing, and a re-synced transcript invalidates the old answer instead of quietly serving it. Moved from Supabase to Neon in September 2026 — same behaviour, noticeably lower running costs.

Aufnahmen und Transkripte eines Pocket-Recorders laufen in eine eigene Datenbank und werden mit Claude in drei Modi nachbearbeitet: Zusammenfassung, Action-Items und Glätten — Füllwörter raus, Satzzeichen korrigiert, ohne zu kürzen. Jedes Ergebnis wird unter einem Schlüssel aus Aufnahme, Modus, Hash des Roh-Transkripts und Prompt-Version gecacht — erneutes Öffnen kostet nichts, und ein neu synchronisiertes Transkript macht die alte Antwort ungültig, statt sie stillschweigend weiter auszuliefern. Im September 2026 von Supabase auf Neon umgezogen — gleiche Funktion, deutlich geringere laufende Kosten.

MyPocket: Übersicht „Deine Gespräche“ mit 50 Aufnahmen, 175 Stunden Gesamtdauer und Gesprächskarten nach Datum; die Inhalte sind unscharf gestellt
01Gesprächsnotizen aus AufnahmenConversation notes from recordings

Features

Funktionen

  • ·Cleanup is not summarisation — long transcripts are cut into overlapping chunks, processed one by one and reassembled in order
  • ·Glätten ist keine Kürzung — lange Transkripte werden in überlappende Abschnitte geschnitten, einzeln verarbeitet und in Originalreihenfolge zusammengefügt
  • ·A result is only cached once it validates — if the word count falls short of the source, it counts as truncated and is generated again
  • ·Gecacht wird erst, was die Validierung besteht — liegt die Wortzahl unter der Vorlage, gilt das Ergebnis als abgeschnitten und wird neu erzeugt
  • ·Search with a score threshold — the API always returns as many hits as asked for, so without a floor “no results” would never happen
  • ·Suche mit Score-Schwelle — die API liefert immer so viele Treffer wie angefragt, ohne Untergrenze gäbe es nie ein „keine Treffer“
  • ·Key facts are only pulled from the text when they are actually in it — no invented figures, and no empty placeholder when there is nothing to show
  • ·Eckdaten werden nur aus dem Text gezogen, wenn sie wirklich drinstehen — keine erfundenen Werte und kein leerer Platzhalter, wenn nichts da ist
  • ·Both API keys stay server-side in Vercel functions and never reach the browser
  • ·Beide API-Schlüssel bleiben serverseitig in Vercel-Functions und erreichen den Browser nie

Solo · PWA

Solo · PWA

2026

Vercel Neon Anthropic API Service Worker

Dachstein — Ski Tours, Huts, Via Ferratas

Dachstein — Skitouren, Hütten, Klettersteige

A planning site for our ski-touring weekend on the Dachstein in March 2027: three days, two nights in huts, four people. The weekend plan has times and vertical metres, seven of our own GPS tracks sit to scale on the map, and fifteen tours come with a difficulty rating, winter notes and clear “don't go if …” rules. Add huts, lifts, phone numbers, avalanche and weather sources. On Friday at six, a traffic light turns avalanche danger, lift status and visibility into one decision. Open it once on Wi-Fi the night before, and everything works without signal after that. A private project, not a commercial offer.

Eine Planungsseite für unser Skitouren-Wochenende am Dachstein im März 2027: drei Tage, zwei Hüttennächte, vier Leute. Der Wochenendplan hat Uhrzeiten und Höhenmeter, sieben eigene GPS-Tracks liegen massstabsgetreu auf der Karte, fünfzehn Touren haben Schwierigkeit, Winterhinweise und klare „Nicht gehen, wenn …“-Regeln. Dazu Hütten, Bahnen, Telefonnummern, Lawinen- und Wetterquellen. Am Freitag um sechs fasst eine Ampel Lawine, Bahn und Sicht zu einer Entscheidung zusammen. Am Vorabend einmal mit WLAN öffnen, danach funktioniert alles auch ohne Empfang. Ein privates Projekt, kein kommerzielles Angebot.

Wochenendplan der Skitouren am Dachstein: Countdown von 6 Tagen und 22 Stunden bis zur Frühfahrt am 19. März 2027 in Obertraun, darunter die Anreise über Gmunden
01Countdown bis zur FrühfahrtCountdown to the early departure
Ampel für Freitag früh: Lawine und Bahn mit je drei Feldern Grün, Gelb und Rot, die Lawine auf Grün gesetzt
02Ampel für Freitag frühFriday-morning traffic light
Schematische Karte der Abfahrtsvarianten, Norden oben: Route von der Bergstation über Edelgrießhöhe und Burgleiten bis Ramsau, Ski Willy
03Edelgrieß-Varianten mit ZeitplanEdelgrieß variants with a schedule

Why I built this

Warum ich das gebaut habe

Last year we only made it up the Krippenstein by luck, because the lift stops in strong wind. My binding kept popping open in deep snow, and everything we knew about huts, lifts and avalanche danger was spread across twenty open tabs. This time I wanted it all in one place, the same for all four of us, and working up on the plateau without signal. The site knows what no tour portal does: where we turned back, which descent to Hallstatt never worked for us, which hut had the better food. And it moves the decisions forward. Turnaround points get agreed on Thursday evening, not argued about on the summit slope. I built it over a few evenings. I would have done the research anyway; now something is left of it.

Letztes Jahr sind wir nur mit Glück auf den Krippenstein gekommen, weil die Bahn bei Wind steht. Die Bindung ist im Tiefschnee ständig aufgegangen, und alles, was wir über Hütten, Bahnen und Lawinenlage wussten, lag auf zwanzig offenen Tabs. Diesmal wollte ich es an einem Ort haben, für alle vier gleich, und so, dass es oben am Plateau ohne Netz noch geht. Die Seite kennt, was in keinem Tourenportal steht: wo wir umgedreht sind, welche Abfahrt nach Hallstatt bei uns nie geklappt hat, auf welcher Hütte das Essen besser war. Und sie holt die Entscheidungen nach vorn. Umkehrpunkte werden am Donnerstagabend vereinbart, nicht am Gipfelhang diskutiert. Gebaut hab ich sie an ein paar Abenden. Recherchiert hätte ich ohnehin, jetzt bleibt davon etwas übrig.

What runs underneath

Was im Hintergrund läuft

The site is built for the dead zone first. A service worker stores the page, images and tracks on the phone, and before the tour it shows whether the offline data is complete. What only concerns me stays on my phone: packing list, door check, traffic light and chat. What all four need to see lives in a Neon database (Postgres, Frankfurt): names, group gear, hut bookings. Anyone with the page can read it, only the group code lets you write. Offline, the state from the last save applies. “Ask Claude” runs through the Anthropic API and gets the page content plus your packing state, so the answers refer to our plan and not just any plan. The tracks come as KML from Google Earth, are simplified for display, and vertical metres are smoothed over 15 metres so GPS noise doesn't count as climbing.

Die Seite ist zuerst fürs Funkloch gebaut. Ein Service Worker legt Seite, Bilder und Tracks im Speicher des Handys ab, und vor der Tour zeigt sie an, ob die Offline-Daten vollständig sind. Was nur mich betrifft, bleibt auf meinem Handy: Packliste, Türcheck, Ampel und Chat. Was alle vier sehen müssen, liegt in einer Neon-Datenbank (Postgres, Frankfurt): Namen, Gruppenausrüstung, Hüttenbuchungen. Lesen kann jeder mit der Seite, schreiben nur mit dem Gruppen-Code. Offline gilt der Stand vom letzten Speichern. „Frag Claude“ läuft über die Anthropic API und bekommt den Seiteninhalt samt Packstand mit, damit die Antworten sich auf unseren Plan beziehen und nicht auf irgendeinen. Die Tracks kommen als KML aus Google Earth, werden für die Anzeige vereinfacht, und die Höhenmeter sind mit 15 Metern geglättet, damit GPS-Rauschen nicht als Anstieg zählt.

Features

Funktionen

  • 02Friday-morning traffic light — check avalanche, lift, wind and visibility in order, set a colour, and the page says what that means for the day. It keeps the state until the end of the day
  • 02Ampel für Freitag früh — Lawine, Bahn, Wind und Sicht der Reihe nach prüfen, Farbe setzen, und die Seite sagt, was das für den Tag heisst. Sie merkt sich den Stand bis Tagesende
  • ·Offline for the tour — tap “Save for the tour” once, and plan, tours, map and phone list work without signal. The page checks for itself whether everything was stored
  • ·Offline für die Tour — einmal „Für die Tour speichern“ tippen, dann laufen Plan, Touren, Karte und Telefonliste auch ohne Empfang. Die Seite prüft selbst, ob alles vollständig gespeichert ist
  • ·Shared list — who carries which group gear, which hut is booked. Everyone with the page open sees the same state; only those with the group code can write
  • ·Gemeinsame Liste — wer trägt welche Gruppenausrüstung, welche Hütte ist gebucht. Alle mit offener Seite sehen denselben Stand, schreiben kann nur, wer den Gruppen-Code hat
  • ·Seven of our own tracks on the map — from our Google Earth project, simplified for display, with distance, vertical metres and high point per route
  • ·Sieben eigene Tracks auf der Karte — aus unserem Google-Earth-Projekt, vereinfacht für die Anzeige, mit Distanz, Höhenmetern und höchstem Punkt je Route
  • ·Ask Claude — knows the whole page and your own packing state, and answers questions about timing, huts or plan B
  • ·Frag Claude — kennt die ganze Seite und den eigenen Packstand und beantwortet Fragen zu Zeitplan, Hütten oder Plan B
9 weitere Funktionen9 more features
  • ·Tour times for normally fit people — based on 350 m of ascent per hour, 4 km/h on the flat and 1,200 m of descent per hour, plus transitions and breaks. Shown next to the official figure, which is usually pure walking time for experienced people
  • ·Tourendauer für normal Trainierte — gerechnet mit 350 Hm pro Stunde bergauf, 4 km/h in der Ebene und 1.200 Hm pro Stunde Abfahrt, dazu Übergänge und Pausen. Neben der offiziellen Angabe, die meist reine Gehzeit für Geübte ist
  • ·“Don't go if …” for every tour, and a table of turnaround points agreed in advance
  • ·„Nicht gehen, wenn …“ bei jeder Tour, und eine Tabelle mit Umkehrpunkten, die vorher feststehen
  • ·Countdown to the early lift on Friday at 7:30
  • ·Countdown bis zur Frühfahrt am Freitag um 7:30
  • ·Rental car calculator — car size by number of skis, total cost and cost per person
  • ·Mietauto-Rechner — Autogrösse nach Anzahl Ski, Kosten gesamt und pro Person
  • ·Packing list and door check, each phone on its own
  • ·Packliste und Türcheck, jedes Handy für sich
  • ·Shopping list with quantities per number of people
  • ·Einkaufsliste mit Mengen je Personenzahl
  • 03Edelgrieß variants with a schedule calculated from the departure time at the hut
  • 03Edelgrieß-Varianten mit Zeitplan, der sich aus der Abmarschzeit an der Hütte rechnet
  • ·Photos from last year, placed where they explain something
  • ·Fotos vom letzten Jahr, an den Stellen, an denen sie etwas erklären
  • ·All sources with dates, no cookies, no tracking
  • ·Alle Quellen mit Stand, keine Cookies, kein Tracking

staycurious is my software studio in Vienna. I build apps that solve a real problem — mine, or yours.

staycurious ist mein Software-Studio in Wien. Ich baue Apps, die ein echtes Problem lösen — meins oder deins.

Christoph Freh
Christoph Freh Gründer & Product Manager Founder & Product Manager

It didn't start with a business plan. It started with two annoyances. I wanted to know what finish time I could realistically aim for on race day — that became Run with Alva. I was tired of calling around to find out which tennis court was free — that became the MTV Hernals app. Both shipped, both get used. At some point this stopped being a side thing and became the work itself: staycurious.

Angefangen hat es nicht mit einem Businessplan, sondern mit zwei Ärgernissen. Ich wollte wissen, welche Zielzeit am Renntag realistisch ist — daraus wurde Run with Alva. Ich hatte es satt herumzutelefonieren, um herauszufinden, welcher Tennisplatz frei ist — daraus wurde die MTV-Hernals-App. Beides ist live, beides wird benutzt. Irgendwann war das kein Nebenbei mehr, sondern die Arbeit selbst: staycurious.

Before that: close to twenty years of product and platform work — regulated banking at Erste Bank, crypto operations at Bitpanda, enterprise software at Cisco. That background is why the studio builds the way it does. I start from the user's problem, the data model and the edge cases, not from a feature list. The difference rarely shows on the first screen. It almost always shows in the second month.

Davor: knapp zwanzig Jahre Produkt- und Plattformarbeit — reguliertes Banking bei der Erste Bank, Krypto-Operations bei Bitpanda, Enterprise-Software bei Cisco. Dieser Hintergrund ist der Grund, warum hier so gebaut wird, wie gebaut wird. Ich beginne beim Problem der Nutzer, beim Datenmodell und bei den Grenzfällen, nicht bei einer Feature-Liste. Der Unterschied zeigt sich selten am ersten Screen. Fast immer im zweiten Monat.

Werdegang ansehen →︎ See my background →︎

What decides whether something gets built: does it solve a problem someone actually has? Everything else is busywork. And if it does solve one, it may as well look good — software you open every day shapes that day. That isn't decoration, it's part of the use. So nothing gets built here that nobody uses — and nothing gets promised that the data can't carry. In Run with Alva every number traces back to a formula and a source, and where data is missing the app says so instead of guessing. Software with a point to it, in other words.

Woran sich entscheidet, ob etwas gebaut wird: Löst es ein Problem, das jemand wirklich hat? Alles andere ist Beschäftigung. Und wenn es das tut, darf es auch gut aussehen. Software, die man jeden Tag öffnet, prägt den Tag — das ist kein Beiwerk, das ist Teil des Nutzens. Deshalb entsteht hier nichts, das niemand benutzt — und nichts wird versprochen, was die Daten nicht hergeben. In Run with Alva lässt sich jede Zahl auf eine Formel und eine Quelle zurückführen, und wo Daten fehlen, sagt die App das, statt zu raten. Software mit Sinn und Nutzen, kurz gesagt.

And it goes fast. Digital products in days, not quarters — not because quality is negotiable, but because you only really understand a product once it runs. If you have an idea that feels like that: the fastest way to learn is to build it.

Und es geht schnell. Digitale Produkte in Tagen, nicht Quartalen — nicht weil Qualität verhandelbar wäre, sondern weil man ein Produkt erst versteht, wenn es läuft. Wenn du eine Idee hast, die sich so anfühlt: Der schnellste Weg zu lernen ist zu bauen.

The thread

Der rote Faden

Three things haven't changed in twenty years, and they decide how the studio works today: what I get stuck into, who I want to do it with, and when I move on.

Drei Dinge haben sich in zwanzig Jahren nicht geändert — und sie entscheiden bis heute, wie im Studio gearbeitet wird: woran ich mich festbeiße, mit wem ich das am liebsten tue, und wann ich weiterziehe.

01 ·The work

01 ·Die Arbeit

Complexity Komplexität Resonance Resonanz Building Bauen

Complex domains pull me in. Read until the mechanics make sense, then build something that proves I understood them.

Komplexe Domänen ziehen mich an. Lesen, bis die Mechanik Sinn ergibt — dann etwas bauen, das beweist, dass ich sie verstanden habe.

02 ·The people

02 ·Die Menschen

Eye level Augenhöhe Good leadership Guter Chef Mentoring Mentoring Team Team

Looking back, every one of my best memories at work is a relationship — meeting as equals, a good boss, mentoring someone. Not a product.

Rückblickend ist jede meiner besten Erinnerungen an die Arbeit eine Beziehung — Augenhöhe, ein guter Chef, jemanden zu begleiten. Kein Produkt.

03 ·The time

03 ·Die Zeit

Role changes Rollenwechsel Fast iteration Schnelle Iteration Not at setbacks Nicht beim Scheitern

I move when the novelty fades, not when things get hard. That same impatience is what makes the studio fast.

Ich wechsle, wenn die Neuheit verblasst — nicht, wenn es schwierig wird. Dieselbe Ungeduld steckt heute im Tempo des Studios.

Background Hintergrund
~20 years product & platform ~20 Jahre Produkt & Plattform Erste Bank · George Bitpanda Cisco MSc Innovation & Technology Management MSc Innovations- & Technologiemanagement
Built with Gebaut mit
Next.js Vite + React Supabase Neon Vercel Anthropic API
Studio Studio
Vienna, Austria Wien, Österreich German & English Deutsch & Englisch

Woran sich entscheidet, ob etwas gebaut wird.

What decides whether something gets built.

Löst es ein Problem, das jemand wirklich hat? Alles andere ist Beschäftigung.

Does it solve a problem someone actually has? Everything else is busywork.

  1. Nutzen vor FunktionenUse before features

    Gebaut wird, was jemand wirklich benutzt. Features, die nur eine Roadmap füllen, entstehen hier nicht.

    What gets built is what someone actually uses. Features that only fill a roadmap don't happen here.

    belegevidence · MTV Hernals „als Ersatz für Papierlisten und Telefonanrufe“ “replacing paper lists and phone calls”
  2. Nachvollziehbar statt magischTraceable, not magic

    Jede Zahl hat eine Formel und eine Quelle. Fehlen Daten, sagt das Produkt es — statt zu raten.

    Every number has a formula and a source. Where data is missing, the product says so instead of guessing.

    belegevidence · Run with ALVA „18 Kapitel in der App erklären jede Formel und nennen ihre Quellen. Keine Black Box.“ “18 chapters in the app explain every formula and cite their sources. No black box.”
  3. Tage statt QuartaleDays, not quarters

    Vom Gedanken zur laufenden Version in Tagen. Ein Produkt versteht man erst, wenn es läuft.

    From idea to a running version in days. You only understand a product once it's live.

    belegevidence · Dachstein „Gebaut hab ich sie an ein paar Abenden.“ “I built it over a few evenings.”
  4. Schön ist keine ZugabeBeauty isn't a bonus

    Etwas, das man täglich benutzt, darf gut aussehen. Form und Funktion sind kein Tauschgeschäft.

    Something you use every day is allowed to look good. Form and function aren't a trade-off.

    belegevidence · Living Art „Bilder, die weitermalen.“ “Paintings that keep painting.”

Christoph Freh

Mag. (FH), MSc · WienVienna · christophfreh@gmail.com · +43 676 388 93 85 · staycurious.art

Bevor es staycurious gab.

Before staycurious.

Banking, FinTech, Enterprise Software.

Banking, fintech, enterprise software.

Zeugnisse und Referenzen auf Anfrage References and certificates on request

  1. 2026

    seit 08/2026

    since 08/2026

    WienIT · Wiener Stadtwerke

    Technical Product Owner, Integration Platform (Common Services)

    • Product Owner der konzernweiten Integrationsplattform (webMethods/EAI) für Wien Energie, Wiener Netze, Wiener Linien und die Holding – für Energie und Netz die einzige Integrationsschicht
    • Product Owner of the group-wide integration platform (webMethods/EAI) for Wien Energie, Wiener Netze, Wiener Linien and the holding – the only integration layer for energy and grid
    • Datengetriebene Backlog-Bereinigung (180+ Items in 40+ Epics): Betrieb von echten Vorhaben getrennt, rund die Hälfte gestrichen
    • Data-driven backlog restructuring (180+ items across 40+ epics): operations separated from real initiatives, roughly half cut
    mehrmore
    • Backlog, Sprint-Scope und Priorisierung für ein gemischtes Team aus 10 internen und externen Entwicklerinnen und Entwicklern – laufender Betrieb für mehrere Konzerngesellschaften neben neuer Integrationsarbeit
    • Backlog, sprint scope and prioritisation for a mixed team of 10 internal and external developers, balancing operations for several group companies with new integration work
    • Klare Sprint-Regeln (Commitment-Grenze inklusive Carryover, WIP-Limit pro Person) – planbare Lieferung trotz hohem Anteil ungeplanter Arbeit
    • Clear sprint rules (commitment cap including carryover, WIP limit per person) to keep delivery predictable despite a high share of unplanned work
    • Kapazitäts- und Wissensrisiko 2027: Mehrere externe Stellen enden gleichzeitig, deshalb strukturierter Wissenstransfer für kritische Themen wie Smart Meter und Marktkommunikation
    • 2027 capacity and knowledge risk: several external positions end at once, so structured knowledge transfer for critical topics such as Smart Meter and market communication
    • Entscheidungen mit Fachbereichen und Management zu Security-Härtung (NIS-2) und zur Dimensionierung von Drittverträgen vor neuen Konzern-Onboardings
    • Decisions with business units and management on security hardening (NIS-2) and on sizing third-party contracts ahead of new group onboardings
  2. 2023

    04/2023 – 05/2026

    Erste Bank Österreich · George

    Cluster Lead / Senior Product Manager

    • Plattform-Konvergenz Retail und Business statt doppelter Entwicklung
    • Converged the retail and business platforms instead of building everything twice
    • Compliance by Design in gemeinsamen Plattform-Komponenten (Identität, Signatur, Consent)
    • Compliance by Design in shared platform components (identity, signing, consent)
    mehrmore
    • Leitung eines von vier Produkt-Clustern (3 PMs): User Management, Onboarding, Security/Fraud
    • Led one of four product clusters (3 PMs): user management, onboarding, security/fraud
    • Demand-Governance nach strategischen Themen
    • Demand governance by strategic theme
    • Event-Tracking als Pflicht-Output
    • Event tracking as a mandatory output
    • Regulatorische Vorhaben: GID-Migration, Instant Payments, STP-Strecken
    • Regulatory programmes: GID migration, Instant Payments, STP flows
    • Legacy-Migrationen
    • Legacy migrations

    Wirkung Weniger doppelte Entwicklung, schnellere regulatorische Umsetzung, klarerer Fokus.

    Impact Less duplicate development, faster regulatory delivery, clearer focus.

    „Skalierbare Plattformen sind zuerst eine Frage von Kultur und Governance, nicht von Technik.“
    “Scalable platforms are a question of culture and governance first, not of technology.”
  3. 2021

    12/2021 – 03/2023

    Bitpanda

    Senior Product Manager, Internal Products & Operational Excellence

    • BOSS aufgebaut, die zentrale Plattform für regulatorische und operative Prozesse
    • Built BOSS, the central platform for regulatory and operational processes
    • Ausgelegt auf zehnfaches Wachstum ohne linear mehr Aufwand
    • Designed for tenfold growth without a linear increase in effort
    mehrmore
    • Proof of Funds und AML als orchestrierte Plattform-Fähigkeiten
    • Proof of Funds and AML as orchestrated platform capabilities
    • Generische API-Schicht
    • A generic API layer
    • 25+ Engineers in mehreren Teams
    • 25+ engineers across several teams
    • Migration von über 100 Features und Prozessen auf eine Plattform
    • Migrated more than 100 features and processes onto one platform

    Wirkung Skalierbare regulatorische Abläufe, deutlich weniger manuelle Arbeit.

    Impact Scalable regulatory operations, far less manual work.

  4. 2019

    09/2019 – 11/2021

    PHACTUM Softwareentwicklung

    Senior Product Owner, Prozessautomatisierung & Omnichannel

    Senior Product Owner, Process Automation & Omnichannel

    • Mehrjährige Automatisierungsprogramme für große deutsche Telekom-Kunden
    • Multi-year automation programmes for large German telecom clients
    • Scrum-Delivery von 6 auf 15+ Personen skaliert
    • Scaled Scrum delivery from 6 to 15+ people
    mehrmore
    • BPMN als gemeinsame Modellierungssprache
    • BPMN as a shared modelling language
    • Verantwortung für Scope, Zusagen und Wirtschaftlichkeit
    • Responsible for scope, commitments and profitability

    Wirkung Schnellere Automatisierung, konsistentere Prozesse.

    Impact Faster automation, more consistent processes.

  5. 2014

    09/2014 – 09/2017

    Cisco Systems Austria

    Senior Product Manager / Technical Product Lead

    • Self-Service Connection Store statt Projekt-Integrationen – von Monaten auf Tage
    • Self-Service Connection Store instead of project integrations – from months to days
    • Kernteam bei Ciscos erster Software-Übernahme (SolveDirect)
    • Core team on Cisco's first software acquisition (SolveDirect)
    mehrmore
    • Produktstrategie für ITSM, SIAM, Analytics
    • Product strategy for ITSM, SIAM, analytics
    • 70/30-Steuerung neue Plattform/Legacy
    • 70/30 split between new platform and legacy
    • 2015 vom Sales Consultant zum Senior PM befördert
    • Promoted from sales consultant to senior PM in 2015
    • Aufbau der US-Tochter unterstützt
    • Helped set up the US subsidiary

    Wirkung Skalierbares Integrationsmodell, schnelleres Onboarding.

    Impact Scalable integration model, faster onboarding.

  6. 2008

    Frühere Stationen

    Earlier roles

    • 01/2019 – 09/2019 The Unbelievable Machine Company · Senior Project Manager Data & AI
    • 07/2018 – 11/2018 Jumptomorrow · Project Manager Digital Transformation
    • 11/2017 – 06/2018 Dimension Data Austria · Senior Service Architect
    • 01/2008 – 08/2014 SolveDirect Service Management · Senior Consultant & Project Manager

Ausbildung

Education

  • MSc Innovation & Technology ManagementFH Technikum Wien · 2018–2021
  • Mag. (FH) Informations- und WissensmanagementFH Burgenland · 2000–2004
  • Mag. (FH) Information and Knowledge ManagementFH Burgenland · 2000–2004

Zertifikate

Certifications

  • Advanced Certified Scrum Product OwnerScrum Alliance, 2020 und 2025Scrum Alliance, 2020 and 2025
  • OMG BPM2 Fundamentals
  • PRINCE2 Foundation
  • IPMA Level C
  • ITIL V3

Sprachen

Languages

  • DeutschMuttersprache
  • GermanNative
  • Englischfließend
  • EnglishFluent
  • SpanischGrundkenntnisse
  • SpanishBasic

Deine Idee. Ich baue sie.

Your idea. I’ll build it.

Postkarte an Christoph

A postcard to Christoph

Name, Mail, Idee. Mehr braucht es nicht.

Name, email, idea. That's all it takes.

Worum geht’s ungefähr?Roughly what's it about?

Kein Newsletter, kein Profil. Nur eine E-Mail an mich. No newsletter, no profile. Just an email to me.