Skip to content
Quentin Hoarau, Software Engineering student in Madrid
Software Engineering

Quentin

Madrid, Spain

Hoarau

I study Software Engineering at Epitech, in Madrid.
Outside of school I ship my own projects: Onbars, a calisthenics app, and a WhatsApp bot that runs 24/7 on a Raspberry Pi.

Scroll

WHAT I BUILD WITH

Tech Stack

BUILD IN PROGRESS

Scroll — the wall builds itself

Each row is a layer of the stack I actually work with, from the Unix foundations up to the tools I use today.

Foundations at the bottom, newer tools on top. Scroll to lay them.

PERSONAL PROJECTS

Side Projects

Web design · Local SEO

I redesigned a Madrid fishing shop's website

DRM Fishing sells online from an ageing PrestaShop store: awkward on a phone, photos lost in the layout, hard to find your way around and browse. I rebuilt it from scratch and pitched it to the owner — the redesign is a proposal, not live on their domain yet.

See my web offer
Onbars logoLAUNCHING IN MADRID

Onbars — find your park. Train with others. Level up.

Onbars is a mobile app for street workout and calisthenics athletes. It solves three problems: finding a good outdoor pull-up and dip bar setup nearby, knowing how good you actually are compared to others, and finding people to train with.

Onbars logo
Onbars map screen showing thousands of street workout parks in Madrid

THE MAP

4,097 parks, already on the map.

Real parks, not guesses — imported from open map data, then verified by the athletes who train on them. One tap opens directions straight in Google Maps.

Athlete checking the Onbars map at a street workout park in Madrid

THE COMMUNITY

You never train alone again.

Meetups at the park, Kings to dethrone, badges validated by the community — in person or on video.

WHAT IT DOES

Five tabs, everything a street workout athlete needs.

Compete

A live leaderboard ranked by the Onbars score. Filter by exercise and by tier so you're only measuring yourself against people at your level.

Map

An interactive map of street workout parks with one-tap directions. Every park has its own page — photos, equipment, water access, night lighting, reviews — filled in by the athletes themselves to earn points. Switch to list view to sort by distance and filter for water, lighting, verified spots, or top-rated.

Workout

Log routines from the real street workout catalogue, statics included — front lever, planche, handstand. Make a routine public and it shows on your profile for others to clone, or start Get to Work for a live, timed session. A weekly AI coach breaks down your training — volume, rest discipline, strengths and weaknesses — from stats computed in code, never invented.

Social

Discover athletes near you, propose a meetup, and track it from invite to history. Skill badges are validated by the community after in-person or video verification.

Profile

Score, tier, badges, and a full breakdown of how the score is built. Certify your maxes with video so your numbers count on the leaderboard.

Built with its community

Onbars isn't another app that counts your reps — there are already ten thousand of those. Parks, equipment, reviews: the map is filled in by the athletes who use it, and it gets better with every park the community fills in. The point isn't the score — it's getting people off their phones, out to train, and meeting new athletes.

Currently focused on a real-world launch in Madrid, the historic heart of street workout culture in Europe.

UNDER THE HOOD

A full-stack production mobile app — solo-built architecture, security, and AI pipeline.

Onbars is a full-stack cross-platform mobile app (iOS, Android, Web) built solo, covering the whole stack: native mobile client, REST API backend, PostgreSQL database, on-device computer vision, third-party auth, cloud storage, and a live production deployment.

4 097

parks imported and rendered on the map

124

backend API endpoints

37

vulnerabilities found & fixed (7 critical)

  • React Native / Expo
  • TypeScript
  • Zustand
  • UI Kitten
  • React Native Reanimated
  • react-native-maps
  • react-native-vision-camera
  • fast-tflite — MoveNet
  • FastAPI
  • Prisma / PostgreSQL
  • Supabase
  • Groq — Llama 3.3 70B
  • JWT + Google OAuth
  • Fly.io

On-device rep counting

MoveNet pose estimation via TensorFlow Lite runs fully on-device through react-native-vision-camera frame processors — no video upload, no server round-trip. A custom finite-state machine tracks elbow flexion and extension frame by frame to detect and count valid reps, with range-of-motion checks to reject partial ones.

A map that carries the app

Google Maps API with 4,097 imported parks rendered through custom clustering, live check-ins gated by a 500m geofence, and a one-tap button that opens directions in Google Maps.

LLM training analysis

The backend is wired to Groq (Llama 3.3 70B): every stat is computed in code, the model only writes the weekly coaching narrative — no invented numbers, cached per ISO week, answered in the user's language.

37 vulnerabilities found, 37 fixed

An internal audit caught 7 critical issues, including a Google OAuth identity-spoofing bypass, a self-certification exploit that could grant Gold tier, and a PII leak exposing every user's email. Fixed with server-only privilege fields, strict Pydantic validation, and a public/owner-only data split.

