iOS, Android 2018–2019

Skoda Load-In

Drivers can now have us play Tetris with a load for them

2018-2019, 1000+ hours

01 Home

Putting a load into several boxes and then the boxes into the trunk of a car is hard for your brain and your muscles. Good thing Škoda drivers can now rely on us to do the thinking for them. We can calculate and show them the ideal way to load their trunk.

Our goal was to create an independent module of a mobile application for Android and iOS which can tell the user in just 60 seconds whether the load fits in their car, and how to load it best.


Škoda Auto


iOS & Android




+ 1 000 hodin

Expert modeBasic mode

02 Assignment

We want app users to do as little as possible.

Working with our app shouldn’t take longer than actually loading the trunk on their own through trial-and-error.

The user selects the model of their car, takes a photo of the load or enters its dimensions, and then has the app show them the best way to load it into the trunk.







Technologies used

Android – Kotlin, MVVM; iOS – Swift, MVVM-C; The back-end version on Azure Cloud (a requirement by the partner). The back-end solution was written in Python, with some of its parts in the C language (using Cython) due to the solution. We also set up smart scaling in Azure, so we can handle any number of users at the same time.

Car select
Numer of passengers
Everything loaded

03 Overcoming obstacles

Sounds too simple, huh?

  • 01
  • 02
  • 03

Škoda Auto provided 3D models of trunks for all the supported types of its cars, only not in a unified form. First, we had to unify the references into a format we could use to do the calculations.The app needed to make the calculations faster than the user, so we had to optimize our algorithms and strike a balance between precision and speed.Entering the dimensions of individual items had to be comfortable. We considered several ways to make this routine simple and easy.


04 Highlights

What we came up with

What we came up with


Knapsack problem

After several tests, we divided the trunk into virtual cubes with an edge of 5 centimetres, which seemed to be ideal. Most of the load is placed into this network and the calculation is finished before you manage to put something into the trunk yourself. This may remind IT guys and mathematicians of the Knapsack problem.


Four ways of calculation

The load in the trunk is calculated in four ways. The most efficient procedure is then drawn using vector masks directly in the mobile device.


It is simple

Of course, the user may enter the dimensions and level of fragility or softness of the load into the app themselves. Some boxes, like the ones containing furniture to be assembled, already have their dimensions written on them. In such cases, simply turn on your camera and smart text recognition does the work for you.


Own calculation

When rendering the items in the trunk, we used only 2D renders of the trunk with its door open. We developed our own calculation of the perspective and projecting the items into the 2D space, including the masks to render the covered parts.


Reasonable format suitable for calculations

The models of the inside of the trunk were provided in a standard triangle format. We had to come up with a reasonable format suitable for calculations, including a suitable transformation of the coordinate system both for rendering and calculations.


Measuring with AR

Entering the size of the items manually would be insufficient and less than user-friendly. This is why each entered item is visualized and animated, and it is even possible to manipulate it, including changing its size using multi-touch gestures. What’s more, the app can use the OCR to recognize an item and determine its size. The user can measure its size using AR if they don’t know its exact size or don’t have a tape measure.


Results in 3D

In order to verify functionality, we needed to iterate and recognize potential scenarios. The results of the calculation can be displayed directly in the matrix in 3D, making it possible to precisely recognize any potential flaws.


The most efficient strategy

There is no single correct result of the calculation, as there can be an infinite number possibilities. This meant that we had to break up the problem into individual potential solutions and define it to look the way the ideal solution should. Gradually, we implemented several strategies to load the items, and the app chooses the most efficient one.

05 Results

A satisfied client

A satisfied client

Once the Škoda Load-in app was thoroughly tested by the client and met all the requirements of this huge corporation, it was integrated into the main Škoda app for all users.

Of course you can still use for the trunk-packing issue several non app strategies … and brute force. :-)

The version for Android is based on the MVVM architecture and was coded in Kotlin. The version for iOS was created in Swift on the MVVM-C architecture. At the same time, it is all wrapped into a library to be used in other applications via regular packaging systems; currently, LoadIn is a part of the MyŠkoda app.

The algorithm running on the back-end was developed in Python, which has tools well-suited for working with scientific calculations and is quick to iterate in as well. For the final solution, the code gets compiled to C using Cython, which increases calculation speed several times over. The whole thing runs on Azure Cloud, as using smart scaling allows us to handle any number of users even during clearance sales at IKEA. For the trunk-packing issue we use several strategies – residual space and minimal space, both in two versions - … and brute force.


seconds calculation time


supported car models


Your app can be successful too

Next App