Jason Cox Logo

Project Case Study

Goaly

Goaly is a mobile-first goal and habit tracking application focused on consistency, progress visualization, and engaging user experience. The app includes flexible scheduling for recurring goals, a custom-built streak engine, analytics dashboards, and social features that allow users to compare progress with friends.

React NativeExpoExpo RouterNode.jsExpressMongoDBReact Native PaperReact Native Chart Kit

Project Snapshot

Type

Mobile Full-Stack Application

Architecture

React Native • Express • MongoDB

Focus

Goal scheduling, streak logic, analytics

Platform

iOS / Android via Expo

Architecture

React Native + Expo powers the mobile UI and navigation.
Context providers manage application domains including goals, streaks, users, themes, and UI state.
Express backend exposes REST APIs for authentication, goals, streak tracking, and social relationships.
MongoDB stores user data, goals, completion history, and friend relationships.
Custom helper utilities calculate goal schedules and streak logic.

Key Features

Daily, weekly, and monthly recurring goals

Custom streak tracking system

Weekly progress tracker

30-day completion analytics chart

Dynamic home dashboard with motivational messaging

Friends system with requests and profile viewing

Searchable user directory with pagination

Custom theme engine with 11+ themes

Animated slide-up sheet UI system

Challenges & Solutions

Implementing reliable streak tracking

Challenge

Streak systems can easily produce incorrect results if daily completion states are calculated incorrectly or evaluated multiple times per day.

Solution

Created a streak engine that evaluates 'live' goals per date using helper logic like isLiveForDate(), ensuring streak updates occur only when all daily goals are completed.

Supporting flexible goal scheduling

Challenge

Users may want goals that repeat daily, weekly, or monthly with optional active days, which introduces complex scheduling logic.

Solution

Built scheduling utilities that dynamically calculate next-due dates and filter goals based on recurrence rules and active days.

Maintaining clean architecture in a complex mobile app

Challenge

As features expanded (goals, streaks, friends, themes, analytics), placing logic directly in screens would have caused maintainability issues.

Solution

Split the application into modular context providers and reusable components so business logic, UI state, and data fetching remain separated.

Screenshots

Goaly goals screen
Goaly home dashboard
Goaly profile and analytics