Infrastructure & security notes

  • Ships natively on iOS and Android, and as a web app — React Native Web plus a Leaflet map shim — sharing about 95% of the codebase.
  • JWT sessions plus Google OAuth (native Sign-In and Google Identity Services on web), capped at 30 days, tokens kept in expo-secure-store — never AsyncStorage.
  • Row-Level Security enabled on every table, and 5 Supabase Storage buckets with server-generated, user-scoped file paths.
  • Rate limiting on the auth surface (login, register, OAuth) and a distributed scheduler lock so cron jobs don't double-run across Fly.io instances.
  • Boot-time production config guardrails — the backend fails closed if misconfigured.
  • A separate autonomous agent runs nightly on a Raspberry Pi, working the backend on its own branch for review each morning.
  • A standalone admin dashboard for park, user, and content moderation, with its own auth and audit log.

WhatsApp Bot

Always-on notification hub running on a Raspberry Pi

  • Node.js
  • whatsapp-web.js
  • CoinMarketCap
  • Claude
  • systemd
  • cron

It started as a way to watch my Claude Code usage limits from my phone, then grew into a notification hub and a crypto assistant. It runs under systemd on a Raspberry Pi at home.

  • Polls Anthropic's OAuth usage API every 5 minutes and pings me when a session or weekly limit is hit — and again when it resets.
  • Answers crypto commands with live CoinMarketCap data, plus an automatic market brief every morning at 7:30.
  • Exposes a local HTTP endpoint any other script on the Pi can call to push a notification — including the page that tells me the cat has been fed.

COMMANDS

wake up
pre-warms the 5h Claude session remotely
mini
BTC / ETH + Fear & Greed in one line
portefeuille
full 10-token portfolio
prix <ticker>
live price for any coin
actu
Claude market analysis, live data + web search
View on GitHub
instructions — full command menu

instructions — full command menu

Five Minutes Left

Vertical platformer — Doodle Jump meets the Chrome dino

  • Godot 4.6
  • GDScript

A meteor hits and the ground turns into a wall of debris that keeps rising. You play a dino jumping from platform to platform to stay above it. Survive 5 minutes and you win. Made solo in Godot for a school project.

  • Auto-bounce off platforms, a geyser for a huge jump, and birds you can stomp for an extra heart.
  • The blast wall never stops climbing and keeps getting faster, so standing still is not an option.
  • Solo (3 hearts) or 2-player co-op on the same screen, sharing 6 hearts.

THE ACTUAL IN-GAME HUD

HEIGHT  0 mTIME  5:00BEST  909 m
View on GitHub
menu — solo or duo

menu — solo or duo

EPITECH — SYSTEMS & ALGORITHMS

Systems & Algorithmic Projects

A-maze-d

Multi-Robot Pathfinding Engine

  • C
  • Graph Theory
  • BFS
  • Algorithms

A multi-robot pathfinding solver in C. It computes optimal distances with a reverse BFS from the exit in O(R+T), extracts non-overlapping shortest paths, distributes the robots by traversal cost, and resolves collisions turn by turn.

Execution Pipeline

  1. 1

    Reverse BFS

    O(R+T) exit distance compute

  2. 2

    Optimal Paths

    Extract non-overlapping paths

  3. 3

    Distribution

    Balancing on traversal cost

  4. 4

    Anti-Collision

    Lock-free turn-by-turn planning

View on GitHub

BSQ (Biggest Square)

Dynamic Tabulation Solver

  • C
  • Performance
  • Dynamic Programming
  • O(N)

A C solver for the largest empty square in an obstacle-filled grid. A single-pass dynamic-programming tabulation in O(N) handles a 10,000 x 10,000 grid in a few milliseconds, with the grid held in one flat allocation.

Execution Pipeline

  1. 1

    Fast Reading

    Flat-buffer grid parsing

  2. 2

    DP Tabulation

    min(top, left, diag) + 1

  3. 3

    Track Max

    Best square updated in the same pass

  4. 4

    Final Render

    Buffered stdout write

View on GitHub

Minishell

Unix Command Interpreter

  • C
  • UNIX System
  • Processes
  • IPC
  • Parser

A Unix shell in C. The parser builds a binary execution tree from right-associative operator precedence, then walks it: fork/exec, pipe IPC, redirections (>, >>, <, <<), built-ins and environment variables.

Execution Pipeline

  1. 1

    Parsing

    Tokenize operators

  2. 2

    Binary Tree

    Build tree on precedence

  3. 3

    Pipes Setup

    Wire descriptors for stream IPC

  4. 4

    Fork & Execve

    Process execution & environment

View on GitHub

My Radar

Spatial Indexing ATC Simulator

  • C
  • CSFML
  • Quadtree
  • 2D Physics
  • Optimization

An air traffic control simulator in CSFML holding 60 FPS with over 1,000 aircraft on screen. An adaptive quadtree partitions the map so collision checks only compare neighbours — 50x to 100x fewer checks than the naive pass. Includes tower protection circles and a dynamic storm system.

Execution Pipeline

  1. 1

    Quadtree Index

    Recursive map partition

  2. 2

    Fast Filter

    Prune distant entity checks

  3. 3

    Radio Towers

    Immunity circle calculations

  4. 4

    Storm Mechanics

    Dynamic storm & themed sprites

View on GitHub