App hero screenshot

Overview

A cross‑platform mobile app for discovering gyms and booking classes. Built with a Django REST API and a React Native (Expo) client. Features real‑time availability, and a smooth UX for browsing and scheduling.
  • Authentication — JWT with refresh tokens
  • Features — Class search, filters, bookings & cancellations
  • Admin — Dashboard for schedules and attendance

Screens

home
disover classes
explore classes map view
Schedule classes
profile screen

Tech Stack

Frontend

React Native (Expo), TypeScript, React Query, Expo Router, i18next (with ICU), expo-localization

Backend

Django REST Framework, Django Admin Page, PostgreSQL, Celery Tasks

Operations

Dockerized development environment, Postman API environment

Key Design Choices

JWT with rotating refresh tokens and short‑lived access tokens.
Server‑driven pagination & filtering for large class catalogs.
i18next framework to manage different app translations
Geocoding with Google Maps API to display studio locations
Stored analytics data in seperate database tables using celery tasks to update the database at regular intervals

Challenges & Learnings

Timezone Management

Store all timezones in the datebase in UTC and convert to local timezones when displaying to user

Analytics

Created 2 separate Django models to store analytics data. Created one celery task to update a daily snapshot every minute and another task that runs nightly to move that data into a larger table which store daily recaps