Full time?
Gametje has been a side project of mine since January 2023. For the first 2 years or so, I had 12-15 hours a week to work on it (+ evenings). In January 2025, I took on another freelance job alongside my regular part-time job so I have only been able to work during my evenings and weekends. Progress was slow and I haven’t been able to execute on all the ideas I have had for new games and improvements to the website. I mainly took the freelance job to earn enough money to bootstrap working on Gametje full-time. I’ve been wanting to try it for quite a while and now it seems like I will be able to do that. Starting from August, I will be able to put my full focus into Gametje.
So what’s next?
I have a number of things to work on in the next few months besides creating new games. I’ve been almost completely ignoring the business side of running a company. My marketing efforts have boiled down to a few posts on Tildes, a failed post on Hacker News that never quite made it out of the “new area”, and posting in a few Reddit threads. I also need to do quite a bit of work on the business funnel. Right now there is not much incentive to actually pay to play the games. Guest accounts currently give full access to all games with no restrictions and can be renewed without any penalty. I need to rework that a bit and provide more incentive to create an account.
Main page redesign
I’ve been working with a UI/UX designer named Bente Bak to give the main site pages a much needed facelift. The old design was functional but lacked creativity and didn’t give the first impression I wanted. Luckily Bente could help me out and steer me in the right direction. She delivered some crisp designs and we had some great back-and-forth session before settling on the final design.
Here are a few screenshots from the design she delivered (there’s way more than this!):
Integration with Discord
The original game flow for Gametje assumed players would be present in the same room or on a video call where one player shares the “host” screen. The players/host have a pre-existing relationship and that helps guide the new players through awkward “what am I supposed to do” phase when getting the game going. Without easy communication, this game flow/model doesn’t work. I wanted to enable players to play with strangers/acquaintances online but that presented a number of issues. How do you look for the game? How do you share the screen? How do you communicate with the other users?
I already supported hosting and playing from the same device without a central screen but that still required everyone to be in the same location to get it set up. I still needed to figure out how to manage the communication aspect without building my own chat interface. Luckily there was a good solution: Discord!

Embedded activities
For those of you that don’t know, Discord is a chat app primarily used by gamers. I’ve used it before when coordinating game nights due to the nice chat/voice integration. I found out recently they also offer a neat integration called embedded activities. This allows users to launch apps/games directly in their interface and join a game via a single click. It also presents notifications about new game rooms and provides rich presence offering actionable data about a player’s status within the game. They also make it easy implement single sign-on with the user’s discord account simplifying the registration phase.
Here’s a few screenshots of the interface
You can see my Discord store entry here

Discord Store Logo
Sign in with Discord
As a part of integrating with Discord, I needed to support signing in with 3rd party Identity Providers. This allows a passive registration and login to occur when the user launches the game. Users are presented with a consent dialog when trying it out the first time.

The diagram above skims over a few key points. As a part of steps 6 -> 7, I am creating a user on my backend. If the user happened to already have an account (as matched by the email), it will add Discord as an additional identity provider. If there was no previous account, it will create a new user account.
Building the backend to support this type of login also allows it to be used on the main website.

This should also greatly simplify the process for adding another identity provider (like Google, Facebook etc)
Discord Activity state
Discord provides a nice way to include a what a specific user is doing, whether they are listening to music or playing a specific game. I wanted to integrate their “rich presence” as I saw it as another avenue of discoverability. If you see your friend playing a game, you may want to join or will at least be interested in what they are playing and may try it yourself.

This gives potential joiners quite a lot of information:
- Which specific game is currently being played
- How many others are already playing
- How long they have been playing
In the end, it’s all about making playing the game together easier.
Integration challenges with Discord
All of the UI within the Discord client is proxied via their Discord proxy. This presented a number of challenges as Gametje relies on some external APIs for some functionality. Luckily Discord provides a way to use external services as long as you whitelist them and force them through their proxy.
Proxy issues
The game Snaption uses Giphy’s API to search for funny gifs when submitting images. This was broken out of the box as not only was the API call broken, the loading of the external gifs/images was also blocked. I needed to first whitelist the api call and also add patches for the different media urls.
Here’s some sample code
import { patchUrlMappings } from "@discord/embedded-app-sdk";
patchUrlMappings([
{ prefix: "/api/giphy", target: "api.giphy.com" },
{ prefix: "/media0/giphy", target: "media0.giphy.com" },
{ prefix: "/media1/giphy", target: "media1.giphy.com" },
{ prefix: "/media2/giphy", target: "media2.giphy.com" },
{ prefix: "/media3/giphy", target: "media3.giphy.com" },
{ prefix: "/media4/giphy", target: "media4.giphy.com" },
]);
You’ll need to make sure these are also white-listed in your Discord applications configuration. I needed to manually re-write the source of the images as well to force them over the proxy. It also needed to save the proxied url in the database to show again when writing captions.
All in all I really enjoyed integrating with Discord. It was fun seeing it come to life. I need to further polish it but here’s a quick look:
Discord Demo
Until next time!