April 23, 2024

Here’s Lab Surprise, a game bundled store built with just 2 Google snowcloud functions (and a built-in payment service API!).

Idea: Get a surprise bundle of 3 virtual reality apps of 19 games (the more you show up, the lower your discount will be). 19 Select 3: 969 different packages, with 4 possible discounts for each package


In mid-March, after a successful first-of-its-kind standalone VR bundle with 12 games, the idea of ​​Lab Surprise as a comprehensive way to give equal opportunities to our now 14 completely different games, in terms of price, gameplay, etc. Came to the fore. Viewed and purchased by all players.


We couldn’t find any platform or store that would allow us to get the fusion and amazing elements we wanted to get (we searched!), So; I made it over a month, group Tested and repeated with


I set up the endpoints of my API with Google Cloud Functions, stored data using Firestore, and used the Paddle API to incorporate payment integrated with programmatic pricing. The web frontend is very simple, a dash of basic HTML, CSS and JavaScript just requests from these custom APIs and changes the elements as needed. I’m old and I haven’t worked with the browser in a long time, so I went straight to jQuery for DOM manipulation and JSON requests and, well, it works and the jQuery API still looks good.

Now for the dirty and embarrassing secret: the first version of Custom Draw and Revival Backend was built with Google snowcloud Spreadsheets and Application Script. It worked great for the string ball and glue which it was! Migrating to cloud functions has eliminated the sheer code of many sheets as well as made applications faster. Apps scripts are really fun to use and the web editor itself is really good. Sheets are also a great way to quickly sketch and prototype your data structure. GitHub even has a hack/chrome extension to version your app’s script. But in the end, it’s not good enough, and it feels a lot heavier than cloud functions.

Tip: If you’re new to cloud functions, use Cloud Shell, it started me in a minute without installing anything on my local machine.


What are the parts that make it work?

An important part of the flow is the pedal snowcloud and the dynamic use of the pedal API. Paddle is a record trader and manages taxes globally, which would be a nightmare to handle.

We are using the fact that Paddle can automatically distribute sales between sellers so that each pack can send money instantly to each developer’s seller’s account, calculating the distribution for each pack. Do That means we had to pedal all 19 developers on board in record time. It was a brand new use case for pedals, and they were very open and helpful about it.

Technically, Lab Surprise consists of only 4 parts, all exchanged and paired via web APIs:

  • Web page itself, front end (doesn’t really work much, just updates the graphics and price on the page based on the package and apps)
  • Draw and display custom backends (a cloud function that draws random surprises from 3 games, updates the appearance of surprises, and returns a link to price, discount, and payment)
  • Paddle service (Paddle does a lot here: payments, reports, tax remittances, sending keys via email that we give to buyers, even first-class support)
  • Custom key enforcement backend (a cloud function that checks whether keys are available and pedals them)


Custom Backends uses some collections and subgroups in the Google Firestore: Games, Promotions, Keys, Surprises … The Firestore API isn’t perfect, but it’s simple and well documented.

Here are some other custom admin functions: a function that takes care of adding a batch of keys to a given game (with a very simple format for developers to use), and for promotion. A private function for creating packages.

I’m glad I didn’t try to go the way of setting up a traditional one-stop web app.

Snowcloud features force you to think decapitated (even if there are multiple ways to combine them in the data) and allow easy upgrades and exploration at this stage. For example, it is very easy to implement. tar Only one variant of the draw function to test new functions.

There are also benefits to thinking API first. I’m a very senior creative and prototype, and I started programming when I was 9 or 10, but I’m not a commercial developer. Focusing on the relationships of the parts, the API-based design is helping me a lot in my architectural design.


Upgrade Puzzle

This can make decoupling updates a multi-step process: Shortly after the release of Lab Surprise, I had the Draw function update the game IDs first on the Pedal Payment Link snow beaver creek and then on the Pedal Payment for our complementary function. Friday night funkin unblocked games 911 was To update this passing message without interrupting anything and without interruption, I just couldn’t change both functions to pass the new message, because it caused some buyers to switch from the old version to the newer version. Snowcloud move the message and then your message was not received. Game keys.

First I had to accept the complement function of both old and new message types (and now in a more extensible way). You can then create a new version of the Draw function, just pass the new message format, test it with the Live Production Completion function, and deploy it after testing everything. Finally, I can go back to the compliance feature and remove the inheritance code.

If both parts were combined in one app, I would be able to update them at the same time. But in many cases, you are not controlling the speed of updates in some parts of the system anyway, for example, if you have a client application that your user downloads. This was an interesting update tutorial, which reinforced my thoughts on decapital updates: we will have similar issues with our Pico Pico VR game, and such additional updates are a way to spend most of our time. May be


What’s Next?

The system behind Lab Surprise is designed to make it really easy to add new games to the walking Lab Surprise – it was a huge disappointment while waiting for the app lab pack when the developers asked us to join. Did not have to say. (Because Itch’s Coop Pack system works), so this time we wanted to be able to say yes!

We managed to add 5 more games in the middle of the lab surprise without any problems or interruptions. We just created a new promotion and switched to it.

The way we built it is also easy to evolve: we can add all the paid app lab games if their developers are interested. We can add Official Quest Store games for a period of 2 days as a special event … We can create a version with 6 games, or 20, or just 1 in Surprise.

Commercially, we’ve gained some autonomy in experimenting with marketing our applications. And I think it’s good for the whole indie VR ecosystem because it shows that we don’t have to wait for stores to be ready, we can build our own marketing experiences.


Okay, But Why Build A Surprise Machine Instead Of A Classic Pack Shop?

To provide gamers with a way to discover and gain opportunities, as well as indie developers collectively, it’s important to show the entire lineup of games, not just one or two games that they might try. Can’t even think about

As our group grows snowcloud, we need to find ways to reach players who do not exclude or sideline one developer or another. We don’t need to copy what others are doing, we need to find new ways to market and sell our games that reflect our own position in the VR and indie game market.

For more information, please visit sbxhrl.

Leave a Reply

Your email address will not be published. Required fields are marked *