Software developerLuxembourg / Völklingen

Laurent
Brand.

I build data tools.
I run my own infrastructure.

For my bachelor’s thesis, I turned 11 traffic feeds into a dashboard for 2.8 million measurements. At home, I run a two-node homelab and build tools to manage it.

Work

What I’ve built.
How it works.

From Luxembourg’s roads
to my own servers.

Bachelor’s thesis
2026 · Data engineering

Prototypisches Dashboard Luxemburger Verkehrsdaten

How I turned Luxembourg’s live traffic feeds into a history I could explore.

  • Python
  • PostgreSQL 17
  • Streamlit
  • Polars
  • Docker Compose
11feeds ingested
2.8Mmeasurements collected
15 GBevaluation database

23 Jul–3 Sep 2026
Archived evaluation dataset

Inside the engineering

From a live feed
to a useful answer.

The CITA feeds showed current road conditions. I wanted a history I could query: what changes across hours, roads, and days? I built the collector and dashboard to find out.

Open a stage to inspect the decision.

Collect · PythonArchive before parsing.Live responses → preserved source

My collector runs as its own process. It saves each new response before parsing and uses SHA-256 hashes to detect duplicates.

The boundary

The archive preserves what arrived. An interruption still leaves a gap in what I can analyse.

Read about the 18-hour gap
Store · PostgreSQL 17Give the data its own history.Parsed responses → normalized measurements

I write normalized records to PostgreSQL. The dashboard reads this stored history independently of the live feeds.

What this enables

I can compare roads, hours, and days without asking the source for those observations again.

2.8M measurements · 23 Jul–3 Sep 2026

Explore · Streamlit + PolarsMake the pattern inspectable.Stored history → hourly comparison

Polars prepares the analysis; my Streamlit dashboard queries the history. One finding was a weekday morning speed dip on the A3.

Inspect the evidence

The figure below exposes the hourly means, observation counts, source window, and method.

Explore the A3 comparison
How I built this dataset

From my bachelor’s thesis

The A3, hour by hour.

In my sample, weekday speeds dipped in the morning; the weekend profile stayed steadier.

Weekday vs. weekend mean speeds · A3 · stored direction outboundFromTown

Historical observations

Explore the day Hover or drag to inspect an hour. Keyboard: ← / →, Home / End; Escape resets to 08:00.

Weekday versus weekend mean speed on Luxembourg’s A3 Observation-weighted hourly means, 23 July–3 September 2026, stored direction outboundFromTown. No geographic direction is inferred. Missing hourly values remain gaps. Selected hour: 08:00 · Weekdays: 68.3 km/h · Weekend: 101.2 km/h. km/h 0306090120 08:00 Weekdays Weekend 00040812162023 Hour · Europe/Luxembourg
08:00 · Weekdays: 68.3 km/h · Weekend: 101.2 km/h
Collected 23 July–3 September 2026 · Europe/Luxembourg. Observation-weighted hourly means: Monday–Friday versus Saturday–Sunday. Source: thesis section 6.4.1 / figure 6.4 and its hourly export. All hourly groups have observations; collection gaps remain in the source. Missing hourly values stay as breaks. The stored direction label is not independently verified geographically.

I built the collector and dashboard so I could turn live traffic feeds into a history of patterns I could compare across hours and days.

Read the data and method

Source: my bachelor’s thesis, section 6.4.1 / figure 6.4, and its evaluation_hourly_profile.csv export. I grouped Monday–Friday and Saturday–Sunday and weighted each weekday/hour mean by its observation count, following the thesis plotting code. Source rows include positive speed, flow, and occupancy values; results are rounded to 0.1 km/h. The source window runs from 23 July 2026, 16:23 to 3 September 2026, 19:13 (Europe/Luxembourg).

View the 48-point aggregate JSON ↗ View the original thesis figure ↗

Scroll within the table to see all hours and columns. Speeds are in km/h; observation columns show sample counts.

