|
|
import streamlit as st |
|
|
import random |
|
|
|
|
|
|
|
|
users = [ |
|
|
{"name": "John", "age": 23, "bio": "Loves weightlifting and HIIT workouts.", "interests": ["Weightlifting", "HIIT"], "preferences": ["Dumbbells", "Squat Rack"], "picture": "https://i0.wp.com/www.muscleandfitness.com/wp-content/uploads/2019/08/John-Cena-Sitting-Down-Resting.jpg?quality=86&strip=all"}, |
|
|
{"name": "Emma", "age": 21, "bio": "Yoga enthusiast and casual runner.", "interests": ["Yoga", "Running"], "preferences": ["Yoga Mat", "Treadmill"], "picture": "https://static01.nyt.com/images/2020/02/20/arts/20emma-1/20emma-1-mediumSquareAt3X-v2.jpg"}, |
|
|
{"name": "Mike", "age": 25, "bio": "Powerlifter looking for a sparring partner.", "interests": ["Powerlifting", "Sparring"], "preferences": ["Barbell", "Bench Press"], "picture": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTU_PQKNX063OJE_cg6OOPKKicS6PTQXYx8Cg&s"}, |
|
|
{"name": "Sophia", "age": 22, "bio": "Pilates and bodyweight exercises are my thing!", "interests": ["Pilates", "Bodyweight"], "preferences": ["Resistance Bands", "Pull-Up Bar"], "picture": "https://alldus.com/wp-content/uploads/2022/10/shutterstock_754222927-min-scaled.jpg"}, |
|
|
{"name": "Chris", "age": 24, "bio": "Big on calisthenics and cardio challenges.", "interests": ["Calisthenics", "Cardio"], "preferences": ["Parallel Bars", "Elliptical"], "picture": "https://hips.hearstapps.com/hmg-prod/images/chris-64a6d63b7263d.png"}, |
|
|
{"name": "Liam", "age": 26, "bio": "Always up for CrossFit and obstacle races!", "interests": ["CrossFit", "Obstacle Races"], "preferences": ["Kettlebells", "Climbing Rope"], "picture": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR9KN-NzG_YmTGbXUEjgKfUWgX2vnZQXKhx1A&s"}, |
|
|
{"name": "Olivia", "age": 23, "bio": "Focused on strength and mobility training.", "interests": ["Strength Training", "Mobility"], "preferences": ["Foam Roller", "Deadlift Platform"], "picture": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRbNHL7m4G1omr3rsA3-l3kGwA0iK_YIym9-w&s"}, |
|
|
] |
|
|
|
|
|
|
|
|
def get_random_user(excluded_users): |
|
|
available_users = [user for user in users if user["name"] not in excluded_users] |
|
|
return random.choice(available_users) if available_users else None |
|
|
|
|
|
|
|
|
st.title("GrinderGang Gym V3") |
|
|
st.write("Find your perfect gym buddy! Swipe through potential partners and see who matches your vibe.") |
|
|
|
|
|
|
|
|
if "seen_users" not in st.session_state: |
|
|
st.session_state["seen_users"] = [] |
|
|
|
|
|
if "liked_users" not in st.session_state: |
|
|
st.session_state["liked_users"] = [] |
|
|
|
|
|
if "chat_logs" not in st.session_state: |
|
|
st.session_state["chat_logs"] = {} |
|
|
|
|
|
if "events" not in st.session_state: |
|
|
st.session_state["events"] = [] |
|
|
|
|
|
if "posts" not in st.session_state: |
|
|
st.session_state["posts"] = [] |
|
|
|
|
|
current_user = get_random_user(st.session_state["seen_users"]) |
|
|
|
|
|
if current_user: |
|
|
st.image(current_user["picture"], width=150) |
|
|
st.write(f"### {current_user['name']}, {current_user['age']} years old") |
|
|
st.write(f"*{current_user['bio']}*") |
|
|
st.write("**Interests:** " + ", ".join(current_user['interests'])) |
|
|
st.write("**Equipment Preferences:** " + ", ".join(current_user['preferences'])) |
|
|
|
|
|
col1, col2 = st.columns(2) |
|
|
|
|
|
with col1: |
|
|
if st.button("👍 Like"): |
|
|
st.session_state["seen_users"].append(current_user["name"]) |
|
|
st.session_state["liked_users"].append(current_user) |
|
|
st.session_state["chat_logs"][current_user["name"]] = [] |
|
|
st.success(f"You liked {current_user['name']}!") |
|
|
|
|
|
with col2: |
|
|
if st.button("👎 Pass"): |
|
|
st.session_state["seen_users"].append(current_user["name"]) |
|
|
st.info(f"You passed on {current_user['name']}.") |
|
|
|
|
|
else: |
|
|
st.write("No more gym buddies to show. Come back later!") |
|
|
|
|
|
|
|
|
if st.session_state["liked_users"]: |
|
|
st.write("### Your Matches") |
|
|
for user in st.session_state["liked_users"]: |
|
|
st.image(user["picture"], width=100) |
|
|
st.write(f"**{user['name']}**, {user['age']} years old") |
|
|
st.write(f"*{user['bio']}*") |
|
|
st.write("**Interests:** " + ", ".join(user['interests'])) |
|
|
st.write("**Equipment Preferences:** " + ", ".join(user['preferences'])) |
|
|
|
|
|
with st.expander(f"Chat with {user['name']}"): |
|
|
chat_log = st.session_state["chat_logs"][user["name"]] |
|
|
for message in chat_log: |
|
|
st.write(message) |
|
|
|
|
|
new_message = st.text_input(f"Send a message to {user['name']}", key=f"chat_{user['name']}") |
|
|
if st.button(f"Send to {user['name']}", key=f"send_{user['name']}"): |
|
|
if new_message: |
|
|
chat_log.append(f"You: {new_message}") |
|
|
st.session_state["chat_logs"][user["name"]] = chat_log |
|
|
st.success("Message sent!") |
|
|
|
|
|
|
|
|
st.write("### Post Your Workout") |
|
|
workout_name = st.text_input("Workout Name", key="workout_name") |
|
|
workout_description = st.text_area("Workout Description", key="workout_description") |
|
|
workout_date = st.date_input("Workout Date", key="workout_date") |
|
|
workout_time = st.time_input("Workout Time", key="workout_time") |
|
|
|
|
|
if st.button("Post Workout"): |
|
|
if workout_name and workout_description: |
|
|
workout = { |
|
|
"name": workout_name, |
|
|
"description": workout_description, |
|
|
"date": workout_date, |
|
|
"time": workout_time |
|
|
} |
|
|
st.session_state["events"].append(workout) |
|
|
st.success(f"Workout '{workout_name}' posted successfully!") |
|
|
else: |
|
|
st.error("Please provide both a workout name and description.") |
|
|
|
|
|
if st.session_state["events"]: |
|
|
st.write("### Upcoming Workouts") |
|
|
for event in st.session_state["events"]: |
|
|
st.write(f"**{event['name']}** - {event['date']} at {event['time']}") |
|
|
st.write(f"*{event['description']}*") |
|
|
|
|
|
|
|
|
st.write("### Share Your Gym Journey") |
|
|
post_type = st.selectbox("What do you want to share?", ["Workout Video", "Dance Celebration", "Meal Prep Recipe", "Workout Music"]) |
|
|
post_description = st.text_area("Describe your post", key="post_description") |
|
|
post_link = st.text_input("Link to video, recipe, or music (optional)", key="post_link") |
|
|
|
|
|
if st.button("Share Post"): |
|
|
if post_description: |
|
|
post = { |
|
|
"type": post_type, |
|
|
"description": post_description, |
|
|
"link": post_link |
|
|
} |
|
|
st.session_state["posts"].append(post) |
|
|
st.success(f"Your {post_type.lower()} has been shared!") |
|
|
else: |
|
|
st.error("Please provide a description for your post.") |
|
|
|
|
|
if st.session_state["posts"]: |
|
|
st.write("### Community Posts") |
|
|
for post in st.session_state["posts"]: |
|
|
st.write(f"**{post['type']}**") |
|
|
st.write(f"*{post['description']}*") |
|
|
if post['link']: |
|
|
st.write(f"[View More]({post['link']})") |
|
|
|