← Alle Projekte← All projects
AI & automationKI & Automatisierung

Systeme, die arbeiten, wenn ich es nicht tue

I design and run automation end to end: from the idea and the rules to a system that works every day. Background: 11+ years in marketing and communications, now building with Python and LLM APIs. The code is written with the help of AI; decisions, rules, quality control and results are mine.

Ich entwerfe und betreibe Automatisierungen von Anfang bis Ende: von der Idee und den Regeln bis zu einem System, das täglich funktioniert. Hintergrund: über 11 Jahre Marketing und Kommunikation, heute mit Python und LLM-APIs. Der Code entsteht mit Unterstützung von KI; Entscheidungen, Regeln, Qualitätskontrolle und Resultate stammen von mir.

What would you like to see?Was möchten Sie sehen?
Project 01

Autonomous job application systemAutonomes Bewerbungssystem

A system that takes a job search from vacancy to submitted application without manual steps and reports every day on what happened. Built and put into production in eight weeks; it runs unattended on my own server and asks me only when a decision genuinely needs a human.

Ein System, das die Stellensuche von der Ausschreibung bis zur versendeten Bewerbung ohne manuelle Schritte führt und täglich berichtet, was passiert ist. In acht Wochen gebaut und in Betrieb genommen; es läuft unbeaufsichtigt auf meinem eigenen Server und fragt mich nur, wenn eine Entscheidung wirklich einen Menschen braucht.

Step 1. The system finds a vacancy and reads what the employer actually asks for – then writes down the “ideal candidate”.

Schritt 1. Das System findet eine Stelle, liest, was der Arbeitgeber tatsächlich verlangt – und hält den «Idealkandidaten» fest.

  careers.example-industries.test

Marketing Specialist

Example Industries AG · Sample City · 100%

Your tasksIhre Aufgaben

  • Plan and run campaigns across several channelsKampagnen planen und umsetzen über mehrere Kanäle
  • Coordinate agencies and external partnersAgenturen koordinieren und externe Partner steuern
  • Report results in KPIsResultate in KPIs berichten

Your profileIhr Profil

  • Several years of marketing experience, fluent English and GermanMehrjährige Marketingerfahrung, sehr gute Deutsch- und Englischkenntnisse
Ideal candidate (generated)Idealkandidat (erzeugt)

Someone who plans and runs campaigns end to end, works with several agencies, reports in numbers and brings the team along. Fluent in German and English.

Eine Person, die Kampagnen von der Planung bis zur Auswertung führt, mit mehreren Agenturen arbeitet, in Zahlen berichtet und das Team mitnimmt. Sehr gute Deutsch- und Englischkenntnisse.

✓ vacancy logged · fit check passedStelle erfasst · Eignungsprüfung bestanden

Step 2. A CV is written for exactly this vacancy – the same person gets a different CV for a different vacancy. Then the system checks how an applicant tracking system (ATS) would read it.

Schritt 2. Für genau diese Stelle wird ein Lebenslauf geschrieben – dieselbe Person bekommt für eine andere Stelle einen anderen. Danach prüft das System, wie ein Bewerbermanagement-System (ATS) ihn lesen würde.

How an ATS reads this CVWie ein ATS diesen Lebenslauf liest

