Small software, properly built.
An exam trainer for a sailing licence, and a driver that gets Xbox controllers working on a Mac. I built both because nothing out there did the job — and both run on my own hardware, not on somebody else’s.
Projects
Two of them — and both actually do something.
This is not a portfolio of mockups. Both are live, both get used, and each has an address of its own.
FB2 Trainer — sailing licence
A study and exam trainer for the Austrian Sailing Federation’s FB2 offshore licence. The whole syllabus — from the radio alphabet through manoeuvres and navigation to tidal vector triangles — sits in twelve modules, and the app keeps track of whatever is still shaky.
- 12 modules with 990 cards, including 207 practice exam questions
- Spaced repetition: whatever you got wrong comes straight back, and whatever sticks comes back less and less often
- Eight test levels — from picking the right answer to an endless round against the clock
- Mock exams with a history, a score for each topic and a walk-through of every question
- Study groups, regattas and duels — against your own crew instead of on your own
- Works offline on board: it installs on a phone, and answers find their way to the server later
Spring Boot · Kotlin · PostgreSQL · Angular · Docker
GamepadBridge — macOS
macOS only speaks Bluetooth. The Xbox Wireless Adapter — and every controller behind it — simply does not exist to a Mac. GamepadBridge is the menu bar app that changes that: it talks to the adapter itself and hands the controller to the system as an ordinary gamepad.
- Talks to the Xbox Wireless Adapter directly — no Bluetooth, no cable on the controller
- Including the 1537 controller, which macOS ignores on its own
- Shows up as an ordinary gamepad: games never notice the bridge
- Signed and notarised, installed in three lines with Homebrew
- Open source under the GPL — built on the reverse-engineering work behind xow
Swift · CoreHID · Homebrew Cask · GitLab CI
Craft
Six things I won’t compromise on.
These aren’t good intentions. They are the decisions both projects above actually hang on.
Arrives finished, not assembled later
Every page is rendered at build time and arrives as finished HTML. The text is there immediately, and the app quietly takes over from there. This page is the proof.
Nothing from other people’s servers
No web fonts, no tracking pixels, no advertising. The typeface and the icons are served from this domain, so none of your requests reach anyone else while you read this. The one optional extra, an error analysis on my own server, only starts if you agree.
Built for offline
The sailing trainer gets used on the dock, not at a desk. Content is kept on the device after the first visit, and answers sit in a queue until they can reach the server.
On my own hardware
Everything runs in my own rack: containers from my own registry, my own reverse proxy in front. Nothing that can be shut down one day and take my data with it.
One design system, not five
The same palette, the same building blocks, the same spacing on every DerGeorg page. A new page means new content — not a new look.
Contrast, actually measured
Every text colour on a light background meets WCAG AA — calculated, not guessed. It is why the logo amber is never body text here, only an accent on dark.
Built with
Interface
- Angular
- TypeScript
- Tailwind
- DaisyUI
Server
- Kotlin
- Spring Boot
- PostgreSQL
- Node
Apple
- Swift
- CoreHID
- Homebrew
Operations
- Docker
- Harbor
- GitLab CI
Contact
Questions about either project?
A bug report, a feature request, or plain curiosity. Both are after-hours projects, so a reply sometimes takes a few days.
Or write directly to dev@dergeorg.at