Ayfri

avatar

About me

Hi, I'm Pierre Roy, a full-stack and AI developer based in France, holding a Data Scientist Master's degree from Ynov Aix.
I build web products with Kotlin, Svelte and TypeScript, ship AI features in Python, and maintain Kore, the Kotlin library used to generate Minecraft datapacks.

Introduction to programming

2014

I started programming in 2014 by attending a conference about programming in a library.
I first tried some beginner projects in Python with a book that my dad bought me, did some beginner projects, etc.

After that, I created random projects I found on YouTube, such as programming a Minecraft-like game in C++ or making some little games in Unity.
However, I found myself mostly copying the tutorials without attempting to create projects on my own, and therefore didn't have a deep understanding of what I was doing.

PythonC++Unity

iconProcessing

2015

In 2015, I created my first project with a Graphical User Interface using the Processing software and programming language.
I heard about this program from watching videos from The Coding Train. I created a lot of little experiments using this library and learned some interesting things about 3D graphics, how it works, how to optimise it, etc.
My biggest 3D experiment was a Minecraft-like game, and my most significant program with Processing was a tool to convert an image into Minecraft Pixel-Art using only blocks from Minecraft as pixels.

After some years of making Discord bots in JavaScript, I heard that a library in JavaScript existed that was exactly like Processing, p5.js (which was created by the same foundation), and used it for some little projects, even created a port of the Minecraft-like game in TypeScript.
But it was too simplistic and not expandable enough for me, so I looked for another library to make my own games with more depth and customization.

PIXI.js was the library I stumbled upon, and I created a few projects with it for a long time. My first big game with it was a 2D Minecraft-like game (again yes hehe), then a 2D Portal game experiment, and later a rewrite of that 2D Minecraft game in Kotlin, Minekraft-2D.

Processingp5.jsPIXI.jsTypeScript

Discord bots

2018 - 2019

