VPDesktop: Unofficial VPMobil/stundenplan24.de desktop client banner

VPDesktop: Unofficial VPMobil/stundenplan24.de desktop client

9 devlogs
29h 52m 33s

Vpmobil — whether you like it or hate it, the fact is that in many German schools it’s the standard for timetable exchange over the internet.

While a mobile app exists, it’s hardly usable, and there is no good desktop interface at all. That makes it a perfect opportunity for an unofficial client — and that’s exactly what this project is.

Just grab the binary and run it to try it out for yourself.

As always, feel free to fork the project and customize it any way you like. I’d also love to hear about bugs, improvements, or feature ideas.

𝓒𝓱𝓮𝓮𝓻𝓼

Loading README...

mtthsschrbr

Shipped this project!

Hours: 8.08
Cookies: 🍪 140
Multiplier: 17.27 cookies/hr

Hey, in this project I’ve tried to make a well-working client for the software I need to use anyway, so that I can at least make a good UI for the data.

Anyway, I hope you like it. Give me some feedback if you’ve got some time!

I hope this project sails smoothly.

mtthsschrbr

Updates & Improvements

Hey! Over the past few days I added some key QoL and UI features:

  • Last login persistence with autofill support (see implementation details below)
  • Navigation header implementation

Implementation details

The username and school number are stored using file-based caching
(implementation here).

The password, however, is stored using go-keyring, which saves it in your OS-native keychain.


Why use the keychain?

In short: security.

Although the password is accessible to the application without manual decryption, the OS keychain itself is:

  • Encrypted at rest by default
  • Only unlocked when you’re logged into your OS
  • Protected from offline access (e.g. someone copying your hard drive)

So instead of writing the password to a plain file, the keychain ensures that someone who physically obtains your disk can’t simply read credentials, while still keeping login seamless for the user.

Attachment
Attachment
0
mtthsschrbr

Hey, not much to report, just developing small things, added an interface between the ui and the api, basically the UI gets a pointer to the object and can then load content dynamically.

I also integrated i18n for locales, so that the app works in english and german 🥳.

Attachment
Attachment
0