Projects

Projects

Sample projects I designed and built myself

01

Ganglass

Events from the Canton of Zug

Ganglass collects events, concerts and local happenings from all 11 municipalities in the Canton of Zug and makes them searchable in one place - as a list, in a calendar or on a map. Favourites go on a watch list, and the web app can be installed on a phone. The site itself is in German.

  • Vue 3
  • TypeScript
  • FastAPI
  • PostgreSQL
  • Gemini
  • Kubernetes
ganglass.ch
HomeCalendarMap
Details and tech stack
Events
Events
Event view
Event view

11 municipalities, one place

Every event from Zug's municipalities collected, instead of spread across eleven separate sites.

List, calendar, map

Three views of the same events, plus search across title, location and category.

Watch list

Save favourites and share them as a link.

Installable

Runs as a web app on a phone, no app store needed.

Tech stack

Frontend

  • Vue 3
  • TypeScript
  • Vite
  • Pinia
  • Leaflet
  • ECharts

Single-page app with map clustering, installable as a PWA.

Backend

  • Python
  • FastAPI
  • SQLAlchemy
  • PostgreSQL
  • Alembic

REST API plus a worker with its own job queue and cron schedule.

Crawler

  • httpx
  • BeautifulSoup
  • iCal
  • RapidFuzz

Multi-stage pipeline: discover, fetch, extract, merge duplicates, geocode.

AI

  • Gemini
  • Pydantic AI

A daily Instagram post with a generated background image and text for the day's events.

Operations

  • Docker
  • Kubernetes
  • Helm
  • GitHub Actions
  • Caddy

Automated releases with scanned, signed container images.

02

Journeys

Journey tracker for Android, offline first

Journeys records trips from GPS, draws the route live on an OpenStreetMap map and stores everything locally on the phone. Photos and notes land right on the route, and several journeys can be grouped into a trip. Signing in backs journeys up to your own server and lets you share them as a link.

  • Kotlin
  • Jetpack Compose
  • Room
  • Go
  • PostgreSQL
  • Kubernetes
OverviewTripJourney detail
Details and tech stack
All journeys
All journeys
Shared link
Shared link
Backup & sync
Backup & sync

Offline first

Recording, map and history work without an account. Unless you sign in, nothing leaves the phone.

Photos and notes

Photos are placed on the route where they were taken, using their capture time.

Trips

Group several journeys into a trip with its own map, stats and GPX export.

Backup and sharing

Optional backup to your own server, and links that show route and photos in the browser.

Tech stack

App

  • Kotlin
  • Jetpack Compose
  • Material 3
  • Room
  • Hilt
  • WorkManager
  • osmdroid

Native Android app. Every GPS fix is written to the local database the moment it arrives.

Tracking

  • Foreground Service
  • Fused Location
  • Kalman-Filter

Records in the background, with three modes trading battery life against detail.

Server

  • Go
  • PostgreSQL
  • S3
  • OIDC
  • Leaflet

Backup server for routes, notes and photos, including a web view for shared links.

Operations

  • Docker
  • Kubernetes
  • Helm
  • GitHub Actions

The app checks for new versions daily and installs signed updates itself.

03

TrExperts!

Portfolio and budget app that measures whether following the AI pays off

TrExperts! is a lab for studying how language models behave as portfolio decision-makers. It keeps a household budget, tracks a portfolio against benchmarks and turns money questions into goals with concrete next steps. For every AI recommendation it measures afterwards whether following it actually paid off.

  • Vue 3
  • FastAPI
  • Pydantic AI
  • Celery
  • PostgreSQL
  • Kubernetes
stock.baer.dev
HomePortfolioBudget
Details and tech stack
Coach
Coach

Goals instead of questions

Describe a money problem in your own words. The plan comes from fixed rules; the language model only rewords it and cannot change the numbers.

AI analysis

A health score and weekly trade suggestions for the current portfolio. Trades stay in your hands.

Does it pay off?

Tracks how many recommendations were followed and how they turned out, compared per prompt version and model.

Household budget

Type in expenses as free text and see what is left for the month, per category.

Tech stack

Frontend

  • Vue 3
  • TypeScript
  • Pinia
  • TanStack Query
  • Tailwind CSS
  • Chart.js

