PersonalHard

Awlak Benjah

Offline-first degree and GPA tracker for university students, built as a Turborepo monorepo pairing an Expo React Native app with an Astro showcase site.

— Overview

Architecture Overview

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 Device["On-device"]
        E["expo-sqlite"]
        F["Drizzle ORM"]
        G["Zustand store"]
    end
    A --> E
    F --> E
    A --> G
    C --> A & B
    D --> A & B
    B --> H["Cloudflare Pages"]

A degree and GPA tracker that keeps every calculation on the device. Students model their degree as semesters and courses, record grades as they land, and see the running average update without ever needing an account or a network round trip.

The repository is a Turborepo monorepo on pnpm workspaces: the Expo application and the Astro landing page share a strict TypeScript base and a single oxlint configuration, and every task runs through Turbo's cache.

Key Features:

  • Fully offline data model backed by expo-sqlite through Drizzle ORM
  • Degree, semester and course hierarchy with template overrides per curriculum
  • Running GPA and grade-status calculation with charted progress over time
  • Multiple saves, so several degree plans can be tracked side by side
  • Localised interface via i18next with locale detection from the device
  • Bottom-sheet driven editing flow with haptics and Lottie feedback
  • Static Astro showcase deployed separately from the application

Tech Stack:

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

An earlier browser-based prototype of the same idea shipped as a React and Supabase web application before the project moved to a native, offline-first architecture.

— Stack
TypeScriptReact NativeExpoAstroTailwind CSSTurborepoSQLiteDrizzle ORMCloudflare