Průša Research

Prusa Research

Global portal for sharing 3D printer models

Prusa Research global portal for 3D printer models and print files sharing

The 3D printer market is growing fast, and Prusa Research printers are one of the most sought after products in the industry due to their open hardware concept. The company sells thousands of new printers to more than 160 countries worldwide every month, and its customers form a powerful community that devises, designs and prints a huge number of 3D objects. The objects are printed using design files (most often in STL or 3MF formats) and “instruction files”— which specify printing instructions for a specific 3D printer. These “instruction files” are referred to as Gcode files, and users create them in a specialized software. Prusa Research now comes with a portal where the files can be shared easily. Users can easily download them to the SD card or print them without complex modifications.

Besides being a file-sharing platform, the new portal acts as a place to bring together a community of 3D printing fans, let them exchange tips and ideas, share models, or simply inspire each other. The user-centered design also greatly helps the end-customers during their first steps with a 3D printer, encouraging creativity, sharing of their work, information exchange, and overall interaction among the customer community.

“Unlike other portals dedicated to sharing 3D design files, users of PrusaPrinters do not have to work with the downloaded file and can print directly. This will make it much easier for many people to get into 3D printing”.

Martin Bach, Content Director at Prusa Research

Challenges

designing a service for a numerous global user community

As with any major project, a thorough technical analysis and detailed architectural design preceded the implementation. Several key areas had to be addressed. For example, scalable robust architecture and adequate infrastructure design to ensure maximum availability and minimum response time for numerous customers from the US, Europe, Asia and Australia. The system design also included load balancing mechanism that can handle power peaks with hundreds of thousands of requests per hour, especially during news announcements. Another important part of the system was the design and implementation of a unified authentication mechanism for logging in across several existing services, or displaying a large number of public user profiles on a map.

Scaling and microservices

architecture in DNA

From the very beginning, we focused on the need to build a dynamically scalable system that could grow to millions of users in the future. We chose an architecture that uses AWS and operates primarily in European data centers (given the company's headquarters). As the project grows, it is easily extensible to other regions. In addition, the entire system uses a large number of external services from Amazon, Google and others to provide the appropriate flexibility and facilitate a range of scalability operations.

Gcode: ‘recipes’ for printing 3D models

One of the main features of the new service is an option to upload design files of 3D objects. The most common format is STL, however it does not contain printing instructions for the particular model of a printer, so the files must be processed manually before printing. That is why the portal allows direct uploading of Gcode files for each type of printer. These files require no further modifications and the model can be printed immediately. This greatly increases the accessibility of 3D printing for general users. A model shared by a user on one side of the world can be printed on a 3D printer on the other side of the planet literally in minutes. Thanks to the new service, 3D printing fans can follow famous designers in the industry or use the internal marketplace to sell their 3D designs in the future.

Precise filtering options

Filter 3D models by compatible printer model, printing material, printing time and more

Django, GraphQL and Angular

As a software basis for the back-end of the application, we chose our favorite Python—the proven Django framework, Postgres and highly regarded GraphQL for communication between the front-end and back-end. Although in 2018, this API query language was not so commonly used, it turned out to be the right choice as the number of projects built this way is growing rapidly. Another important part of the system is Elasticsearch, which we have been using for a long time for fulltext search and server side caching. Finally, the front-end is driven by modern Angular framework from Google developers.

We used AWS Lambda to generate picture previews, as it is considered to be a “best practice” when it comes to optimizing performance and is used by many other services such as Slack. To reduce response time, we used CDN service AWS CloudFront to load images on the front end. AWS CloudFront caches images so that it is not always necessary to reach AWS S3 (where the images are stored), resulting in significant response time improvement.

Server-side map marker clustering

Displaying tens of thousands of user profiles on the map was not an easy task, especially in terms of maintaining speed and fluency. Eventually, we used a Postgres k-means algorithm on GPS coordinates to solve the problem, and implemented our own clustering function on the server rather than in JavaScript (as is often done).

Zip code 'issue'

During the beta phase, we encountered an interesting issue regarding user address anonymization. The original idea was to display a location based on a user's zip code. This later turned out to be inconvenient, because in some parts of the world (e.g. Great Britain, Canada or Singapore) the zip code entry might display user's home too accurately (which was undesirable). Anonymization and a certain “blur” of the individual users’ position were incorporated into the design.

“PrusaPrinters.org is our largest web project to date. We primarily focus on hardware and software development - which is why we decided to develop the website externally, in cooperation with COEX. After almost two years of cooperation, we consider this decision very positive. COEX approaches development proactively and creatively, which corresponds to the style of our work, where processes and administration are never more important than the outcome itself. The results of a survey that we conducted among users a few months after launch clearly demonstrate that we and COEX did a good job together. It also means that we still have lots of hard work ahead to meet the high expectations.”

Martin Bach, Content Director at Prusa Research

Launch

The public launch of the system saw huge interest from the 3D printing community. Besides optimization and performance scaling, it was also necessary to optimize the mailing system in the first days after the launch. The original service had problems with sending latency, which was particularly critical in the case of registration e-mails. In a matter of days we had to reach for a new supplier who managed to deliver tens of thousands of emails much faster and more reliably.

Thanks to the popularity of Prusa Research, thousands of people registered in the system within a few hours of the launch, and gradually a large part of the customer community has started to use it. After the first months of operation, the service has reached over 100k monthly active users and over 10,000 3D models have been created & uploaded.

For the future, various extensions and additional features are planned, which will be implemented based on the user feedback.

100k
visitors
per month
34k
users
on the map
12k
3D prints
available online

Browse 3D models at

Prusaprinters.org

Looking to create a similar project? We can make it happen!

Get in touch