Single-page app, installable as a PWA, with types that mirror the backend models.

Backend

  • Python
  • FastAPI
  • SQLModel
  • PostgreSQL
  • Celery
  • Redis

REST API with strict layering; scheduled and long-running jobs run in a worker.

AI

  • Pydantic AI
  • Gemini
  • Claude
  • OpenAI

Around 25 agents with structured outputs only. Every result is traceable to its prompt version and model.

Operations

  • Kubernetes
  • Helm
  • Flux
  • OIDC
  • OpenTelemetry
  • GitHub Actions

Releases build scanned container images and a Helm chart, which Flux rolls out to the cluster.

04

MSFS 2024 HUD

Flight instruments for Microsoft Flight Simulator on a 2.4-inch ESP32 display

The HUD turns a 2.4-inch ESP32 touch display into a flight instrument for Microsoft Flight Simulator 2024. A small Windows app reads the telemetry from the simulator and sends it to the display over USB or WiFi. Eight screens show attitude, engine, navigation and autopilot, and warnings such as stall or engine fire appear on top of every screen.

  • C++
  • LVGL
  • ESP32
  • C#
  • .NET 10
  • SimConnect
GitHub
Attitude indicatorECAMAutopilot
Details and tech stack
Navigation
Navigation
Engine
Engine
Flight data
Flight data

Eight instrument screens

Artificial horizon, engine, flight data, G-force, navigation, configuration, autopilot and an Airbus-style ECAM. Swipe to change screens.

Autopilot by touch

Tap to engage autopilot modes and set heading and altitude. A tile only lights up once the simulator reports the new state.

No MSFS SDK needed

The Windows app speaks the SimConnect protocol itself, so it ships as a finished program.

Guided setup

The installer finds the display on USB, flashes the firmware and starts the HUD together with the simulator.

Tech stack

Firmware

  • C++
  • Arduino
  • LVGL
  • TFT_eSPI
  • PlatformIO

Anti-aliased horizon, dithered gradients and eased gauges, drawn with DMA double buffering.

Sender

  • C#
  • .NET 10
  • SimConnect

Windows app with its own SimConnect client, sending telemetry 20 to 30 times per second.

Protocol

  • COBS
  • CRC-8
  • USB Serial
  • UDP

Compact binary frames, implemented in C++ and C# and tested on both sides with the same reference frames.

Build & test

  • PowerShell
  • Inno Setup
  • GitHub Actions
  • QEMU

CI boots the firmware in an ESP32 emulator and tests the sender against a fake simulator.

05

Birthday Contacts

Birthday reminders for Android and iPhone, with companions for three watch platforms

Birthday Contacts lists the birthdays from your contacts, sorted by who is next, and reminds you on the day. Birthdays come from the phone's address book, from Google Contacts or from entries you add yourself. Widgets and watch apps show the next birthdays without opening the app.

  • Flutter
  • Dart
  • Kotlin
  • Swift
  • Wear OS
  • Garmin
Birthday listDark modeBirthday detail
Details and tech stack
Add a birthday
Add a birthday
Backup settings
Backup settings
Setup
Setup

Three sources, one list

Phone contacts, Google Contacts and manual entries. Nothing is imported until you switch a source on.

Reminders

A notification on the day at a time you choose, and optionally the day before and a week before.

Widgets and watches

Home-screen and lock-screen widgets, plus apps for Wear OS, Apple Watch and Garmin.

No account, no tracking

Birthdays stay on your devices. Backups go to Google Drive, iCloud or a file, only when you send them.

Tech stack

App

  • Flutter
  • Dart
  • Riverpod
  • Drift
  • go_router

One codebase for Android and iPhone, with a local database that is refreshed on every sync.

Android

  • Kotlin
  • Jetpack Glance
  • Wear OS
  • WorkManager

Native home-screen widget and a Wear OS app with tile and complication.

Apple

  • Swift
  • WidgetKit
  • watchOS

Home-screen and lock-screen widgets and an Apple Watch app that share their code.

Garmin

  • Connect IQ
  • Monkey C

Watch app with glance and list, fed by the phone. All surfaces come in six languages.

Have a similar project in mind?

From the idea to a running product.

Start a conversation