2 comments

[ 3.0 ms ] story [ 11.5 ms ] thread
I don't know how popular Gravitrax is state-side. For those who don't know, it's a popular marble run system with dozens of extensions from Ravensburger[1] (see what can be build in a recent video here[9]), our kids love it! And a Junior version for kids 3+ is coming out this year.

It comes with a free app that can be used to build courses and then also share those courses via a simple short code. The app can also display all the tiles you need to build a course. What is not possible is to list available courses or check whether you have enough tiles to build a specific course. Chris Fuchser (The Masked Marble on Youtube[2]) built something called Gravisheet[3] which is a Google Sheet where he collects codes from the app and also lists which tiles you need and so on. This is awesome and a great start! Unfortunately, it requires a lot of manual work so at christmas when my kids (ahem...) got their first set I got started reverse engineering the file format Ravensburger uses and built a small library/site to display information about it. The source code can be found on Github[4] and the site is also hosted on a free fly.io machine[5]. You can already see a JSON dump of the binary file contents[6] and also get a Bill of Materials[7] for a course. On the frontpage you can say which sets or extensions you have and get a list of courses.

This is all very rudimentary, mostly because of lack of time and lack of frontend skills but maybe it is useful to someone.

I'd love feedback (and contributions)!

Tech stack: - Rust backend with Axum - Storage in Postgres - Frontend in Svelte

The ImHex editor was incredibely helpful in reverse engineering the format[8]! Thank you very much for the author, he was very helpful as well.

[1] https://www.ravensburger.us/discover/gravitrax/index.html

[2] https://www.youtube.com/@MaskedMarble/videos

[3] https://docs.google.com/spreadsheets/d/1T-hLIBz05q4QMlt7xQ63...

[4] https://github.com/lfrancke/murmelbahn

[5] https://murmelbahn.fly.dev/index.html

[6] https://murmelbahn.fly.dev/course/83JFIBBI7H/dump

[7] https://murmelbahn.fly.dev/course/83JFIBBI7H/bom

[8] https://github.com/WerWolv/ImHex

[9] https://www.youtube.com/watch?v=xsglFJWVTMg

Apparently I am too dumb to submit it properly, this should have been the text :)