After creating my own Discord server for my community from YouTube, I wanted to create a Discord bot. So I created one in JavaScript using Node.JS in early 2018 by following tutorials, and CommunAyBot was born.
Back in the days, it was not that common to create a bot for your own community, and Discord was not so reputed. Because of that, there were no great tutorials. I got a lot of help from a Discord server named Obelia Dev (which doesn't even exist today), my friends Ghom, Loockeeer, Felons, and some others helped me a lot to understand and create my bot.

About a year later, I was pretty good at creating a bot, but I realized that my project was kind of... ugly. So I recreated it, AyBot 2 was born in early 2019. It was pretty clean, and I wanted people to use my bot, so I changed a lot of the code, so it was working on multiple servers with configurations, etc.

At the same time I was, and still am, an administrator on a big Discord server about sharing your server or website, together with another administrator, Antow, who had his own bot. We were both passionate about astronomy, so we merged our two bots into Galileo.
That was the end of this era for me: after about two years of writing almost nothing but Discord bots, I ran out of motivation for them and moved on to other things.

JavaScriptNode.jsDiscord API

iconArduino

2018

At my high school, for 3 years, I used Arduino a lot, only creating big projects in the last year but still. It let me learn a lot about low-level programming, C++ basics and microcontrollers.
By doing my own research, I learned a lot about C++ compilation, assembler, reverse engineering, optimization and other low-level subjects. I even tried writing a bit of x86 assembler.

Back in 2015, I followed a tutorial to create a Minecraft-like game in C++ using OpenGL and a bunch of libraries.
Coming back to that project years later, fixing its issues and finally understanding the code taught me a lot about OpenGL and low-level graphics processing.

C++ArduinoOpenGLx86 ASM

iconMinecraft

2018

Minecraft is my favorite game of all time, I started playing it back in 2010, I know it by heart.
I heard about it randomly on an old computer blog my dad was subscribed to, where an article spoke about "this new game with an interesting concept".

Since I own the game, I played hundreds of hours in Minecraft, created numerous maps, technical maps using command blocks, datapacks and mods. I have been creating mods since around 2018, in Java with Forge, with Fabric since 2020 and in Kotlin since 2021.

I know a lot about the concepts of Minecraft and how they are programmed, and this is what motivated me to create a Minecraft-like game 4 times, getting closer to what I want and to the performance such a game needs each time.

JavaKotlinFabricForge

iconPost-Bac and Ynov

2021 - 2026

After graduating from high school, I got accepted into a private computer science school named Ynov, on the Aix-en-Provence campus, and I graduated from its Data Scientist Master's programme in summer 2026.

The first years covered GoLang, Python, pretty complex C++ and OOP, network basics, REST APIs, front-end work and databases with MySQL, through a lot of projects: little training programs, websites with and without an API, and an entire forum. I greatly appreciated GoLang's GoHTML templates, C++, and my teacher, who I discussed a lot with.
The last years went towards data and AI: statistics, machine learning, data engineering, and a research thesis to finish the degree.

The school also pushed me into things I would not have done alone: team projects with real deadlines, two internships, and the research project that ended up shaping my career.

GoPythonC++MySQLMachine Learning

iconBlueFrog

Summer 2022

My school required a 6-week internship in any company to get a first professional experience.
I got in contact with BlueFrog, a company creating websites, and after some interviews got accepted!

I learned PHP and WordPress and created a few websites and plugins during those two months. It was a great first look at the difference between a personal project and a real one, and at a developer's everyday job.

PHPWordPressCSS

iconKore

Since 2022

In November 2022, during my second year at Ynov, I started a Kotlin library to generate Minecraft datapacks without writing a single JSON or mcfunction file by hand.
It was named Datapack-DSL back then, it is Kore today, and it is the project I have maintained the longest.

The core DSL covers every command with all its subcommands, selectors, NBT tags, chat components, and every data-driven file of the game: advancements, loot tables, recipes, world generation, plus the lists of all registries.
Around it, the library is split into modules published on Maven Central: oop for gameplay abstractions like teams, boss bars, scoreboards, timers and spawners, helpers for raycasts, text renderers, scoreboard math and VFX, and bindings to import an existing datapack and generate type-safe Kotlin from it.

The project grew way past the library itself: a Gradle plugin, a KSP processor, a project template, a documentation website built with Kobweb (the same framework as this portfolio), LLM-friendly documentation and a skills pack so AI agents write correct Kore code, and the ability to generate a datapack as a mod for Fabric or NeoForge.

It also stopped being a solo project: Kore has its own #kore channel on the Kotlin Slack, outside contributors, and people publishing their own libraries and datapacks built on top of it.

KotlinDSLGradleKSPMaven Central

iconCat'aClysm: Claw Of The Dead

Since 2023

Ynov added a project system named YBoosts at the end of 2022, where students from the first and second years build a project in a team of 7 or more.
We created a team of 7 named Defensive Realms and made Cat'aClysm: Claw Of The Dead, a 2D tower defense where cats hold a city against a horde of zombies, using Godot 4.
It was my first experience with Godot, and I still prefer it over Unity by a wide margin. We drew our own sprites and animations, and finished a first alpha at the end of May 2023.

Then we threw that codebase away. In October 2023 we restarted the game from scratch, with a bigger team (around a dozen people over time) and a much larger scope. Everything is data-driven now: levels, waves, towers, traps and enemies are described in JSON files, so the game can be balanced without touching the code.

It currently has 8 levels split into two story arcs, towers and traps with their own upgrade paths, 17 optional per-level challenges, an armory progression tree unlocked with stars, a dialogue system, English and French localisation, and an in-game debug console with its own commands.
It is by far the biggest team project I have worked on, and the one that taught me the most about keeping a codebase readable for people who are not me.

Godot 4GDScriptTeam project

iconPokéCards-Collector

Since 2023

PokéCards-Collector started in October 2023 with friends: browse the entire Pokémon Trading Card Game catalogue, English and Japanese, and keep track of the cards you own and the ones you are still hunting.

It runs on SvelteKit with Svelte 5 runes, Tailwind CSS 4 and TypeScript, served from a Supabase Postgres database on Cloudflare Workers.
Cards, sets and prices come from TCGdex and Pokédex entries from PokéAPI, pulled by a scraper CLI and refreshed every week by a Cloudflare Workflow.

On top of the card browser and the collection, there are digital binder pages you can export as an image, pages by artist, set and Pokémon, public profiles, and two daily games: guess the card of the day, or guess its market price.

SvelteKitSvelte 5SupabaseCloudflare

iconScriptGraf to Link2Brain

Since 2023

AI became impossible to ignore, and I wanted to build with it rather than read about it.
In June 2023 I made Artificial-Infiltration, a small game in Kotlin with Compose for Desktop and the GPT API: you chat in a room with five other people, one of them is the AI, and you have to find which one.

The same summer, I did an internship at Ynov organised by the Data Engineering teacher, researching ChatGPT, autonomous agents and ways to expand a model's context. That research became ScriptGraf, a tool that writes a company's social media posts on its own.

That prototype became a company. ScriptGraf is now Link2Brain, a Marseille startup selling the finished product, live with paying clients, and I joined it in September 2025 as lead full-stack and AI developer.
Most of my work is Python on the AI side, building agents with RAG and state-of-the-art models that generate text, images and short videos, plus the API and database layers, the Vue and Nuxt front-end, and the Docker and Dokploy deployments.
Taking a school prototype I saw at step zero all the way to real marketing teams using it every day is the part I value most.

PythonRAGNuxtDockerDevOps

iconAtom Clicker

Since 2024

Atom Clicker started in October 2024 as a small Cookie-Clicker-like about splitting atoms, and became one of my biggest side projects, now played by more than a thousand people.

You click an atom, buy buildings that go from molecules up to cosmic structures, and climb a skill tree. Then come the prestige layers, each with its own currency, power-ups that stack, automation, achievements and daily quests.
Two extra dimensions unlock later: a Photon Realm, and a Radiation Realm where you run a nuclear reactor and manage its control rods.

It is written in SvelteKit with Svelte 5 runes and TypeScript, drawn on a Canvas, with Supabase for accounts and the global leaderboard, and deployed on Cloudflare Workers.
Incremental games are a fun constraint: enormous numbers, saves you must never corrupt, and an interface that has to stay smooth while everything on screen updates at once.

Svelte 5TypeScriptSupabaseCanvas

iconGPT Images

2025

GPT Images came out of wanting OpenAI's image models without the product wrapped around them: you bring your own API key, it never leaves your browser, and you get prompts, reference images, batch generation, a gallery and usage tracking that tells you what a batch actually costs.

Same stack as most of my recent side projects, SvelteKit, TypeScript and Tailwind CSS, with everything stored client-side in IndexedDB.
These days a good part of my work also goes into making AI agents useful on my own projects, from the Kore skills pack to the tooling I use daily.

SvelteKitOpenAI APIIndexedDB