Made a first version of the game with two minigames: one where you have to quickly say if an image shows a cat or a dog, and another one where you have to tell wich color a colored text is describing
Made a first version of the game with two minigames: one where you have to quickly say if an image shows a cat or a dog, and another one where you have to tell wich color a colored text is describing
I changed the end and the win screen with text animations (it gives more suspense), and since the game screen size was the godot default, I changed it for a 1920x1080 screen size
I started with the landing page to get a feel for what it would look like—I hate diving into a project by just dropping in unstyled HTML elements; it’s depressing.
You can access the documentation here.
Veeerbs is an application designed for reviewing irregular verbs and, eventually, vocabulary. In its current state, the API allows for the storage of a series of “cards” using JSON; each card consists of multiple “card_parts,” and each “card_part” comprises several “synonyms,” with each object possessing its own metadata (such as type or language). This enables dynamic, lightweight, and optimized storage of diverse data—covering both irregular verbs and vocabulary words—where each item can have multiple translations.
The API also supports the creation of lists composed of multiple “queries” used to select the cards to be included.
Authenticated users can then add these lists to their accounts to begin learning.
Once cards are added to their accounts, users can start practicing using the /user/cards/next-due and /user/cards/review endpoints.
pydantic-settings extension to cleanly parse environment variables and/or local .env files.psycopg2.I took a long time to develop this API because I wanted to build it as cleanly as possible. Consequently, every object, request, response, and field is typed and documented. Logs are comprehensive and structured, and database migrations are handled correctly.
I migrated my application to Angular 21.
I then fixed a bug that was preventing claims from loading: a change to the “offset” signal at the wrong moment was blocking change detection, so API data was failing to reach the DOM. I took the opportunity to migrate to httpResources and fixed the flawed pagination by including the page count in the request response.
I built the entire job that retrieves data from Open Library. The biggest constraint was that it had to run on my Raspberry Pis; however, the compressed Open Library dump is 12 GB (expanding to nearly 50 GB), while I had barely 10 GB of free space. Consequently, I had to stream the download of the compressed file, decompress it on the fly, parse the content, and output it into CSV batches of up to 500 MB. Then, leveraging the power of PostgreSQL, I was able to rapidly load these batches sequentially into a staging table without running into constraints. I subsequently deduplicated the data using a second table with a UNIQUE constraint on the ISBN, followed by the final table—which also featured an ISBN index—enabling searches in under 100 ms. My connection wasn’t very reliable, and I faced major issues with the download constantly dropping, so I had to rig up a system to maintain the stream despite these interruptions.
I also created the GitLab pipelines that build a versioned Docker image (using semantic versioning) of the application.
To add Mr. White, the role system had to be completely refactored. Previously, it simply assigned a different word to a random player. I switched to a much more suitable system, allowing the host player to choose a custom player distribution, with the caveat that it must be valid (for example, there must be more or the same number of civilians as undercovers and Mr. White). For the mobile app, a cool selector with sliders was needed, where the min, max, activated, and divisions had to adapt in real time to the constraints of the number of players and other selected values. To accommodate these new inputs, I also had to rebuild the host waiting page from scratch. I took the opportunity to tweak a few things and fix some bugs. And I realize that my file that manages multiplayer on the mobile app is an unreadable monster of more than 800 lines, but it’s my first flutter project so I don’t really know how to organize this big bag of interconnected knots… Anyway, I’m having fun.
I have fixed some things : an infinite turns loop when more than 3 players join the game via network multi, a button showed to all players instead the host, a bad message, now builded directly by the api, and some typos
I have started to adapt the moderators’s account system to all users. I have added an “My account” that display the id and the username.
I have also modified the client api service to use new angular’s httpRessources.
Added caching to plugins loading
Remaked local mode menu
Creating my first Flutter app, a free version of Undercover