Retour aux projets
2025 - Aujourd'hui

Peak

Réseau social mobile d'objectifs et d'exploits personnels

React Native TypeScript Supabase Expo
Aperçu de Peak

Contexte

Peak est une application mobile de réseau social centrée sur la définition, le suivi et le partage d'objectifs personnels. Le concept part d'un constat simple : les réseaux sociaux classiques valorisent l'image et l'instantané, mais aucun ne met en avant la progression personnelle sur le long terme.

Peak propose une alternative où chaque utilisateur définit des "exploits" — des objectifs concrets répartis dans 12 catégories de vie (Sport, Carrière, Voyage, Créativité, Santé, etc.) — et documente sa progression à travers des publications photo/vidéo. Le fil d'actualité ne montre pas ce que les gens consomment, mais ce qu'ils construisent.

Type : Projet personnel
Rôle : Développeur fullstack unique
Statut : MVP fonctionnel, en route vers la production

Fonctionnalités clés

ModuleDescription
ExploitsCRUD complet, 12 catégories, durées flexibles, difficulté 1-5, progression automatique calculée sur les sous-objectifs
Sous-objectifsMilestones ordonnés avec complétion individuelle, recalcul automatique du pourcentage parent
PublicationsPosts photo/vidéo (jusqu'à 10 médias), carrousel, lightbox plein écran, compression automatique
FeedDouble fil "Abonnements" et "Explorer", pagination infinie, pull-to-refresh
SocialFollow/unfollow, profils publics, recherche d'utilisateurs
MessagerieConversations temps réel via WebSocket, partage de médias, indicateur de lecture
NotificationsPush notifications (follows, likes, commentaires, messages), badges
Vidéo récapCompilation automatique des posts d'un exploit complété via FFmpeg natif
i18nFrançais et Anglais (~230 clés), détection automatique de la langue
Hors-ligneDétection de connectivité, cache local, synchronisation au retour

Stack technique

CoucheTechnologies
FrameworkReact Native 0.81 + Expo SDK 54
LangageTypeScript 5.9 (mode strict)
NavigationExpo Router 6 (file-based routing)
StateReact Context + TanStack React Query 5
BackendSupabase (PostgreSQL, Auth, Storage, Realtime)
ValidationZod (20+ schémas runtime)
MonitoringSentry + Amplitude
TestsJest + Testing Library + Detox (E2E)
CI/BuildEAS Build (Expo Application Services)

Architecture

peak/
├── app/                    # Routes (Expo Router, file-based)
│   ├── (auth)/             # Groupe auth (login, register)
│   ├── (tabs)/             # Navigation par onglets (5 tabs)
│   ├── goal/               # CRUD objectifs
│   ├── post/               # CRUD posts
│   ├── messages/           # Messagerie
│   └── settings/           # Paramètres
├── components/             # ~50 composants réutilisables
├── services/               # 22 services (logique métier + Supabase)
├── hooks/                  # 18 hooks custom
├── contexts/               # 3 providers (Auth, Theme, Network)
├── types/                  # Modèles TypeScript
├── lib/                    # Clients (Supabase, Sentry, QueryClient)
├── i18n/                   # Traductions (fr.json, en.json)
├── supabase/               # 26 migrations SQL
└── scripts/                # 20+ scripts de migration et seeding

Patterns clés :

  • Séparation stricte : Services (data) → Hooks (React Query) → Components (UI)
  • File-based routing avec groupes de layout et routes dynamiques
  • Type safety bout en bout : TypeScript strict + Zod validation runtime
  • Optimistic updates via TanStack Query pour une UX réactive

Base de données

14 tables PostgreSQL avec Row Level Security (RLS) sur chaque table :

  • users — Profils avec username unique, avatar, bio
  • goals + sub_goals — Objectifs et sous-objectifs ordonnés
  • posts + post_media — Publications multi-médias
  • follows — Graphe social
  • likes + comments — Interactions sociales
  • conversations + messages — Messagerie temps réel
  • notifications — Notifications typées

3 buckets de stockage : avatars, posts, recap-videos.

Optimisation du feed

96% de réduction des requêtes

Avant : ~80 requêtes par chargement (problème N+1)
Après : 1 à 3 requêtes grâce à des fonctions SQL, du batching et de l'eager loading

Défis et solutions

DéfiSolution
Performance du feed (N+1)Fonctions SQL, vues optimisées et batching
Gestion des médias multi-formatsPipeline de compression, validation MIME, quotas d'upload
Internationalisation complèteSystème i18n custom avec contexte React, 230 clés structurées
Temps réel pour la messagerieSupabase Realtime avec subscriptions WebSocket
UX hors-ligneNetworkContext + cache AsyncStorage + sync au retour

Chiffres clés

28Écrans
~50Composants
22Services
18Hooks custom
14Tables SQL
26Migrations
230Clés i18n / langue
12Catégories