MKO — Portfolio
Mohamed Karim OuertataniIngénieur Full-StackFull-Stack Engineer
MobileAI

Vibra

Cycling, Hiking & Camping

November 2025 – January 2026 · Team project · ESPRIT

0views
Vibra — 1
Vibra — 3
Vibra — 2

A social network for outdoor adventures, native on Android (Kotlin · Jetpack Compose) and iOS (Swift) around one NestJS backend: organize and join cycling, hiking or camping trips, chat in real time and get recommendations computed by machine learning.

By the numbers

0

native apps (Android & iOS)

0

NestJS modules

0

real-time WebSocket gateways

0

lines of code (approx.)

Kotlin 40,700TypeScript 12,700

Case study

The challenge

Outdoor enthusiasts organize their trips across several apps at once: a messaging group, a map, a social network. The goal was to bring it all together, natively on Android and iOS, with reliable real time and truly personal recommendations, as a team.

Architecture

Apps

  • Android: Kotlin, Jetpack Compose, MVVM
  • iOS: Swift
  • Room (offline), WorkManager

NestJS API

  • 16 modules, REST + JWT
  • 3 Socket.IO gateways
  • Swagger / OpenAPI
  • Python recommendation script

Data

  • MongoDB (Mongoose)
  • Cloudinary (media)
  • Stored notifications

External services

  • Firebase Cloud Messaging
  • Google Maps
  • OpenRouteService
  • Flask AI API (Render)

Technical choices

01

Machine learning in production

NestJS calls a Python script that maps preferences and trips into pre-trained KMeans clusters, and a KNN matching suggests compatible members.

02

Three real-time channels

Group chat, private messages and polls each have their own Socket.IO gateway: votes and messages arrive live, with online status and read receipts.

03

Business rules enforced by the server

Every trip gets a chat, a camping trip requires a campsite, only accepted participants can rate, and the organizer's average rating is recomputed.

04

A solid mobile app

MVVM + Repository architecture, trips saved offline with Room, JWT expiry detection and Google sign-in.

Key features

  • Two-step trip creation: details, then a route on the map computed for walking or cycling (OpenRouteService)
  • Explore / Recommended / Following tabs, voice search and filters by date and distance (5 to 200 km)
  • Participation requests accepted or declined by the organizer; accepted members join the group chat automatically
  • Real-time messaging (Socket.IO): a group chat per trip with images, files, voice messages, location and live polls, plus private messages
  • Community feed: posts with photos, hashtags, mentions, likes and comments
  • Trip recommendations (KMeans) and compatible members (KNN), based on a preferences questionnaire
  • Reputation: a 1 to 5 star rating after each finished trip, averaged on the organizer's profile
  • Trips saved offline (Room), push notifications (Firebase) and dark / light mode

Screenshots (20)

Vibra — Cycling, Hiking & Camping — Screenshots 1
Vibra — Cycling, Hiking & Camping — Screenshots 2
Vibra — Cycling, Hiking & Camping — Screenshots 3
Vibra — Cycling, Hiking & Camping — Screenshots 4

A word about this project

A question, an opinion, an idea?

Write to me right from here. Your message is not published: I am the only one who reads it.

Private: never shown on the site