Tristan Ratz

Engineering Team Lead (AI, Search, Knowledge)

Deutsch
Portrait of Tristan Ratz

Tristan Ratz

Engineering Team Lead (AI, Search, Knowledge)

At Serviceware, I manage the teams around AI, search and knowledge of the AI-native Serviceware Platform. We are working on the future of AI-native Enterprise Service Management (ESM) and, with Agent Hub, redefining the way people work in the service industry.

Before that I worked as a Generative AI consultant at Genow AI and studied Information Systems at TU Darmstadt, where I spent most of my time on natural language processing, from question answering to retrieval augmented generation.

What I keep coming back to: in a product, AI is a means to an end, never an end in itself. A model is only as good as the experience it enables. If people notice the AI more than the improvement, something went wrong.

Based in

Darmstadt near Frankfurt,
Hesse, Germany

Working at

Serviceware as
Engineering Team Lead (AI, Search, Knowledge)

Languages

German (native)
English (C1)

French (B1–B2)

Qualities

team player
high energy

analytical

curious

fast learner

Technologies

LLMs, RAG, Search, Python, PyTorch, TypeScript, React, AWS, GCP

Interests

Large Language Models
Retrieval Augmented Generation

Search & Knowledge

Human-centered AI

Selected work

Projects

2026

This Website: Redesign 2026

React · TypeScript · Vite · Embeddings · Model2Vec · Hybrid Search · BM25 · Physics Simulation · View Transitions

AI-generated image

2022

diverSATy

Satellite Data · Remote Sensing · Geospatial Analysis · Climate Adaptation · Green Roofs · Business Development

AI-generated image

2021

Interactive Image Segmentation

Python · Tensorflow · Label Studio · Computer Vision · Image Segmentation · Machine Learning · Bachelor Thesis

AI-generated image

2020

Podcast

Object Detection · NLP · Deep Learning · Banking

2020

Homepage

React · JavaScript · HTML · SCSS · AWS

2019

ChatApp

Swift · iOS · SwiftUI · Project Catalyst · Python · Twisted

2016

Website

PHP · HTML · CSS · MySQL · Python · Twisted

2014

Website

PHP · JavaScript · MySQL · HTML · Wordpress

01 / 13

2026

This Website: Redesign 2026

React · TypeScript · Vite · Embeddings · Model2Vec · Hybrid Search · BM25 · Physics Simulation · View Transitions

The redesign of this site: one page in English and German that runs entirely in your browser, with a multilingual semantic search on a model shrunk from 512 MB to 5 MB, a handful of small physics simulations to play with and a few easter eggs for the curious.

The 2020 version of this site was a React template that had aged. The redesign keeps React, now with TypeScript and Vite, and is pre-rendered into static pages in English and German, one per project too, so it loads fast and reads well for search engines. There is no backend and no request to third parties: a strict content security policy only allows the site's own files, and everything, including the search, runs in your browser.

The look is calmer: dark by default, serif headlines, white cards, one accent colour. Motion is meant to explain where things come from. The search grows out of the field in the hero and slides back into it, a project card morphs into its detail view (View Transitions), a point on the similarity map grows into its article, and the slogan at the top is "generated" token by token, with a slider to rewind it.

The search box at the top ranks its answers with BM25, the classic keyword algorithm behind search engines like Elasticsearch, tolerant of typos and explaining why each result came up. It only matches words, not meaning, so the redesign tried more: a multilingual semantic search with potion-multilingual-128M, a Model2Vec model by Minish Lab distilled from bge-m3. It is not a transformer but a table with one vector per token. A text is split with a Unigram tokenizer (the most probable split, found with the Viterbi algorithm), its vectors are looked up and averaged; tokenizer and model are about 150 lines of TypeScript without any ML library, and no query leaves the page.

The original table has 500,353 tokens with 256 dimensions each, 512 MB. A build script keeps the 41,605 most probable tokens in Latin script, reduces them to 128 dimensions with PCA and stores them as 8-bit integers: about 5 MB, loaded only once you open the search. Every entry is embedded with its title, answer and English and German keywords, common words removed; matches below a cosine similarity of 0.47 are dropped and the rest is fused with the BM25 ranking by weighted reciprocal rank fusion. The same model lays out the similarity map of the projects, at build time.

The honest result: on 24 test questions (12 English, 12 German) the shrunk model alone found the right answer for 16, and nonsense often scored as high as real matches. Combined with BM25 it answers 18 of 24 without false hits, exactly as many as the keyword search once it had German keywords, so most of the gain came from those. Static embeddings average words and don't really understand questions; that would take a transformer such as multilingual-e5-small, about 118 MB. So the semantic part stays a proof of concept.

Behind the playful parts are small physics simulations, each kept free of the DOM and covered by tests. The regatta behind the timeline sails with a polar diagram modelled on a keelboat of about eleven metres: the boats beat towards their buoys in tacks, heel with the apparent wind and keep score, and your pointer is the wind, measured in Beaufort. The sea in the contact section is a row of springy water columns in which the message in a bottle floats, can be thrown, and the letter rolls around inside.

The cyclist on the line at the bottom of the page is a rigid body with contacts at his wheels, saddle and head: he gets back up after a fall, uses lines of text as ledges and splashes into the sea. The tiles around the profile hang on springs. And the gravity button lets the project carousel break apart into a pile of rigid boxes, a small port of Box2D-Lite with friction and stacking, before the cards float back into place.

Most of it you find by trying things. Grab the bottle, the cyclist or a tile and throw them, look at the bottle box at night, turn up the wind on the regatta, or switch on gravity and shake the pile. If you are short of patience, the search knows where things are.