Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
8413897
Merge remote-tracking branch 'origin/main' into backend_ellie
limellie Apr 11, 2026
e2536a4
Merging main with updated front-end into backend_ellie
limellie Apr 11, 2026
9275e69
Removed stale code from experimenting w supabase
limellie Apr 11, 2026
6a4cc39
First attempt at goals backend.
limellie Apr 17, 2026
bf33b9b
Merge pull request #6 from hcp-uw/backend_seorim
sechoi-dev Apr 18, 2026
91626a5
Updated Navbar to get rid of marketplace button. Altered profile to r…
permeg Apr 18, 2026
d94101b
authentication part 1
mige000 Apr 24, 2026
d918dea
Merge branch 'authentication'
mige000 Apr 24, 2026
08fa7fa
authentication part 2
mige000 Apr 24, 2026
33290cc
authentication working
mige000 Apr 24, 2026
ccd0b21
logout button and file cleanup
mige000 Apr 25, 2026
a69cf21
Merge pull request #7 from hcp-uw/authentication
mige000 Apr 25, 2026
eba48ee
Altered the Calendar to include a popup day and got rid of header
permeg Apr 28, 2026
698df0e
Updated README to include problem statement, project description, and…
permeg Apr 28, 2026
f8b63c3
Finished up styling of basic implementation of Calendar page.
permeg May 1, 2026
27b5b29
Merge remote-tracking branch 'coderats/authentication' into backend_e…
limellie May 1, 2026
4dced77
Merge branch 'main' into front_end
permeg May 2, 2026
b9d08f9
Merge pull request #8 from hcp-uw/front_end
permeg May 2, 2026
f4ff211
Merge pull request #9 from hcp-uw/main
permeg May 2, 2026
3d0d48b
Configured connection to get all goals for a user
limellie May 2, 2026
c525373
added icons
mige000 May 8, 2026
58abf7c
Merge pull request (ADDED ICONS)
mige000 May 8, 2026
642961d
Merge pull request #11 from hcp-uw/main
permeg May 8, 2026
1481281
Implemented goal saving and deleting
limellie May 8, 2026
f9593ba
Moved some stuff, added comments
limellie May 8, 2026
fb59337
Fixed line length
limellie May 8, 2026
fcff368
Reverted icon version and added basic profile daily implementation
permeg May 9, 2026
e2f6750
Merge branch 'backend_anisha' into front_end
KingDurian May 9, 2026
d0cd84d
Added goal checkbox, goal history, goal end time, goal status
limellie May 12, 2026
59ac015
Merge pull request #14 from hcp-uw/backend_ellie
limellie May 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .env

This file was deleted.

55 changes: 40 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,49 @@
# React Native + Node Template
Created by Rasmus Makiniemi, curated by the Tech Team
# codeRats

## Background
React Native is an open-source JavaScript framework that allows you to build mobile apps using the same codebase, enabling you to write code once and deploy it across different platforms, such as iOS, Android, and Windows.
## Project Summary
Momentum is a gamified fitness app that brings traditional RPG-style progression into real-world health and activity tracking. Each user creates an avatar that levels up by gaining gear, skills, and companions when users log mileage, steps, gym time, and other fitness activities. The app motivates users through their community with friendly competition, accountability, and social betting.

