PersonnelDifficile

Awlak Benjah

Suivi de diplôme et de moyenne fonctionnant hors ligne, construit en monorepo Turborepo associant une application Expo React Native et une vitrine Astro.

— Vue d'ensemble

Aperçu de l'architecture

graph TB
    subgraph Monorepo["Turborepo + pnpm workspaces"]
        A["apps/mobile<br/>Expo SDK 57"]
        B["apps/showcase<br/>Astro + Tailwind"]
        C["packages/typescript-config"]
        D["packages/oxlint-config"]
    end
    subgraph Appareil["Sur l'appareil"]
        E["expo-sqlite"]
        F["Drizzle ORM"]
        G["Store Zustand"]
    end
    A --> E
    F --> E
    A --> G
    C --> A & B
    D --> A & B
    B --> H["Cloudflare Pages"]

Un suivi de diplôme et de moyenne qui conserve chaque calcul sur l'appareil. L'étudiant modélise son cursus en semestres et en cours, saisit ses notes au fur et à mesure, et voit la moyenne se recalculer sans compte ni appel réseau.

Le dépôt est un monorepo Turborepo sur des workspaces pnpm : l'application Expo et la page vitrine Astro partagent une base TypeScript stricte et une seule configuration oxlint, et chaque tâche passe par le cache de Turbo.

Fonctionnalités clés :

  • Modèle de données entièrement hors ligne via expo-sqlite et Drizzle ORM
  • Hiérarchie diplôme, semestre et cours avec surcharges de maquette par cursus
  • Calcul continu de la moyenne et du statut des notes, avec graphiques de progression
  • Sauvegardes multiples pour suivre plusieurs plans de diplôme en parallèle
  • Interface localisée avec i18next et détection de la langue de l'appareil
  • Édition par bottom sheet avec retour haptique et animations Lottie
  • Vitrine Astro statique déployée séparément de l'application

Stack technique :

  • Mobile : Expo SDK 57, React Native, Expo Router, TypeScript
  • Données : Drizzle ORM, expo-sqlite, Zustand, TanStack Query
  • UI : HeroUI Native, Uniwind, Tailwind CSS, react-native-gifted-charts
  • Vitrine : Astro, Tailwind CSS, astro-icon, Cloudflare
  • Outillage : Turborepo, pnpm, oxlint, dependency-cruiser, Vitest, Zod

Un premier prototype web de la même idée avait été livré en React et Supabase avant que le projet ne bascule vers une architecture native, hors ligne d'abord.

— Stack
TypeScriptReact NativeExpoAstroTailwind CSSTurborepoSQLiteDrizzle ORMCloudflare