BTBalbino
HomeProjectsBlogResearchCertificationsAboutContact
BTBalbino Tchoutzine

Computer Engineering student at ENSPY, building applied AI for development across computer vision, geospatial ML, and low-resource NLP, with a particular focus on Africa

Navigation

BlogResearchCertificationsAboutContact

Contact

GitHubLinkedInX (Twitter)tchoutzine@gmail.com
CV FRCV EN

© 2026 Balbino Tchoutzine. All rights reserved.

Built with Next.js & Vercel

Gardienne: an AI shield against cyberharassment | 2nd place at the Girls in STEAM hackathon
← Back to blog
July 14, 2026·10 min readAICyberharassmentProject

Gardienne: an AI shield against cyberharassment | 2nd place at the Girls in STEAM hackathon

Cameroonian Girls in STEAM trains and equips Cameroonian youth on major tech issues, one hackathon at a time. The initiative, founded by Maëllys (Miss Cameroun Diaspora France, candidate for Miss Cameroun 2026), held its first hackathon in February in Bamenda, with Bamenda University, Polytechnic Bamenda, and AWS. This second edition, hosted at ENSPY's Technipole SupValor in partnership with Polytechnique Yaoundé, the association Ne Regarde Plus Derrière Toi, and The Okwelians, focused on a burning theme: Girls in Cyberdefense, Cybersecurity & Cyberharassment.

Presenting Gardienne during the speech to the jury

At first, my goal was simple: leave with the Claude AI credits given to every participant, not necessarily to win. Once on-site, my ideas changed. I realized the event wasn't girls-only, despite what the title suggests :) : boys and girls competed together. The theme stayed broad, you could, for instance, tackle cyberattacks and fraud via Orange Money or MTN Mobile Money, but I wanted to do things differently. Instead of bringing a generic solution like in any hackathon, I put myself in the shoes of a girl facing this problem, and looked for a real societal issue I could actually solve. It was also strategic, you know ;).

Picture a 19-year-old student in Yaoundé. One morning, she gets this message: "if you leave me, I'll post your nudes, everybody go see." She's scared. She's ashamed. And she has no idea what to do.

And she's one of thousands.

In Cameroon, online violence is surging: 76 femicides recorded in 2024, against a backdrop of deepfakes and hate speech. Across the continent, UNFPA estimates that 58% of connected teenage girls have already experienced online harassment. And behind these numbers, one constant: most victims stay silent. That's exactly why I built Gardienne.


Three walls, and a language nobody listens to

When a girl is harassed online, she hits three walls:

  1. "Is this actually serious?": the doubt is paralyzing.
  2. "I have no proof.": a screenshot is dismissed in two seconds.
  3. "Who do I even turn to?": police, ANTIC, NGOs… nobody knows where to start.

And there's a fourth, invisible wall: the tools don't understand how we speak. "I go show everybody", "everybody go see", "your tof"… Camfranglais and Pidgin slip right under filters designed for standard English or French. A very real threat gets labeled "non-problematic content."

Gardienne tackles all three walls with a three-beat motto: understand, prove, act.


What Gardienne does

In practice, a girl opens the app (installable on any phone, works even offline) and:

  1. She pastes a message, or imports a screenshot, and our vision model extracts the author, platform, time, and text.
  2. Gardienne analyzes and classifies: insult, repeated harassment, threat, or sexual blackmail/sextortion, with a severity level.
  3. In one tap, she seals the evidence (hash + timestamp) and generates a pre-filled complaint file for the Prosecutor, law articles included.
  4. A legal question? A legal assistant answers, grounded in actual Cameroonian law.

And as a bonus, a Telegram bot checks whether a photo is fake or AI-generated.


A concrete example: when "everybody go see" means prison

Back to our student's message. She pastes it, taps Analyze. Here's what Gardienne returns:

Sexual blackmail / sextortion, severity 95, CRITICAL "This message mixes French and Pidgin. 'everybody go see' is a threat to distribute. Combined with intimate content, it constitutes sexual blackmail, punishable under Cameroonian law. You are not alone, and it is not your fault."

The severity verdict shown by Gardienne

A standard English-only filter would have shrugged. Ours didn't, because it was built here, for here.


Sealed evidence: turning a screenshot into a piece of proof

This is the cybersecurity heart of the project, and my favorite part.

A plain screenshot carries weak legal weight: it can be edited, cropped, its date contested. Gardienne turns it into solid evidence in two moves:

  • A SHA-256 hash of the content: the smallest change alters the hash. Proof of integrity.
  • A server-signed timestamp (HMAC): impossible to backdate. Proof that content existed at a real moment in time.

It doesn't prove who sent it: that's the job of ANTIC and IP tracing. But it delivers the missing link: preserved, dated, formatted evidence, ready to file.

Sealed evidence: SHA-256 hash and certified timestamp

The brain: hybrid detection

