About me

Hey !

I'm Thibault Mousset, a Software Development Engineer ! Welcome to my Portfolio 🙃

What i'm doing

Latest News


Minecraft DBD Plugin

Dead By Daylight in Minecraft !

I recreated Dbd in Minecraft as a plugin for 3 months

Oserv Esports valorose banner

Valorose Tournament Finished !

We helped raise 5200€ for research against cancer !

Justwatch Streaming guide logo

New adventures await at Justwatch 😊

I've joined their backend team in September 2024.

Resume

Experience

  1. Software developer at Justwtach

    Permanent Contract

    Now - Sept. 2024
    • Backend Developer

    • Databases Migrations/Management

    • Deployment | Monitoring | CI

  2. Software developer at Sopra Steria

    Permanent Contract

    Internship

    April 2024 - Sept. 2023
  3. Quality Assurance at Feezless

    Internship

    2021 (3 months)

    I hunted down bugs on their website.

Education

  1. ENSEEIHT Engineering school [ Toulouse ]

    2023 — 2020

    Software develoment specialty. Class representative 3 years

  2. Janson de Sailly - Preparatory Class

    2020 — 2018

    Math, Physics and Engineering

Associations

  • SGN

    Oserv Esport

    Content creator and Tournament organizer.

    Oserv Esports is an Esport Org.


  • SGN

    Student Gaming Network

    Caster tools developer, content creator and Tournament organizer.

    The SGN is the federation of French student esports associations.
    We organize several national tournaments and actively promote student esports.


  • TVn7

    TVn7 Video Production

    I took part in the production of around a hundred clips (editing/writing/directing/acting) for private companies, events, my school and its students.

    TVn7 is one of the biggest french student video association.

    I filmed live events, covered events, but principally made comedy videos. Here's a sneak peek at some projects I did :




  • Net' Entraide

    Net' Entraide

    Treasurer in 2017.

    We provided tech lessons for elderly people each Saturday.
    The association ceased to exist in 2022.


Skills

  1. Programming

      I've used around 20 programming languages (Python, C#, C++, Java, HTML, TypeScript, ...) during my studies and personnal projects.
    I'm most proficient in C#.

  2. Game Engines

      I'm the most proficient in Unity and learned everything by myself.
    I've followed GameDevTV courses to learn UE and started with Pygames, Stencyl and Intersect Engine.

      > GameDev TV Certificates <
  3. Android Studio

      Learned at my Engineering school, used in  Sopra Steria Projects.

  4. Content Creation

      I participated in the writing / directing / shooting / editing of about a hundred clips (humorous, recaps, interviews ...) [Premiere pro, After Effects]
    I operate a Twitch channel since 2017.

Certifications

  1. Unreal Engine C++ and Multiplayer Master (150 hours)

      > GameDev TV Certificates <

  2. Linguaskill (English C1+)

      > Linguaskill Certificate <

Languages

  • 🇫🇷   French
    - Mother tongue
  • 🇬🇧   English
    - Fluent
  • 🇧🇷   Portuguese
    - B2 Proficiency (2.5 years lived in Brazil)
  • 🇪🇸   Spanish
    - B2 Proficiency
  • 🇩🇪   German
    - B1 Intermediate

Portfolio

Associations


  I love taking part in associations.

  It allows me to get to know other people and develop skills that you wouldn't normally have if you were only following a conventional route.


The SGN (Student Gaming Network) is the federation of French student esports associations.
We organize national tournaments and actively promote student esports.

Gamer's Assembly 2024 :

  I was present at the 2024 Gamer's Assembly edition, as Communication manager for my association.

  I created assets for the streams, relayed stream events on social media, recorded/edited interviews of players :

Picture of two boys in front of the Gamer's Assembly central stage.

Grosse Ligue :

  The Grosse Ligue is a National student Competition, in partnership with Riot Games and University Esports.

  I helped there as an Admin and produced one interview of finalists :

Grosse Ligue Logo

  I created a Discord Ticket Bot for the competition, click on the image to get more information :

Discord bot banner
Cast of a Valorant Game with Overmaster during the VOTF

Casting / Observing :

  I transformed my passion for games like Counter-Strike / Valorant into content creation.

  I started casting games in early 2023 with a Sopra Steria internal tournament and continue to accept the opportunities that I am presented with.

  I've been able to cast/observe games of tournaments like the VCL (Up & Down), Game Changers Qualif., Valorant Open Tour France, Grosse Ligue...





Oserv is a French Esport Association based in Toulouse, created in 2015.

I am part of their WebTV, casting/obsing Competitive games of their rosters.





TVn7 is the video association of my engineering school and is also one of the biggest student video associations in France.

