Table of contents
After 10 years, I find it interesting to talk about the history of this project—how it was born, how it became number one and the only one of its kind, a real success story. But also to put things into perspective: it was a sandbox for years, with countless iterations!
POC
In 2015, a few months after I arrived at 42, there were about 20 cluster map sites, 10 friend list sites, stats sites, etc.
My idea at the time: I’d love to have a tool that does everything, because switching sites for each feature is annoying!
So I started coding a small site called “stud42,” just for myself, in PHP! Yep… PHP 5.4 at that, it was rough, but that’s how it was back then 🧓.
Want to know something funny? Version 0.1 had no user or permission management because it was just for me! And when I shared it with my roommate and other campus friends, we ended up exploiting the security flaw—adding/removing friends on other accounts because the API was super basic and UNSECURE!
POST /api/friends/:me/add
Yes, you could add friends to someone else's account by replacing
:me
with another student login.I quickly fixed that by adding basic security and auth rules.

One day, someone from a different cluster—someone I didn’t even know—came to show me my own site, saying:
“Hey, check this out, a friend showed me this. Pretty cool site!”
I replied: “Well, my login is at the bottom-left, so yeah, I know it 😂”
I naively asked: “Who showed you this?” and he gave me a login I didn’t even know.
That’s when I thought: “How many people are using my site?”
I installed Google Analytics. And… SURPRISE: more than 500 people out of around 3000 students at the time were using this PHP 5.4 POC.
It was a shock. And that’s when I thought: “I’ve built something useful? Maybe I should spend more time on it—this sandbox actually works in prod!”

Version 1.0
At that time, I was in a "PHP is annoying me, I want a change of pace" phase, so I looked for alternatives to quickly build an MVP with minimal maintenance, because I had a curriculum to follow!
At 42, I was part of the night crew: arriving at 6PM, leaving at 8AM!
One night, I don’t remember why, but this thought popped into my head:
"What if I learned Ruby and Ruby on Rails 4.0?"
On a whim, I learned RoR in one night and rewrote Stud42 in Ruby from scratch the next night.

At that moment, I had a "wow" effect because it was super quick and simple to set up.
A few days later, in December 2015, with a new design, new features, and a strong desire to push myself, I presented version 1.0 to the students.
On December 14, 2015, the Ruby on Rails V1 went live!
In two months, I went from 500+ users to 1800+, meaning that more than half the students were now using Stud42 daily.

Yes, at that time, there were three of us on the project, and we had made a native version for all platforms. We were determined to create a really cool product for everyone!
We had a real monopoly on student apps. All the alternatives had shut down and redirected to stud42.fr.
We even worked with some competitor sites to allow easy transfers between their platforms and ours.
Their devs integrated missing features into Stud42 with us: it was win-win, and a true peer-to-peer network, with a philosophy of sharing "by students, for students."
Version 2.0
The running gag of Stud42.
In 2017, I was staff at 42, and I wanted the tool to be used not just by students but also by staff for their daily work.
This version was redone six times! Once in Ruby on Rails, once in Angular (I got lost there), once in React. It was the first time I touched React.
The sandbox was still there!
But every time, my ambitions were too big. Version 2.0 never saw the light of day.
I had access and authorization from the 42 design team to integrate the site into the ecosystem. The design matched other tools (like cv.42.fr, which I also led overnight 😂).

Everything was greenlit: new features, new design, new architecture.
This version almost launched at the end of 2018… but life caught up, and personal issues slowed the final stretch.
Early 2019, I had to think differently. I no longer had time to spend my days on this project.
So I made a choice: to open-source the application once I left 42, so that the initial idea "by students for students" would live on!
Version 3.0 - Open Source
8f4374e
is the initial commit of this version. February 24, 2022.
f4374e
became the red color code on s42.app as an Easter egg!It had been a long time since V2, and even more since V1… which was still running!
Bug-free, no reboots, on an old OVH VPS… no Kubernetes, no Docker, no systemctl… just a classic start.sh
.
No crash protection, this shell script was terrifying—and yet, it kept V1 running for 6 years!

I spent nearly 6 months thinking about the structure, aiming for a first version that was "clean", "simple", "easy to learn".
While also trying to create an app close to what we see in companies, so that this project could be an educational space.
For me too!
I learned a lot about maintaining an open-source project, since Stud42 was my first. And you know why?
Because I was ashamed of my code. I felt I had no right to share imperfect code.
But if I have one thing to say: do it, for yourself! You’ll learn. From others and from yourself.
People I didn’t know submitted issues, taught me to better manage workflows, write better code for open-source, document better. 💜
July 2022 – Private Beta Launch
A beta launched on a potato-worthy machine from “Shhh No Brand.”
Accessible via GitHub Sponsorship, in sponsorware mode.
I expected one or two people, I got about ten. It was beyond expectations.
We started experimenting, finding bugs, stabilizing things.
Then we changed the format: beta access if you star the project on GitHub.
It worked great, but also created tension. Some people disliked the model, feeling "forced."
Which I completely understand. There were issues raised, and I was clear: it’s a choice. The beta is temporary, you're free to wait for the public version.