0%
Coverage of the vacancy's requirements by the CV. ✓ covered · ◐ partly · ✕ missing.Abdeckung der Anforderungen der Stelle durch den Lebenslauf. ✓ abgedeckt · ◐ teilweise · ✕ fehlt.

    Everything on this tab is invented: person, employers, figures and vacancies. Real CVs are written in the language of the vacancy and fit on exactly one page.

    Alles auf diesem Tab ist erfunden: Person, Arbeitgeber, Zahlen und Stellen. Echte Lebensläufe entstehen in der Sprache der Stelle und passen auf genau eine Seite.

    Step 3. The application is submitted – and the employer's confirmation is recorded.

    Schritt 3. Die Bewerbung wird abgeschickt – und die Bestätigung des Arbeitgebers wird festgehalten.

      careers.example-industries.test/apply/done
    ✓

    Thank you for your applicationVielen Dank für Ihre Bewerbung

    Marketing Specialist · Reference EX-2026-0412Marketing Specialist · Referenz EX-2026-0412

    We have received your documents and will get back to you shortly.Wir haben Ihre Unterlagen erhalten und melden uns in Kürze.

    ✓ status “Applied” recorded · confirmation trackedStatus «Beworben» erfasst · Bestätigung protokolliert

    Step 4. Replies arrive in the mailbox. The system reads them, sorts them and logs the outcome – an invitation, for example.

    Schritt 4. Antworten treffen im Postfach ein. Das System liest und sortiert sie und protokolliert das Ergebnis – zum Beispiel eine Einladung.

      InboxPosteingang
    FromVonRecruiter Example <jobs@example-industries.test>
    SubjectBetreffInvitation to an interview – Marketing SpecialistEinladung zum Gespräch – Marketing Specialist

    Hello Alex,Guten Tag Alex,

    thank you for your application. We would like to get to know you better – would next Tuesday at 10:00 suit you for a first conversation?vielen Dank für Ihre Bewerbung. Wir würden Sie gern kennenlernen – passt Ihnen nächsten Dienstag um 10:00 Uhr für ein erstes Gespräch?

    Kind regards,
    Recruiter Example, Example Industries AG
    Freundliche Grüsse
    Recruiter Example, Example Industries AG

    ✓ reply classified: “interview invitation” · logged automaticallyAntwort eingeordnet: «Einladung zum Gespräch» · automatisch protokolliert

    Step 5. The goal of the whole chain.

    Schritt 5. Das Ziel der ganzen Kette.

    Illustration of the goal stateIllustration des Zielzustands
      InboxPosteingang
    FromVonRecruiter Example <jobs@example-industries.test>
    SubjectBetreffYour offer – Marketing SpecialistIhr Angebot – Marketing Specialist

    Hello Alex,Guten Tag Alex,

    we enjoyed our conversations and are happy to offer you the position of Marketing Specialist. We look forward to welcoming you to the team – please find the offer attached.wir haben die Gespräche sehr geschätzt und freuen uns, Ihnen die Stelle als Marketing Specialist anzubieten. Wir freuen uns, Sie im Team willkommen zu heissen – das Angebot finden Sie im Anhang.

    Kind regards,
    Recruiter Example, Example Industries AG
    Freundliche Grüsse
    Recruiter Example, Example Industries AG

    ✓ The whole chain is covered: vacancy → CV → application → reply → outcome.Die ganze Kette ist abgedeckt: Stelle → Lebenslauf → Bewerbung → Antwort → Ergebnis.
    8 weeks
    from the first line of code to unattended operationvon der ersten Codezeile zum unbeaufsichtigten Betrieb
    12.5% → 1.8%
    of documents needed correcting: 12.5% before and 1.8% after the automatic quality check was introducedder Dokumente mussten korrigiert werden: 12,5% vor und 1,8% nach Einführung der automatischen Qualitätsprüfung
    100%
    of statements in generated CVs and letters are compared with a verified fact sheet before sending; anything that cannot be proven is corrected or removedder Aussagen in erzeugten Lebensläufen und Anschreiben werden vor dem Versand mit einem geprüften Faktenblatt verglichen; was sich nicht belegen lässt, wird korrigiert oder entfernt
    ≈ 970
    automated testsautomatisierte Tests
    ≈ 47,000
    lines of PythonZeilen Python

    From suitable vacancies to responsesVon passenden Stellen bis zur Rückmeldung

    Share of suitable vacancies, since launch (suitable = passed the automatic fit check). Replies are still arriving, so these shares keep growing. Exact counts are not shown.

    Anteil der passenden Stellen, seit dem Start (passend = automatische Eignungsprüfung bestanden). Antworten treffen weiter ein, die Anteile steigen noch. Genaue Zahlen werden nicht gezeigt.

    Design principlesDesignprinzipien

    Automate the whole pathDen ganzen Weg automatisierenHumans handle exceptions, not routine.Menschen bearbeiten Ausnahmen, nicht Routine.
    Never trust model output uncheckedModellausgaben nie ungeprüft übernehmenEvery statement is verified before it leaves the system.Jede Aussage wird geprüft, bevor sie das System verlässt.
    Measure everythingAlles messenEvery step is logged automatically, so progress is visible at any time and each improvement is based on data.Jeder Schritt wird automatisch protokolliert, der Fortschritt ist jederzeit sichtbar und jede Verbesserung stützt sich auf Daten.
    Language models only where language is neededSprachmodelle nur, wo Sprache nötig istEverything else is plain, testable code.Alles andere ist einfacher, testbarer Code.

    Everything is trackedAlles wird protokolliert

    Every vacancy and every application is logged automatically in a table: fit score, date, status and response time. The table feeds the funnel above and shows where the rules need to change. Anonymised extract (company, role and links removed):

    Jede Stelle und jede Bewerbung wird automatisch in einer Tabelle erfasst: Eignung, Datum, Status und Reaktionszeit. Die Tabelle speist den Funnel oben und zeigt, wo Regeln angepasst werden müssen. Anonymisierter Auszug (Firma, Rolle und Links entfernt):

    IDSentGesendetFitEignungStatusReceipt confirmedEingang bestätigt
    #0116.10.71%Sent✓ same dayam selben Tag
    #0216.10.70%Sent⏳ waitingoffen
    #0318.10.85%Sent✓ 1 day1 Tag
    #0418.10.78%Sent✓ same dayam selben Tag
    #0519.10.66%Sent✓ same dayam selben Tag
    #0622.10.72%Sent✓ 1 day1 Tag
    #0722.10.72%Sent✓ 1 day1 Tag
    #0823.10.78%Sent✓ same dayam selben Tag
    #0923.10.78%Sent✓ same dayam selben Tag
    #1023.10.68%Sent✓ same dayam selben Tag
    #1123.10.76%Sent✓ same dayam selben Tag
    #1223.10.74%Sent✓ same dayam selben Tag
    #1323.10.74%Sent✓ same dayam selben Tag
    #1424.10.64%Sent⏳ waitingoffen
    #1524.10.68%Sent✓ same dayam selben Tag
    #1624.10.71%Sent✓ same dayam selben Tag
    #1724.10.67%Sent✓ same dayam selben Tag
    #1824.10.65%Sent✓ same dayam selben Tag
    #1925.10.75%Sent✓ same dayam selben Tag
    #2025.10.72%Sent⏳ waitingoffen
    #2125.10.63%Sent✓ same dayam selben Tag
    #2225.10.68%Sent✓ same dayam selben Tag
    #2325.10.62%Sent✓ same dayam selben Tag
    #2425.10.80%Sent✓ same dayam selben Tag
    #2525.10.69%Sent✓ same dayam selben Tag
    #2625.10.78%Sent✓ same dayam selben Tag
    #0116.10.71%Sent✓ same dayam selben Tag
    #0216.10.70%Sent⏳ waitingoffen
    #0318.10.85%Sent✓ 1 day1 Tag
    #0418.10.78%Sent✓ same dayam selben Tag
    #0519.10.66%Sent✓ same dayam selben Tag
    #0622.10.72%Sent✓ 1 day1 Tag
    #0722.10.72%Sent✓ 1 day1 Tag
    #0823.10.78%Sent✓ same dayam selben Tag
    #0923.10.78%Sent✓ same dayam selben Tag
    #1023.10.68%Sent✓ same dayam selben Tag
    #1123.10.76%Sent✓ same dayam selben Tag
    #1223.10.74%Sent✓ same dayam selben Tag
    #1323.10.74%Sent✓ same dayam selben Tag
    #1424.10.64%Sent⏳ waitingoffen
    #1524.10.68%Sent✓ same dayam selben Tag
    #1624.10.71%Sent✓ same dayam selben Tag
    #1724.10.67%Sent✓ same dayam selben Tag
    #1824.10.65%Sent✓ same dayam selben Tag
    #1925.10.75%Sent✓ same dayam selben Tag
    #2025.10.72%Sent⏳ waitingoffen
    #2125.10.63%Sent✓ same dayam selben Tag
    #2225.10.68%Sent✓ same dayam selben Tag
    #2325.10.62%Sent✓ same dayam selben Tag
    #2425.10.80%Sent✓ same dayam selben Tag
    #2525.10.69%Sent✓ same dayam selben Tag
    #2625.10.78%Sent✓ same dayam selben Tag

    Tools

    • Python
    • LLM APIs
    • Telegram API
    • PHPUnit
    • Two-factor authentication
    Project 02

    Campaign sign-up botKampagnen-Anmelde-Bot

    As a partner I receive advertising campaigns to carry out. New campaigns appear without notice and the places are gone within minutes. The bot watches the partner platform, registers me the moment a campaign appears, falls back to a waitlist, avoids overlapping campaigns and reports to Telegram.

    Als Partner erhalte ich Werbekampagnen zur Umsetzung. Neue Kampagnen erscheinen ohne Ankündigung, die Plätze sind in Minuten vergeben. Der Bot beobachtet die Partnerplattform, registriert mich im Moment des Erscheinens, weicht auf eine Warteliste aus, vermeidet Überschneidungen und meldet per Telegram.

    4 → 7
    campaigns won: 4 in all of 2025, 7 in 2026 (since May), +75%gewonnene Kampagnen: 4 im ganzen Jahr 2025, 7 in 2026 (seit Mai), +75%
    5 of 7von 7
    of the 2026 campaigns were registered automatically by the botder Kampagnen 2026 wurden automatisch vom Bot registriert
    ≈ CHF 45
    average value per campaigndurchschnittlicher Wert pro Kampagne

    Registrations and campaign periodsRegistrierungen und Kampagnenzeiträume

    Dot = day the registration was confirmed; bar = campaign period. Besides these five, the bot skipped overlapping campaigns to protect existing registrations.

    Punkt = Tag der Registrierungsbestätigung; Balken = Kampagnenzeitraum. Zusätzlich übersprang der Bot sich überschneidende Kampagnen, um bestehende Registrierungen zu schützen.

    B
    Campaign bot
    bot
    16 Aug
    Bot update
    Bot-Update
    Registration successful:
    • Campaign A
      Period: 15.08 – 28.08.2026

    Skipped because of overlapping dates:
    • Campaign B – conflicts with Campaign A
    Registrierung erfolgreich:
    • Kampagne A
      Zeitraum: 15.08. – 28.08.2026

    Wegen Terminüberschneidung übersprungen:
    • Kampagne B – Konflikt mit Kampagne A
    08:44
    19 Oct
    Campaign A – week 3 of 4
    Kampagne A – Woche 3 von 4
    Distance: 3.502 / 10 km ❌
    Active days: 2 / 3 ❌

    Sat 17.10 – 1.738 km
    Sun 18.10 – 1.764 km

    Until campaign end: 11 days
    Distanz: 3,502 / 10 km ❌
    Aktive Tage: 2 / 3 ❌

    Sa 17.10. – 1,738 km
    So 18.10. – 1,764 km

    Bis Kampagnenende: 11 Tage
    13:01
    Campaign A – week 3 of 4
    Kampagne A – Woche 3 von 4
    Distance: 10.413 / 10 km ✅
    Active days: 4 / 3 ✅

    Weekly target reached.
    Distanz: 10,413 / 10 km ✅
    Aktive Tage: 4 / 3 ✅

    Wochenziel erreicht.
    14:05

    Telegram notifications, translated from the original language and anonymised.

    Telegram-Benachrichtigungen, aus der Originalsprache übersetzt und anonymisiert.

    Tools

    • Python
    • API integration
    Project 03

    Daily status monitorTäglicher Status-Monitor

    A bot that checks the status of a pending case on an official website every morning and sends me a Telegram message with the result. The site uses bot protection, which is handled by a dedicated container; the bot was developed and tested locally in Docker and then run as a scheduled service. Credentials are kept outside the code.

    Ein Bot, der jeden Morgen den Status eines laufenden Verfahrens auf einer offiziellen Website prüft und mir das Ergebnis per Telegram schickt. Die Seite ist durch einen Bot-Schutz gesichert, den ein eigener Container übernimmt; der Bot wurde lokal in Docker entwickelt und getestet und läuft als geplanter Dienst. Zugangsdaten liegen ausserhalb des Codes.

    Site and case intentionally not named.

    Seite und Fall bewusst nicht genannt.

    B
    Status bot
    bot
    24 Oct
    📅 Daily check (24.10.2026, 07:00)Tägliche Prüfung (24.10.2026, 07:00)
    A case file has been created, No.
    The file is in a mandatory-coordination procedure.
    Ein Vorgang wurde angelegt, Nr.
    Der Vorgang befindet sich im Verfahren der zwingenden Abstimmung.
    07:01
    25 Oct
    📅 Daily check (25.10.2026, 07:00)Tägliche Prüfung (25.10.2026, 07:00)
    A case file has been created, No.
    The file is in a mandatory-coordination procedure.
    Ein Vorgang wurde angelegt, Nr.
    Der Vorgang befindet sich im Verfahren der zwingenden Abstimmung.
    07:01
    26 Oct
    📅 Daily check (26.10.2026, 07:00)Tägliche Prüfung (26.10.2026, 07:00)
    A case file has been created, No.
    The file is in a mandatory-coordination procedure.
    Ein Vorgang wurde angelegt, Nr.
    Der Vorgang befindet sich im Verfahren der zwingenden Abstimmung.
    07:01

    Daily Telegram message, translated from the original language; identifiers redacted.

    Tägliche Telegram-Nachricht, aus der Originalsprache übersetzt; Kennungen geschwärzt.

    Tools

    • Python
    • API integration
    Project 04

    Club website with CMS and SEO settingsVereinswebsite mit CMS und SEO-Einstellungen

    I built a complete website with a PHP/MariaDB database and its own admin area (CMS). Pages are made of blocks, events are entered once and appear everywhere, forms land in one inbox. Two-factor authentication, user roles and security are built in from the start.

    Entwickelt habe ich eine komplette Website mit PHP/MariaDB-Datenbank und eigenem Verwaltungsbereich (CMS). Seiten bestehen aus Blöcken, Termine werden einmal erfasst und erscheinen überall, Formulare landen in einem Eingang. Zwei-Faktor-Anmeldung, Benutzerrollen und Sicherheit sind von Anfang an eingebaut.

    The new websiteDie neue Website

    New websiteNeue Website
    New website, content page
    DesktopDesktop
    New website on a phone
    On a phoneAuf dem Handy

    The new website was developed and completed on a test database; the screenshots show test data.

    Die neue Website wurde auf einer Testdatenbank entwickelt und fertiggestellt; die Screenshots zeigen Testdaten.

    Custom admin area (CMS) with SEO settingsEigener Verwaltungsbereich (CMS) mit SEO-Einstellungen

    For every page, title, description, canonical URL, robots directives, Open Graph, Twitter Card and schema.org are set right in the CMS, with no code and no technical knowledge.

    Titel, Beschreibung, Canonical-URL, Robots-Direktiven, Open Graph, Twitter Card und Schema.org lassen sich pro Seite direkt im CMS einstellen, ohne Code und ohne technisches Wissen.

    Try it: click the menu on the left. SEO is framed in yellow.

    Zum Ausprobieren: Klicken Sie links im Menü. SEO ist gelb umrahmt.

    Admin area

    Test environment with fictitious data; some fields are blurred.

    Testumgebung mit fiktiven Daten; einzelne Felder sind unkenntlich gemacht.

    Tools

    • PHP 8
    • MariaDB / SQL
    • Docker
    • Two-factor notification