A3 hourly profile · stored direction outboundFromTown
HourWeekday km/hObservationsWeekend km/hObservations
00:0093.44,35794.71,731
01:0092.64,23695.91,730
02:0094.14,21795.41,651
03:0097.84,33496.31,644
04:0099.04,40496.41,632
05:0094.74,50399.21,641
06:0082.74,50299.61,645
07:0069.84,58099.51,675
08:0068.34,600101.21,706
09:0078.44,55999.01,645
10:0093.94,54098.31,682
11:0094.74,53196.41,699
12:0094.34,61195.51,726
13:0094.44,54394.31,693
14:0095.34,57891.91,671
15:0095.84,58194.71,685
16:0095.34,61496.91,669
17:0096.34,68097.51,702
18:0098.04,68596.91,662
19:0099.34,50099.41,659
20:0098.24,46098.81,732
21:0097.34,44196.01,751
22:0094.74,36494.91,749
23:0095.14,40594.91,697
What I learned

On 25 July, a TLS negotiation failure left an 18-hour gap. I fixed collection, but couldn’t recover the missing measurements from the source. I learned to make gaps visible alongside the charts, rather than let a neat line imply the data was complete.

Read the full thesis project

Software I built

Homelab
Command Center

I built one place to find my services, edit the catalog, and check HTTP availability and response times.

  • React
  • Node.js
  • Express
  • Docker
See the homelab it supports
Inside my application
  1. BrowserReact

    Search, filter and edit services.

  2. ServerNode.js / Express

    Read and save the catalog. Check HTTP responses and response times.

  3. StorageJSON file

    Keep the service catalog without a database server.

Optional · ProxmoxA read-only integration adds node, virtual machine, container, and storage views.

HTTP checks run from the app’s server. They show reachability, not the health of everything behind a service.

Featured project · My homelab

The systems I run at home.

I run two Proxmox nodes for the services I use every day: media, documents, home automation, and monitoring.

On my primary node, a Debian VM hosts Docker services, alongside a separate Tailscale LXC and Windows 11 VM. On the second, Home Assistant OS has its own VM; another Debian VM runs Pi-hole and Uptime Kuma in Docker.

  • Proxmox
  • Debian
  • Docker
  • Networking
  • Monitoring

What I run

Media
Plex · Jellyfin · Tautulli
Documents
Paperless-ngx · scanservjs
Home & network
Home Assistant OS · Pi-hole · Tailscale
Monitoring & management
Uptime Kuma · InfluxDB · Portainer · Homarr
Proxmox node

Primary node

VM
Debian
DockerMy application services
  • Plex
  • Jellyfin
  • Tautulli
  • Paperless-ngx
  • scanservjs
  • InfluxDB
  • Portainer
  • Homarr
LXC
Tailscale

Remote access

VM
Windows 11
Proxmox node

Second node

VM
Home Assistant OS

Home automation

VM
Debian
DockerSeparate containers
Container
Pi-hole

Local DNS & network-wide ad blocking

Container
Uptime Kuma

Monitors the primary node & its services

My current, running setup. Node boundaries contain the VMs and LXC; Docker services sit inside their Debian VM. Uptime Kuma monitors the primary node and its services.

Experience

Where I work.
What I studied.

A little about me

I’m from Luxembourg and based in Völklingen. I write Python, work with PostgreSQL, and run my own Linux servers. For my bachelor’s thesis, I took a set of live traffic feeds all the way from collection to a dashboard I could use to explore their history.

I study Computer Science at Hochschule Trier, where I started in 2022. I submitted my thesis on 15 September 2026 and defended it on 2 October 2026.

Away from the keyboard

I also build custom watches. When I step away from servers and code, I like putting something together that I can wear.

@brnd.lu

Work experience

Nov 2026–Present

SaJo

Working Student in Software Development

I work as a student in software development.

Apr 2025–Present Planned last day: 31 March 2027.

ZF Group

Working Student

I work alongside my studies in an industrial environment at ZF Group.

Education

Started 2022

Hochschule Trier

B.Sc. Computer Science

2020–2022

Lycée des Arts et Métiers

Secondary school leaving diploma

Diplôme de fin d’études secondaires, Luxembourg. Mathematics and informatics; graduated June 2022.

2015–2020

Lycée du Nord

Secondary education · Engineering stream (GIG)

Software

Python · Java · JavaScript · SQL · Git · Automated tests

Data

PostgreSQL · Polars · Streamlit · XML / DATEX II

Infrastructure

Proxmox · Debian · Docker Compose · Linux · Monitoring

CV

The details, on one page.

My experience, education, and selected work in a clean, printable format.

View my CV

Contact

Have something
I can help build?