React Native is one of the leading mobile development frameworks, and is used by countless companies which you can find out more [about here](https://reactnative.dev/showcase).
## Problem Statement
### Problem Definition
Existing gamified fitness apps are often boring and uninspiring. They tend to feel more like individual tracking tools than actual games. As a result, features become repetitive and users stop paying attention to the gamified elements.

## The Template
This template uses Expo to seemlessly bridge the gap between developing on a computer to displaying on a mobile device. With the use of the Expo Go app on your phone and a simple one line command in your terminal, Expo generates a QR code for you to scan in the app to open your project on a phone.
### Solution Approach
Momentum delivers a fitness experience with unique gamified features that feel genuinely like leveling up in a game. By making progress feel meaningful and rewarding, the app helps keep users engaged, motivated, and excited to continue using the platform.

As Expo automatically sends updates to the app on your phone, you can continuously keep coding and see the updates in real-time.
## Setup Instructions
### Prerequisites
Before running the project, make sure you have:

## Getting Started
For this project, you need two things installed, Expo Go on your phone and Node.js on your computer which you can find the downloads to here:

- [Expo Go](https://expo.dev/client)
- [Node.js](https://nodejs.org/en/download)
- [Expo Go](https://expo.dev/client) installed on your phone

### Run the client
1. Navigate to the client folder:

```bash
cd client
```

2. Install dependencies:

```bash
npm install
```

3. Start the development server:

```bash
npm start
```

Once you are done with that, start following the steps listed in the README's in the `client` and `server` folders to set up and run the front-end and backend respectively.
4. Open Expo Go on your phone:

Happy coding!
Download the Expo Go app and sign in or create an account. Scan the QR code shown in your terminal or enter the IP address manually. Make sure your phone and computer are on the same network.

*PS: This template is far from perfect, so if you find anything wrong, have any questions, or run into any steps you do not understand, reach out to the tech team!*
## Contributors / Maintainers
- Megan Pereira [@permeg](https://github.com/permeg)
- Michelle Ge [@mige000](https://github.com/mige000)
- Seorim Choi [@sechoi-dev](https://github.com/sechoi-dev)
- Ryan Mark Genova [@ryanmarkgenova](https://github.com/ryanmarkgenova)
- Anisha Vaish [@KingDurian](https://github.com/KingDurian)
- Ellie Lim [@limellie](https://github.com/limellie)
6 changes: 0 additions & 6 deletions app.json

This file was deleted.

114 changes: 79 additions & 35 deletions client/App.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import React, { useEffect, useState } from 'react';

import { StatusBar } from 'expo-status-bar';
import { StyleSheet, View, KeyboardAvoidingView, Platform} from 'react-native';
import { AuthProvider, useAuth } from './src/AuthContext';

import WelcomeScreen from './src/WelcomeScreen';
import LogInScreen from './src/LogInScreen';
Expand All @@ -21,45 +22,88 @@ import Navbar from './src/Navbar';

//const Tab = createBottomTabNavigator();

// NEW WITH AUTHENTICATION
function RootNavigator() {
const { user, loading } = useAuth();

export default function App() {
const [instruments, setInstruments] = useState([])
useEffect(() => {
getInstruments()
}, [])
async function getInstruments() {
const { data } = await supabase.from('instruments').select()
setInstruments(data)
}
if (loading) return null; // or a splash screen

return (
<KeyboardAvoidingView
behavior={Platform.OS === "ios" ? "padding" : "height"}
style={{ flex: 1 }}
>
<NavigationContainer>
<Stack.Navigator
screenOptions={{
headerShown: false,
}}
>
<Stack.Screen name="Welcome" component={WelcomeScreen} />
<Stack.Screen name="LogInScreen" component={LogInScreen} />
<Stack.Screen name="SignUpScreen" component={SignUpScreen} />
<Stack.Screen name="Profile" component={Profile} />
<Stack.Screen name="WorkoutScreen" component={WorkoutScreen} />
<Stack.Screen name="GoalsScreen" component={GoalsScreen} />
<Stack.Screen name="Calendar" component={Calendar} />
</Stack.Navigator>
<StatusBar style="auto" />
</NavigationContainer>
<Stack.Navigator screenOptions={{ headerShown: false }}>
{user ? (
// Authenticated screens
<>
<Stack.Screen name="Profile" component={Profile} />
<Stack.Screen name="WorkoutScreen" component={WorkoutScreen} />
<Stack.Screen name="GoalsScreen" component={GoalsScreen} />
<Stack.Screen name="Calendar" component={Calendar} />
</>
) : (
// Unauthenticated screens
<>
<Stack.Screen name="Welcome" component={WelcomeScreen} />
<Stack.Screen name="LogInScreen" component={LogInScreen} />
<Stack.Screen name="SignUpScreen" component={SignUpScreen} />
</>
)}
</Stack.Navigator>
);
}

export default function App() {
return (
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'padding' : 'height'} style={{ flex: 1 }}>
<AuthProvider>
<NavigationContainer>
<RootNavigator />
<StatusBar style="auto" />
</NavigationContainer>
</AuthProvider>
</KeyboardAvoidingView>
);
}

const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: 'white',
},
});
///

// OLD NO AUTHENTICATION
// export default function App() {
// const [instruments, setInstruments] = useState([])
// useEffect(() => {
// getInstruments()
// }, [])
// async function getInstruments() {
// const { data } = await supabase.from('instruments').select()
// setInstruments(data)
// }

// return (
// <KeyboardAvoidingView
// behavior={Platform.OS === "ios" ? "padding" : "height"}
// style={{ flex: 1 }}
// >
// <NavigationContainer>
// <Stack.Navigator
// screenOptions={{
// headerShown: false,
// }}
// >
// <Stack.Screen name="Welcome" component={WelcomeScreen} />
// <Stack.Screen name="LogInScreen" component={LogInScreen} />
// <Stack.Screen name="SignUpScreen" component={SignUpScreen} />
// <Stack.Screen name="Profile" component={Profile} />
// <Stack.Screen name="WorkoutScreen" component={WorkoutScreen} />
// <Stack.Screen name="GoalsScreen" component={GoalsScreen} />
// <Stack.Screen name="Calendar" component={Calendar} />
// </Stack.Navigator>
// <StatusBar style="auto" />
// </NavigationContainer>
// </KeyboardAvoidingView>
// );
// }

// const styles = StyleSheet.create({
// container: {
// flex: 1,
// backgroundColor: 'white',
// },
// });
2 changes: 1 addition & 1 deletion client/app.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,4 @@
"@react-native-community/datetimepicker"
]
}
}
}
Binary file removed client/assets/adaptive-icon.png
Binary file not shown.
Binary file removed client/assets/favicon.png
Binary file not shown.
Binary file removed client/assets/icon.png
Binary file not shown.
Binary file removed client/assets/splash.png
Binary file not shown.
3 changes: 2 additions & 1 deletion client/lib/supabase.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'react-native-url-polyfill/auto'
import { createClient } from '@supabase/supabase-js'
import 'expo-sqlite/localStorage/install';
import AsyncStorage from 'expo-sqlite/kv-store';

const supabaseUrl = process.env.EXPO_PUBLIC_SUPABASE_URL
const supabaseAnonKey = process.env.EXPO_PUBLIC_SUPABASE_PUBLISHABLE_KEY
Expand All @@ -15,7 +16,7 @@ if (!supabaseAnonKey) {

export const supabase = createClient(supabaseUrl, supabaseAnonKey, {
auth: {
storage: localStorage,
storage: AsyncStorage,
autoRefreshToken: true,
persistSession: true,
detectSessionInUrl: false,
Expand Down
Loading