I took part in the production of around a hundred clips (editing/writing/directing) and some event coverage (Inter Agros 2022 & 2023, Prom, etc.)

Inter Agros 2022 & 2023

  The Inter Agros events are student sports events that occur each year throughout an extended weekend and bring together around 2000 people.

  I was there with the TVn7 crew (~ 15) to produce daily content shown each night to the participants.

  You can access all the created content here on the right ⏩ ⏩

Inter Agros Bordeaux logo
Bordeaux 2022
Inter Agros Nancy logo
Nancy 2023

Graduation Prom

  I was tasked to film the graduation prom of older students to make an after-movie.

  It's quite rewarding to take part in those projects as it's a way to freeze a strong memory in time for the graduates.

JTs

  Most of my work at TVn7 consisted of creating comedy clips for the students.

  I love imagining and writing those and being able to produce them from start to finish with the other members of TVn7.




Net'Entraide is a local association (~ 10 persons) that aims at teaching tech to elderly people.
The association ceased to exist in 2022.

  Every Saturday we used to get together to talk about a specific subject, bringing awareness on do's and don'ts on websites, and how to optimize mailboxes, ...

  I became the treasurer in 2018.

Net'Entraide members meeting
Laval Virtual logo

Laval Virtual 2017 & 2018


  We had the opportunity to have a booth at the Laval Virtual Show every year back then, thanks to the generosity of the organizing staff.

  We would animate livestreams about tech and bring awareness on what was the aim of our association.

Justwatch Projects


  I currently work at JustWatch as a Software Engineer in the Backend Team.


Backend Developer

  I worked on the Golang backend of the website, used by millions of users every week. We fetch data from our own databases, a dedicated content internal grpc API, and other external APIs and services.

  This data is then served to the web/mobile/tv frontend via a graphQL API.




Devops

  We are responsible for the deployment of our services, thus having to monitor the health of our servers and services, and to ensure that they are running smoothly.

  For that we use Grafana, Kubernetes, Google Cloud Monitoring and home made tools.




Projects

  Between the different small daily tasks, I got assigned different bigger projects :


Repair the TV Control from Mobile

  For quite a while the ability to launch a movie on your TV from the Justwatch App on your phone was not working. I was tasked to fix it.

  I got some explanations to understand the old code, and in the end refactored everything, learned about graphql subscriptions, sat up a new Redis Instance and got it back to work again, with some more logging to measure how much the feature was being used.


Replace all the Caches

  I was tasked to change all cache systems that were relying on ScyllaDB, to use Redis instead.

  The first step was to identify all the repos that were using this Scylla cache. I sat up a grafana dashboard to monitor the cache hit/miss/set rates of the caches, to see how it was used in production.

  I then started, repo by repo, replacing the cache client, while keeping everything else intact. This was sometimes tricky as logic could be nested inside the client.

  I tested the repo on stage when possible, and then monitor extremely closely when releasing on stage, comparing the scylla grafana Curves with the Redis ones.


PR Canaries

  Frontend at Justwatch is in tight contact with QA, so they do a lot of testing. To facilitate testing, they use canaries, which are prod environments used for testing :

  •     • A feature on a prod like-env.
  •     • A feature on a small amount of users.

  PR Canaries are meant to have one canary for one Pull Request. Now, Frontend Devs can create Canaries by only clicking on a link that appears on a comment everytime they create a PR.


  For this project I had to :

  •     • Edit/Create Kuberneters deployments/services/configmaps ...
  •     • Make Backend, Frontend code edits.
  •     • Edit the global webrouter of the website to create canary deployment links.

  This was a challenging project as I had to learn a lot about things that were not documented, but after a lot of testing it clicked.

Minecraft Plugin


  How about recreating Dead By Daylight in Minecraft as a plugin ? Sounds like fun let's do it !


  This project took me 3 months, working on my free time at night and during weekends.