Public Beta Launch
There it is, after almost a year of working with beta testers: a fully operational version!
June 28, 2023 marked the end of the closed beta.
Restrictions were lifted, and everyone could now access the tool freely.
From that moment, the site’s infrastructure was bombarded by DDoS attacks.
Apparently, some people didn’t like s42.app.
For almost 4 months, we received thousands of DDoS attacks, some hitting terabytes of bandwidth.
I can’t imagine the cost of such an operation, and I don’t really understand the intent.
But the infra held strong!
Even under DDoS, the APIs and interface responded in under 250ms, which is my personal MAX limit.
My personal response time targets:
- <50ms 👏🟢
- <250ms 👍🟠
- 250ms 😡🔴
Infra was a key point of this version, as s42.app had a vision: to cover all campuses worldwide.
Challenge AGAIN!
Sunset of stud42.fr
After 6 years of loyal service, it was time to say goodbye to version 1.0.
Now that the public beta was unrestricted, I could shut down V1 and redirect everyone to s42.app.

I archived the source code as a private repo on GitHub to keep a trace of my journey.
And I invite you to do the same: look back sometimes, and recognize how far you’ve come, how much you’ve learned from all those lines of code!
And from the connections made with other devs.
You’ll see—it feels good to take a step back sometimes!
Vision of 3.0
Now that V3.0 is on track, it finally had the potential to take over my original staff work: replacing meta.intra.42.fr with an open-source tool.
Because you may not know, but that module of the intra is a nightmare.
Having worked on it for years, it should’ve met the same fate as forum.intra.42.fr.
(Don’t know the forum? Good 😂 Even though it held some 42 history gems.)
So I started redirecting my focus to communication, contacting 42 Network directly.
In July 2023, I emailed the staff to discuss the project with former colleagues and new people.
Well… it didn’t go as planned. I never got a reply.
Short-lived learning 😂
Many campuses join the adventure!
Today, nearly 20 campuses are on the app—almost half of the 42 Network. A real success!
Since each campus addition requires written admin approval, development is slow.
But that’s the game!

The Stats!
We love stats here, so here are some V3 figures and their impact on student life:
- ✅ Over 115,000 active users
- 🔄 Hundreds of millions of logins
- 💻 100% open source platform since 2022
- 💪 Maintained voluntarily with passion
- 🧑🤝🧑 A tight-knit community with shared values
- ⏱️ Thousands of development hours
- 💸 Entirely self-funded (~€20,000 over 10 years)
- ⚡ 89ms average response time since July 2023
- 🔔 123,805,525 webhook requests
- 🛑 0.01917% downtime since July 2023
→ that’s only 3h 21min 32s of unavailability (mostly due to a missed ADM regularization 😂)
The Little Issues
Yes, not everything is rosy!
Indeed, this version relies on a webhook system from the intra.
WHAT? WEBHOOKS?!
Yes, really.
In 2018, when I was staff, I maintained the API and developed the webhooks.
Since Stud42 was the app that consumed the most of the 42 API, I often had a head start spotting bugs and optimizing.
The idea was simple: build webhooks to resolve API spikes.
Every hour, API traffic spiked +1500% due to cron scripts fetching updates on students, projects, locations, etc.
So I created webhooks and proposed them to campuses and “verified apps” (yes, the ✅ blue check that meant the app was verified by staff).
After I left, "verified apps" were deprecated, as no one took over.
And that’s life: your code will end up in the trash—never take it personally!
In 2018, as thanks for my volunteer work, 42 let me keep webhook access for s42.app.
But… with all the staff/management changes in 2018/2019, the written agreement was "lost" on 42’s end.
🤦♂️ BUMMER.
The CNIL, GDPR Gang
In 2018, I was staff. And one day… who shows up at the office?
A CNIL commissioner.
I’ll tell you: not cool 😅
A complaint had been filed against 42, and I had to handle it.
I learned a lot that day about data protection.
(This led to the end of forum.intra.42.fr.)
In 2019, personal info like phone numbers were removed from the API.
But… they weren’t removed from the webhooks, still used by campuses globally.
And you can guess the problem…
The data I received on s42.app still included that info, and I realized it during a user discussion.
So I immediately removed personal info no longer in the API:
➡️ https://github.com/42atomys/stud42/issues/487
At the same time, I reported it to 42 Network, asking them to update the docs.
Spoiler: the change was never made 🤡
(The official API docs are still outdated.)
But now that we’re compliant, everything’s back in order. Crisis well managed 🎉
The “partnership” with 42
This is where the latest challenge appears, and it's still ongoing… But that’s another story!
We’ve reached the end of this article and… of s42.app.
With a lot of emotion, we’re officially announcing the definitive closure of S42.
After 10 years of uninterrupted service and 6 months of struggle to save the project, the journey ends.
More info here:

I’ve learned a lot. Really. 🙏