Why not just throw the message at ChatGPT? Because a generic LLM misses Pidgin, costs money, needs a connection, and can hallucinate. Facing a victim, I needed something deterministic, free, offline, and explainable.

The answer: two layers. A hand-built Camfranglais/Pidgin lexicon (with rules), paired with a toxicity model that generalizes. The rule I'm proudest of catches sexual blackmail even when no word is vulgar:

// Catches sextortion even without a single swear word
function detectSextortion(text: string): boolean {
  const shareThreat  = /\b(post|publish|send|share|leak|go\s?see|go\s?show)\b/; // "everybody go see" 👀
  const intimateItem = /\b(photo|nudes?|vid(eo)?|image|tof)\b/;                 // in Camfranglais, a photo is "tof"
  return shareThreat.test(text) && intimateItem.test(text);                     // both? → severity 92, critical
}

Here's the workflow Gardienne runs behind the scenes when the message lands:

The wild part? Text detection and sealing run on the device. No message leaves the phone to be analyzed.


The bonus that nearly broke me: the anti-deepfake bot

I wanted a Telegram bot that could tell whether a photo is fake, not just for me, for any classmate. On paper, an hour of work. In reality, my three finest struggles of the hackathon:

Alone behind the screen, deep in a coding session

Struggle #1: the ghost endpoint. The old Hugging Face inference URL had been retired. The bot returned… nothing. Zero. I had to migrate to the new router before a single result came back.

Struggle #2: Telegram erases the evidence. I send an AI-generated image to the bot: "authentic, no signature." Panic. It turns out Telegram recompresses "photos" and strips metadata, including the C2PA signature OpenAI and Google leave behind. The fix: send the image as a File, not a Photo. It stays intact, the signature becomes readable again. ("origin: Google", finally.)

Struggle #3: one model isn't enough. The deepfake detector only looked at faces. An AI image with no face passed as real. Fix: two classifiers (fake faces and AI-generated images), keeping the most suspicious score.

The Gardienne Telegram bot analyzing a fake image

Every blocker taught me something no doc ever would. That's what a hackathon is.


The tech stack

What struck me: building all of this without spending a cent on AI tools.

ComponentTechnologyRoleCost
FrameworkNext.js 16 + TypeScriptWeb app + API routes, in a single projectFree
Language detectionHand-built Camfranglais/Pidgin lexicon + rulesUnderstand local threats, offlineFree
AI detectiontransformers.js: Xenova/toxic-bert (browser)Generalize toxicityFree
EvidenceWeb Crypto SHA-256 + server HMACSeal and timestampFree
Legal assistantRAG + Groq gpt-oss-20bAnswer per Cameroonian law, sources citedFree*
Screenshot analysisGroq Llama 4 Scout (vision)Extract author / time / message from a screenshotFree*
Image botNode + Hugging Face (dima806)Detect fake / AI-generated photosFree
ProvenanceC2PA Content Credentials (OpenAI, Google…)Read an image's origin signatureFree
DeploymentVercel + GitHubAuto-deploy on pushFree

*Generous free tiers, more than enough for a prototype.


What I truly learned

This project taught me far more than code.

Protecting is everyone's job. Even though the event was open to boys, I chose to put myself in a girl's shoes to design Gardienne, with and for the ones living through what I never will. It forced me to really listen. Gardienne's best feature isn't the SHA-256. It's the line that appears next to the verdict: "You are not alone, and it is not your fault."

Tech should serve people, not the other way around. A hash, a model, a bot, they only matter if, at the end of the chain, a 19-year-old feels less alone and knows what to do.

And in the end? Gardienne took 2nd place. 🥈 Not just for the tech, for what it's trying to repair.


The ceremony, in pictures

Group photo with laureates and organizers
With the event's promoter
Prize handover at the Technipole SupValor
Photo with the 2nd place prize
The prizes: laptop and fake cheque laid out on a table
Sitting with the other finalists waiting for results
The hackathon room, participants focused on their screens
A jury member opens the Gardienne app on their phone

Going further

The code is on GitHub:

github.com/zoom-BT/Gardienne

The README covers it all: detection, sealed evidence, legal assistant, Telegram bot. It's a starting point: the lexicon keeps growing, and the architecture extends to other languages and other French-speaking African countries.

The fight against cyberharassment deserves open code. Fork it, improve it, share it.


"In the end, we will remember not the words of our enemies, but the silence of our friends." Martin Luther King

Gardienne doesn't claim to erase harassment. But it breaks the silence: the victim's, when she doubts, and ours, when we could act. That 19-year-old student from the start? Today she has a tool to understand, evidence to defend herself, and a hand reaching out. That's already a lot.

No girl should have to face this alone.


The source code is available on GitHub. Feel free to open an issue, suggest an improvement, or just let me know what you think.


Live demo

Demo

Ceremony recap

#Cybersecurity#Cameroon#Hackathon#Next.js#Deepfake

Share

XLinkedInWhatsApp

Comments

Comments use GitHub Discussions. Sign in with your GitHub account.