Game Design

  The first challenge was adapting the game mechanics that are present in Dead By Daylight to Minecraft. We need them to :

  •     • Be new intuitive mechanics.
  •     • Have a fun and balanced gameplay.
  •         (Sounds simple but requires quite a lot of playtesting and asking around)
  •     • Make the minigame easy to install.
  •         (In my case there is no installation as it's a server side plugin)

  On rule I tried to follow, was to create new mechanics that incorporate themselves as much as possible into the native Minecraft gameplay. This is crucial to :

  •     • Improve responsiveness
  •     • Make the game more intuitive for regular Minecraft players

Example :

I replaced the machines in the original DbD game with noteblocks. Why ?

  •     ➔ Noteblocks natively allow the user to right click on it and do not open any menu.
  •     ➔ They produce a sound when right clicked, that you can easily edit using a resource pack. Which is client sided.

 This means that even if the server lags a bit, the player experience of interacting with the noteblock will be smooth.


List of ideas for Minecraft DBD plugin

I then started writing all my ideas into a list, and ordered them by priority.




Programming

  I used the Paper API with Java to create the plugin, it has a lot of support, noice.


  As always when starting a new project, I do a test project where I try to implement what I see in tutorials. I created test commands, event listeners ... And when I felt comfortable with the API, I started the real project.


  The project architecture is as follows :

  •     • A main class that initializes the plugin and handles its lifecycle.
  •     • Static classes, that act as managers for specific game mechanics.
  •         Ex : A TeamManager class to handle all team-related logic. A MachineManager class to handle all machine-related logic, etc ...
  •     • Event Listeners, that listen to player actions and call managers logic accordingly.
  •     • Helpers classes, that provide utility functions and simplify common tasks used in many places.

Minecraft DBD Plugin code architecture


Hosting

  I had an old unused laptop, that I converted into a Ubuntu server. I opened one of its port to the world with the service

playit.gg

  That way I control almost everything and it's easily accessible 😎




All the hats you can wear in the game
Head cosmetics
Hunter appearance
Hunter appearance
Hunter abilities
Hunter abilities
Survivor abilities
Survivor abilities
Hat on player
Cosmetic on a survivor

Game Art

  I suck at making pretty things but I still created a dedicated resource pack for the mini game.

A resource pack is a way to overwrite on the client, the default textures of the game.

I just cherry-picked textures of other Resource packs found online (legally of course) into mine.



This Resource pack is pretty important to distance the players from the original minecraft experience.


  I also scoured across the internet to find maps that would fit.

  I want them to be not too big, have closed space, a scary atmosphere, and not too much verticality.


  This one made by Nevas Buildings was perfect for the job.

Youtube Downloader


  I was bored one weekend, and asked myself the question, "How do Youtube/Twitch/Soundcloud downloaders work ?"


How to download a video ?

  First idea, let's investigate how our own browser reads youtube videos. I quickly learned that the video is streamed in chunks, and that the video is not stored in a single file / api call.


  So can we try to download the video chunks and reassemble them ? 🤔
→ Seems kinda hard, so someone has probably done it before hahaha


Indeed! Meet :

https://github.com/ytdl-org/youtube-dl

  This is a CLI tool that allows you to download videos from Youtube. We'll use it as base for our project.


How will the user interact with the tool ?

  The easiest way is by creating a website, with an input field where the user can paste the link of the video he wants to download.

Youtube Downloader website

(I'm not a frontend dev, two centered buttons for me is a masterpiece already)


  I started working on a django project, but then realized I did not need all its complexity and that a simple Flask app would suffice, as services that offer to download videos from youtube are not welcome by google, so hosting it on a server is not an option.


So the flow of the app is as follows :

  •     1) Ask user for url input (parse it and all, to make sure it's a url and not a weird string)
  •     2) Download the video via the youtube-dl CLI Tool into a folder.
  •     3) Create an entry in a simple database (shelve) to associate a uuid to the video file.
  •     4) Redirect the user to a download link once the video has finished downloading server side.
  •     5) Delete the video file after a certain amount of time (to avoid filling the disk with videos).

Quick enhancement with the google API

  I wanted to add the ability to :

  •     • Search for a video by its title, and not only by its URL.
  •     • Give the name of the downloaded video to the user.
  •     • Fill the metadata of the video file (title, artist, album, etc.)

  With the

Youtube API

, this is all possible. However, I stopped working on the project before implementing this fully.

Discord Tournament Bot


  For the Grosse Ligue 2024-2025, a competition in partnership with Riot Games, we needed a way to handle players questions with tickets.
  I created from scratch in Python a self hosted custom Discord bot for this.


Creation ticket view
Ticket creation
Creation ticket form
Ticket creation Form
Ticket Example
Inside a ticket

The players View


  Players can open different kind of tickets and a dedicated private thread is created for them.

  Admins can then join this thread.

The Admins View


  Admins can see every created ticket and jump in to help players.

  All solved tickets are saved on a separate channel if needed.

Admin View
Admin View
Archived tickets view
Archived tickets
Stats view
Ticket Stats

The Advantages of a custom Bot

  •     • Adaptability to needs
  •     • Players Data safe on our server
  •     • No Extra Cost

  The only downside is that it needs to be thoroughly tested before being used, to account for every possible way players will try to break it 😄


Nerd details

  •     • I implemented a local database using python shelve library. Easy to use and fast.
  •     • The discord bot can only operate in a list of specified servers. (So no unintended / unmonitored use)
  •     • I used the python library discord.py to control the bot
  •     • It's hosted on a vps, using pm2

Dynamic Overlay


