adarshchoudhary.dev

projects / leezenpass

LeezenPass

A digital bike pass for Münster, designed to make stolen bikes hard to sell. Built with a team of five in 36 hours at MÜNSTERHACK 2026.

role
Idea, design, code, review and pitch; team of five
stack
ASP.NET Core, React, PostgreSQL, PostGIS
status
hackathon

live from GitHub · updated at each build

repo created
25 Sep 2026
last commit
13 Oct 2026

01 / the problem

The problem

Münster has the highest bike-theft rate per resident in Germany, about 1,500 per 100,000 residents (BikePass). In 2025 the police recorded 4,561 bike thefts, about one in seven reported crimes, and only 12.6% were cleared up (Polizei Münster, Kriminalstatistik 2025). Bikes are stolen because they are easy to resell, while the police bike-pass app has been discontinued (polizei-beratung.de) and the Münster police no longer offer online bike registration (Polizei Münster).

LeezenPass targets the resale market: the idea is that registered bikes with a visible trust level are harder to resell, buyers check a frame number before they buy, and stolen bikes appear on a public list without any owner data.

02 / what we built

What we built

I proposed the idea at the event and worked on the design and the code, reviewed changes, and gave the pitch. In 36 hours, with a team of five, we built:

  1. A bike pass with photos and a PDF export for police and insurance
  2. AI prefill: type, colours, brand and frame number suggested from photos by a vision model running locally (Qwen3-VL in LM Studio)
  3. A public “check before you buy” by frame number or FEIN code, with no login, a rate limit and a captcha
  4. Theft reports, a public stolen list and a share card
  5. Ownership transfer with a one-time code, a transfer certificate and a verification page
  6. Ownership proof from a receipt photo plus a photo of the frame number with a 10-minute one-time code
  7. A German and English installable web app, with a demo-data mode and synthetic seed data

The API is ASP.NET Core 10 with EF Core 10 on PostgreSQL and PostGIS; the web app is React 19 with TypeScript and Tailwind CSS.

03 / decisions

Decisions

decision 01

Vertical slices for a 36-hour team

One API project with one folder per use case (FastEndpoints), instead of a full Clean Architecture template spread over three or four projects. The aim was that teammates new to the code could start within minutes and each person could own whole slices, instead of hitting merge conflicts across shared layers.

decision 02

A check that leaks nothing

The public check returns only a status and shows details only for bikes reported stolen, so it never reveals that a clean bike is registered. FEIN codes encode the owner’s address, so they are stored only as an HMAC hash, and photo metadata, including GPS, is stripped on upload.

decision 03

AI suggests, people decide

The vision model fills in the registration form as editable suggestions and never saves on its own. It runs locally, so photos never leave the laptop and the demo does not depend on the event Wi-Fi; if the model is not running, the form simply stays manual.

04 / outcome

Outcome

I pitched LeezenPass at the tenth MÜNSTERHACK, a two-day event on 25 and 26 September 2026 where the audience votes for the winners, and it received 59 votes. It was my first pitch at an event like this, and it got a bit messy: next time I will spend as much time on the story as on the code.

The code is released under the MIT licence for other cities to reuse. It is a demo with synthetic data, not yet deployed. Ideas for later, listed in the README: onboarding for bike shops and ADFC coding events, matching with the city’s found-bike station, and community sightings of stolen bikes.

nextOpen-source contributions