Documentation Index Fetch the complete documentation index at: https://mintlify.com/awasserz/rippler-app/llms.txt
Use this file to discover all available pages before exploring further.
Overview
Workout storage functions handle the persistence of completed training sessions. Each logged workout contains detailed information about exercises performed, including set-by-set tracking of weights, reps, and completion status.
Storage Key
Stores the JSON-serialized array of LoggedWorkout objects
Stores the user’s current week number in the program as a string
Functions
getLoggedWorkouts
Retrieves all logged workouts from storage.
async function getLoggedWorkouts () : Promise < LoggedWorkout []>
Array of all logged workouts, or empty array if none exist or an error occurs
Example
import { getLoggedWorkouts } from '@/lib/storage' ;
const workouts = await getLoggedWorkouts ();
console . log ( workouts );
// [
// {
// id: 'workout_123',
// week: 1,
// day: 'Monday',
// dateLogged: '2026-02-28',
// exercises: [...],
// completed: true
// }
// ]
Source Code Reference
See implementation at lib/storage.ts:71-82
saveLoggedWorkout
Saves or updates a logged workout. If a workout with the same ID already exists, it will be updated; otherwise, a new workout is added.
async function saveLoggedWorkout ( workout : LoggedWorkout ) : Promise < void >
The complete logged workout object to save
This function uses upsert logic: existing workouts (matched by ID) are updated, while new workouts are appended to the array.
Example
import { saveLoggedWorkout } from '@/lib/storage' ;
const workout : LoggedWorkout = {
id: `workout_ ${ Date . now () } ` ,
week: 1 ,
day: 'Monday' ,
dateLogged: new Date (). toISOString (). split ( 'T' )[ 0 ],
completed: true ,
exercises: [
{
tier: 'T1' ,
exercise: 'Squat' ,
sets: [
{ setNumber: 1 , weight: 225 , reps: 5 , completed: true },
{ setNumber: 2 , weight: 225 , reps: 5 , completed: true },
{ setNumber: 3 , weight: 225 , reps: 5 , completed: true }
],
notes: 'Felt strong today'
}
]
};
await saveLoggedWorkout ( workout );
Source Code Reference
See implementation at lib/storage.ts:84-97
deleteLoggedWorkout
Removes a logged workout from storage by ID.
async function deleteLoggedWorkout ( id : string ) : Promise < void >
The unique ID of the workout to delete
Deleted workouts cannot be recovered. Consider implementing a confirmation dialog before deletion.
Example
import { deleteLoggedWorkout } from '@/lib/storage' ;
await deleteLoggedWorkout ( 'workout_1234567890' );
Source Code Reference
See implementation at lib/storage.ts:99-107
getLoggedWorkoutForDay
Retrieves the logged workout for a specific week and day combination.
async function getLoggedWorkoutForDay (
week : number ,
day : string
) : Promise < LoggedWorkout | null >
The week number in the program (1-16)
The day name (e.g., “Monday”, “Wednesday”, “Friday”)
The logged workout if found, or null if no workout exists for that week/day
Example
import { getLoggedWorkoutForDay } from '@/lib/storage' ;
const workout = await getLoggedWorkoutForDay ( 1 , 'Monday' );
if ( workout ) {
console . log ( `Workout completed on ${ workout . dateLogged } ` );
console . log ( `Exercises logged: ${ workout . exercises . length } ` );
} else {
console . log ( 'No workout logged for Week 1 Monday' );
}
Use this function to check if a user has already completed a specific day before showing the workout template.
Source Code Reference
See implementation at lib/storage.ts:109-115
getCurrentWeek
Retrieves the user’s current week in the Rippler program.
async function getCurrentWeek () : Promise < number >
Current week number (defaults to 1 if not set)
Example
import { getCurrentWeek } from '@/lib/storage' ;
const week = await getCurrentWeek ();
console . log ( `You are on week ${ week } of 16` );
Source Code Reference
See implementation at lib/storage.ts:117-128
setCurrentWeek
Updates the user’s current week in the program.
async function setCurrentWeek ( week : number ) : Promise < void >
The week number to set (typically 1-16 for the Rippler program)
Example
import { setCurrentWeek } from '@/lib/storage' ;
// Advance to week 2
await setCurrentWeek ( 2 );
Source Code Reference
See implementation at lib/storage.ts:130-136
Data Types
LoggedWorkout
export interface LoggedWorkout {
id : string ; // Unique identifier
week : number ; // Program week number
day : string ; // Day name (e.g., "Monday")
dateLogged : string ; // ISO date string
exercises : LoggedExercise [];
completed : boolean ; // Whether entire workout was completed
}
LoggedExercise
export interface LoggedExercise {
tier : Tier ; // 'T1', 'T2', 'T3a', or 'T3b'
exercise : string ; // Exercise name
sets : LoggedSet []; // Array of sets performed
notes ?: string ; // Optional notes about performance
}
LoggedSet
export interface LoggedSet {
setNumber : number ; // Set number (1, 2, 3, etc.)
weight : number | string ; // Weight used
reps : number | string ; // Reps completed
completed : boolean ; // Whether the set was completed
}
Common Patterns
import { saveLoggedWorkout , getCurrentWeek } from '@/lib/storage' ;
import { useState } from 'react' ;
function WorkoutLogger ({ day , exercises }) {
const [ loggedSets , setLoggedSets ] = useState < LoggedExercise []>([]);
async function handleSave () {
const week = await getCurrentWeek ();
const workout : LoggedWorkout = {
id: `workout_ ${ Date . now () } ` ,
week ,
day ,
dateLogged: new Date (). toISOString (). split ( 'T' )[ 0 ],
exercises: loggedSets ,
completed: true
};
await saveLoggedWorkout ( workout );
}
return (
< View >
{ /* Render logging UI */ }
< Button title = "Save Workout" onPress = { handleSave } />
</ View >
);
}
Checking if Day is Complete
import { getLoggedWorkoutForDay , getCurrentWeek } from '@/lib/storage' ;
async function isDayComplete ( day : string ) : Promise < boolean > {
const week = await getCurrentWeek ();
const workout = await getLoggedWorkoutForDay ( week , day );
return workout ?. completed ?? false ;
}
// Usage
const mondayComplete = await isDayComplete ( 'Monday' );
if ( mondayComplete ) {
console . log ( 'You already completed Monday this week!' );
}
Calculating Weekly Statistics
import { getLoggedWorkouts , getCurrentWeek } from '@/lib/storage' ;
async function getWeeklyStats ( week : number ) {
const allWorkouts = await getLoggedWorkouts ();
const weekWorkouts = allWorkouts . filter ( w => w . week === week );
const totalSets = weekWorkouts . reduce (( sum , workout ) => {
return sum + workout . exercises . reduce (( exerciseSum , ex ) => {
return exerciseSum + ex . sets . filter ( s => s . completed ). length ;
}, 0 );
}, 0 );
return {
workoutsCompleted: weekWorkouts . length ,
totalSets ,
daysLogged: weekWorkouts . map ( w => w . day )
};
}
// Usage
const currentWeek = await getCurrentWeek ();
const stats = await getWeeklyStats ( currentWeek );
console . log ( `This week: ${ stats . workoutsCompleted } workouts, ${ stats . totalSets } sets` );
Progress Through Program
import { getCurrentWeek , setCurrentWeek } from '@/lib/storage' ;
async function advanceWeek () {
const current = await getCurrentWeek ();
const next = current + 1 ;
if ( next <= 16 ) {
await setCurrentWeek ( next );
console . log ( `Advanced to week ${ next } ` );
} else {
console . log ( 'Program complete!' );
}
}
Exporting Workout History
import { getLoggedWorkouts } from '@/lib/storage' ;
import * as FileSystem from 'expo-file-system' ;
import * as Sharing from 'expo-sharing' ;
async function exportWorkouts () {
const workouts = await getLoggedWorkouts ();
const json = JSON . stringify ( workouts , null , 2 );
const fileUri = ` ${ FileSystem . documentDirectory } workouts.json` ;
await FileSystem . writeAsStringAsync ( fileUri , json );
await Sharing . shareAsync ( fileUri );
}
getTargetOverridesForDay Get custom targets for a specific workout day
getExercises Load exercise library for workout logging