What's the point of a Dynamic Overlay for Valorant ?

  When you stream a Valorant competition, you cannot show everything that happens during each round. The purpose of adding another overlay on top of the game is to help the audience of Valorant tournaments understand all the action that happen each round.


Without Overlay

With Overlay


  The biggest challenge was to find the informations of the current game, we tried :

    •     • External APIs (Community & Official Riot)
          • Internal APIs
          • Memory Reading (Overwolf)
          • Image anylisis (Text Recognition & Image Comparison)

  • How is it displayed ?

      The information gathered is sent in json format to a locally hosted webpage that creates the overlay. With Overwolf's app framework, the webpage could be displayed directly on top of the game.


    Sopra Steria

      I worked at Sopra Steria from March 2023 to May 2024, did my end-of-studies internship there, and got my first permanent contract.


    April 2023
    Fauxpilot
    Jetbrains Extension (Kotlin)
    May 2023
    Omniverse
    3D Engine (Python)
    July 2023
    Airbus W@y
    Backend Mobile (Kotlin)
    Sept. 2023
    Aero Excellence
    Django backend (Python)
    Airbus logo

    Airbus Projects

      I worked for Airbus in two different projects at Sopra Steria :


    • • AeroExcellence : (Python, Django)

          This is a site for GIFAS subcontractors to get certifications.
      I worked on the django backend on tasks like exporting the database in csv files, new API calls...


    • • W@y's mobile app : (Kotlin, Android)

          This is an internal Airbus application designed to manage the supply and delivery of aircraft parts.
      In charge of the interactive map and users role display screens.

    Omniverse - Paris Air Show

      The project consisted in simulating a drone factory line in Nvidia's new 3D Engine, called Omniverse. (Python)

      I was in charge of coding the movements of the multiple operating robots (moving/assembly of spare parts ...)

    Omniverse logo
    Fauxpilot logo
    FauxPilot Logo
    Fauxpilot extension screenshots
    Intellij added features
    My extension's simple logo. It's a smile on a blue background.
    My Intellij Extension's logo

    FauxPilot

      I tested the capabilities and limitations of a tool similar to Github Copilot for possible implementation in the company.

      I also developped an Intellij test Extension in Kotlin to test the tool in real conditions. It had the following features :

    •    • AI line / code block autocompletion (triggered with customisable hotkey / context menu button)
    •    • A enable / disable extension tool button
    •    • A settings page

    Multiplayer 2D Game


      During the 2022 summer, after learning the basics of multiplayer programming with GameDev.TV, I built the same 2D Multiplayer game prototype in Unreal Engine and Unity.


    My multiplayer game aspect

    There are 2 players teams: The Survivors, who have to mimic the bot's movements and accomplish objectives, and The Hunters, who try to unveil the Survivors.




    Intersect engine

    Challenges with Unreal Engine (1 month)

      • Unreal Engine can produce 2D games with Paper2D but it's not made for. (Pathfinding problems, ...)
      • How to make the lobby & invites system ? (NAT Punchthrough)
    I implemented the Steam SDK and Epic Online Services but both require a fee. I only succeeded by opening my box's ports.
      • Inconsistent hot reload.




    lobby screenshot

    Screenshot of the lobby, with 2 players, and a custom console on the top left.




    Intersect engine

    Challenges with Unity (1.5 month)

      • Debugging multiplayer's code errors → Deployment of on-screen client consoles
      • Passing the information from one scene to another.
      • Very little documentation of Unity Relay was available at the time.




    What did I learn from this ?

      • The basics of online programming (Client/Server hosted system) Replication (Which client owns what ?) •   • Insight into Steam and Epic's tools for developers. (Steam SDK & EOS)   Never trust the client, Iykyk 😉•

    PDMO

      Pokemon Mystery Dungeon Online is a pokemon fan game based on the Pokemon Mystery Dungeon Serie from Nintendo™.
      I randomly stumbled upon this project and asked to take part in the development of it.


    Pokemon Mystery dungeon Online Banner Artwork

    Intersect engine

      The game is built upon the Intersect engine.

      It's a 2D multiplayer game engine specialized in top down square grid base movement. My job was to add new functionnalities to the open-source engine.


    Main Contribution

      My biggest mission was to implement gamepad controls which aren't native.

    I had to :
      • Analyse the code of the open-source engine
      • Find C# libraries that support as many gamepads as possible
      • Poll the community to find the best layout to default to
      • Implement intuitive UI to change keybinds

    Pokemon Mystery Dungeon Online Gamepad feature

    GameDev TV

      During the 2022 Summer, I spent 2 months learning Unreal Engine by following courses on the GameDevTV website.
      I've used C++ and Blueprints, and discovered the basics of multiplayer programming.


    Linguaskill

    Linguaskill test, by Cambridge :